本文是CSAPP系列的第一篇文章,将对 Linux 上的一些基础操作进行介绍,包括 shell、vim、git、ssh等。
Linux Shell
shell程序本质上就是一个脚本解释器,我们打开linux终端以后,就可以看到shell程序在等待输入。
在日常的学习和工作中,我们需要了解并掌握 shell 脚本的一些常用命令,帮助我们提升工作效率,下面将介绍几个重要的 shell 命令。
目录操作
pwd
:打印当前工作目录
cd
:进入目录
重要的目录名:
~
:home 目录.
:当前目录..
:上一级目录/
:根目录
文件传输
scp:scp工具能够在两台机器之间安全地传输文件
用法:scp user@alpha.com:/somedir/somefile.txt user@beta.com:/anotherdir
远程机器传输到本地:scp username@from_host:file.txt /local/directory
本地传输到远程机器:scp file.txt username@to_host:/home/directory
远程传输到远程:scp username@from_host:/remote/file.txt username@to_host:/remote/directory/
scp命令可以带一些选项:
- -r:递归拷贝目录
- -v:verbose模式,打印信息
文件操作
文件拷贝:cp <source> <destination>
文件移动/重命名:mv <source> <destination>
删除文件:rm <filename>
删除目录:rmdir <directory>
创建空白文件:touch <file>
隐藏 .swap 文件:malloc.c -> .malloc.c.swp ,其中swp文件对应的是未保存的老版本,通常需要将其删除
文件压缩/解压缩
tar工具用来压缩或解压文件,它可以带如下选项:
- -c:创建
- -x:打开
- -v:verbose模式,打印操作过程
- -f:指定文件名
例如,
压缩文件:tar -cxf name-of-archive.tar dir1 dir2 dir3
解压文件:tar -zxf name-of-archive.tar
文本处理
sort
:对文件进行排序
- -f:忽略大小写
- -n:数字序
- -r:逆序
cat
:查看并打印文件内容
uniq
:去除重复行
head/tail
:打印文件的前(后)x行
- -bx:打印前(后)x字节
- -nx:打印前(后)x行
Grep(全局正则表达式打印)
grep工具可以按照指定模式从文件中查询内容
用法:grep [OPTION...] PATTERNS [FILE...]
选项:
-c
:打印匹配行的数量-n
:显示匹配行以及行号-r
:递归查询目录中所有文件-i
:忽略大小写
Echo&Sed
echo
:打印文本行
sed
:可以对文本进行 insert
、deletion
、search
以及replace
操作,sed 's/old/new/' file.txt
,其中 s表示替换(substitution),使用new代替old
VIM
VIM 是用来进行文本编辑的工具,在服务器上往往没有VSCode这类编辑器,因此需要掌握一些VIM的基本操作。
vim有三种基本模式:
- 命令模式:使用
esc
进入命令模式 - 插入模式:按下
i
键进入插入模式 - 可视化模式:按下
v
进入该模式,该模式下使用y
表示copy,使用p
表示paste
写入::w
退出::q
写入并退出:wq
GIT
GIT是版本控制工具,能够对代码版本进行管理,能够非常方便进行团队代码协作以及代码版本管理。
设置git:
git config --global user.name "Your Name"
git config --global user.email "Your Email"
创建一个git仓库:
git init
:初始化当前目录
git clone
:从远端拉取一个仓库
git add
:暂存将要提交的文件
git commit -m <MESSAGE>
:提交暂存的修改
git push
:将修改推送到远程
git pull
:从远程拉取最新的代码
git status
:查看当前仓库的状态
git log
:查看提交信息
git diff
:查看本地修改与库上的区别
git revert <COMMIT_HASH>
:创建一个新的提交,该提交将回退到COMMIT_HASH
git checkout <FILE_NAME>
:将修改回退
git reset --hard/--soft <COMMIT_HASH>
:回退到COMMIT_HASH,和git revert的区别在于,它不会生成新的commit记录
Wildcards
模式匹配,在linux中经常会碰到需要进行模式匹配的操作,例如找到所有以 compute开头的单词,下面介绍一些常用的模式匹配语法
*
:匹配任意字符
?
:匹配任意单个字符
[characters]*
:匹配characters集合中的任意字符
[!characters]
:匹配不在characters集合中的任意字符
和前面介绍的shell命令结合使用:
rm g*
:删除g开头的所有文件
ls b*.txt
:列出所有以 b 开头,.txt结尾的文件
cat Data???
:查看所有以Data开头并以3个字符结尾的文件内容
[[:upper:]]*
:匹配任意以大写字符开头的文件
*[![:lower:]]
:匹配不以小写字符结尾的文件
欢迎各位关注CSAPP系列,后续将继续更新完善该系列,包括知识点介绍以及实验分享。