目录

【Linux】常见命令

说明

在进行软件开发的过程中,避免不了要经常和Linux系统打交道。这里总结了一些Linux常见的命令和快捷键。

常见快捷键

Linux中有如下常见快捷键:

  • Ctrl+c:终止前台运行的程序

  • Ctrl+z:将前台运行的程序挂起到后台

  • Ctrl+d:退出 等价于exit

  • Ctrl+l:清屏

  • Ctrl+a | Ctrl+home:光标移到命令行的最前端

  • Ctrl+e | Ctrl+end:光标移到命令行的后端

  • Ctrl+u:删除光标前的所有字符

  • Ctrl+k:删除光标后的所有字符

  • Ctrl+r:搜索历史命令

grep

语法

1
grep 选项 '关键字' 文件名

常见选项

  • -i: 不区分大小写。

  • -v: 查找不包含指定内容的行。

  • -w: 按单词搜索

  • -o: 打印匹配关键字

  • -c: 统计匹配到的次数

  • -n: 显示行号

  • -r: 逐层遍历目录查找

  • -A: 显示匹配行及后面多少行

  • -B: 显示匹配行及前方多少行

  • -C: 显示匹配行及前后多少行

  • -l: 只列出匹配的文件名

  • -L: 列出不匹配的文件名

  • -e: 使用正则表达式

  • -E: 使用扩展正则表达式

  • ^key: 以关键字开头

  • key$: 以关键字结尾

  • ^$: 匹配空行

  • --color=auto: 将找到的内容,加上颜色显示

举例

  1. 去除空行:
1
grep -v '^$' [files...]

wc

统计文本的行数、单词数、字符数、字节数。

语法

1
wc 选项 文件

常用选项

  • -c:统计字节数

  • -w:统计单词数

  • -l:统计行数

  • -m:统计字符数

输出结果

输出结果不受选项顺序的影响。

如果选项全选,输出顺序为:

1
行数 单词数 字符数 字节数 文件名

如果选项缺省,输出顺序为:

1
行数 单词数 字节数 文件名

示例

  1. 统计文件内容行数:
1
wc -l filename

cut

列截取工具,用于文本列的截取。

语法

1
cut 选项 文件名

常用选项

  • -b:以字节为单位,进行分割,然后输出指定范围的内容

  • -c:以字符为单位,进行分割、然后输出指定范围的内容

  • -d:自定义分割符,默认为制表符\t,需要和-f同时使用

  • -f:可与-d同时使用,指定截取的区域(列)

  • 指定范围:

    • N:指定第N个字节、字符或者字段

    • N-:从N开始到结束

    • N-M:从NM,包含M

    • -M:从开始到M,包含M

示例

  1. 以空格为分隔符,获取第2,第3,第4和第6个字段
1
cut -d " " -f 2-4,6 filename
  1. 以字节为分割单位,获取第2,第3,第4和第6个字段
1
cut -b 2-4,6 filename
  1. 以字符为分割单位,获取第2,第3,第4和第6个字段
1
cut -c 2-4,6 filename

sort

将文件的每一行作为一个单位,从首字符向后,依次按照unicode码值进行比较,最后将结果升序输出。

语法

1
sort 选项 源文件 [-o 输出文件]

选项

  • -u:去除重复行

  • -r:降序排列,默认升序

  • -o:将排序结果输出到文件中,类似于重定向符号>

  • -n:以数字排序,默认是按字符排序

  • -t:分隔符

  • -k:第n列

  • -b:忽略前导空格

  • -R:随机排序,每次运行结果均不同

示例:

  1. 去除排序结果的重复行:
1
2
3
4
5
# apple   =>  apple
# orange  =>  banana
# apple   =>  orange
# banana  =>
sort -u filename
  1. 根据第2列的数值,进行排序
1
2
3
4
5
# apple:12   =>  orange:2
# orange:2   =>  apple:12
# apple:12   =>  apple:12
# banana:23  =>  banana:23
sort -t ":" -k 2 -n filename

uniq

去除并删除文中出现的连续行,一般与sort命令结合使用。即为了使uniq起作用,所有的重复行必须是相邻的。

选项

  • -u--unique仅显示出现一次的行。

  • -i:忽略大小写。

  • -c:统计重复行次数

  • -d:只显示重复行

示例

  • 统计各行出现的次数

    1
    
    sort filename | uniq -c
    
  • 在文中找出重复行

    1
    
    sort filename | uniq -d
    

tee

从标准输入读取,并且写入到标准输出和文件。

选项

  • -a:追加重定向,默认是覆盖。

  • -i:忽略中断信号。

示例

  • 将输入同时保存到file1file2

    1
    
    tee file1 file2
    

diff

用于逐行比较文件的不同。

diff描述两个文件不同的方式,是告诉我们怎么改变第一个文件之后,与第二个文件匹配。

语法

1
diff [选项] 文件1 文件2

选项

  • -b:不检查空格

  • -B:不检查空白行

  • -i:不检查大小写

  • -w:忽略所有的空格

  • --normal:正常格式显示(默认)

  • -c:上下文格式显示

  • -u:合并格式显示

  • -N:将不存在的文件当作空文件

  • -q:比较两个目录不同时,默认情况下,会显示同名文件具体的差异内容。如果使用了-q参数,则只会显示文件的差异。

显示格式

  1. 正常模式显示
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
diff f1.txt f2.txt

5c5	# 第一个文件的第5行需要改变(c=change)才能和第二个文件的第5行匹配(a, addition; d, deletion)
...

3d3	# 第一个文件的第3行删除(d=delete)后才能和第二个文件的第3行匹配
...

6a6,7	# 第一个文件的第6行增加(a=add)内容后,才能和第二个文件的第6到7行匹配
...
  1. 上下文模式显示
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
diff -c f1.txt f2.txt

*** f1.txt      2020-09-15 11:17:10.636634400 +0800 # 第一个文件信息
--- f2.txt      2020-09-15 11:20:17.862629200 +0800 # 第二个文件信息
*************** # 分隔符
*** 1,6 ***     # 以***开头表示file1文件,1,6表示1到6行
! aaa           # !表示改行需要修改才与第二个文件匹配
- hello world   # -表示需要删除改行才与第二个文件匹配
...

--- 1,7 ---     # 以---开头表示file2文件,1,7表示1到7行
! aaa           # 表示第一个文件需要修改才能与第二个文件匹配 
! hello         # 表示第一个文件需要修改才能与第二个文件匹配
...

+ 333           # 表示第一个文件需要加上该行才能与第二个文件匹配
+ world         # 表示第一个文件需要加上该行才能与第二个文件匹配
...
  1. 合并格式显示
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
diff -u f1.txt f2.txt

--- f1.txt      2020-09-15 11:17:10.636634400 +0800 # 变动前文件
+++ f2.txt      2020-09-15 11:20:17.862629200 +0800 # 变动后文件
@@ -2,9 +2,9 @@  # 第一个文件的2到9行 第二个文件的2到9行
 two
 three
 four
-five            # 删除第一个文件的行
+fifteen         # 第二个文件新增的行
 six
 seven
 eight
 nine
-ten
+TEN

sshpass

非交互式密码验证工具。

安装

  • RedHat/Centos安装:

    1
    
    yum install sshpass
    
  • Debian/Ubuntu安装:

    1
    
    sudo apt-get install sshpass
    
  • 源码安装:

    1
    2
    3
    4
    5
    
    -> wget http://sourceforge.net/projects/sshpass/files/latest/download -O sshpass.tar.gz
    -> tar -xvf sshpass.tar.gz
    -> cd sshpass-1.06
    -> ./configure
    -> sudo make install
    

常用参数

  • -f:使用文件内容作为密码

  • -p:通过参数提供密码

  • -e:通过环境变量SSHPASS提供密码

示例

  • 登录服务器,并且查看文件系统磁盘使用情况:

    1
    
    sshpass -p 'my_pass_here' ssh username@host 'df -h'
    

paste

用于合并文件行。

选项

  • -d:自定义分隔符,默认是tab。

  • -s:文件内容按行排布,默认按列排布。

tr

用于字符替换和删除。

用法

  • 用法一:命令的执行结果交给tr处理。

    1
    
    commands | tr "string1" "string2"
    

    string1string2的字符一一对应替换。

    如果string1string2长,则string2的最后一个字符会对应多个string1中的字符。

    如果string1string2短,则string2多余部分被丢弃。

  • 用法二:tr处理的内容来自文件,需要使用标准输入符号

    1
    
    tr "string1" "string2" < filename
    

    string1string2的具体用法同上。

  • 用法三:匹配string进行相应操作,如删除操作

    1
    
    tr options "string" < filename
    

    常用选项:

    • -d:删除字符串中所有输入的字符。

    • -s:删除所有重复出现的字符,只保留第一个,即将重复出现的字符压缩为一个字符。