常用Linux命令

本文介绍了常用的Linux命令

查找帮助

1
2
3
4
5
6
# 查看说明man(Manual)
man ls
# 查看详解info(Information)
info ls
# --help 选项,提供简短介绍
ls --help

文件和文件夹管理

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
# pwd(Print Working Directory)显示当前工作目录
pwd

# cd(Change Directory)进入指定目录
cd newFolder

# mv(Move)
# -f 如果目标文件已经存在,不会询问而直接覆盖(force)
# -i 若目标文件已经存在时,会询问是否覆盖
# -u 若目标文件已经存在,源文件比较新,才会覆盖(update)
mv -i sourceFile destFile

# cp(Copy)
# -i 若目标档已经存在时,在覆盖时会先询问
# -r 递归持续复制,用于目录的复制
# -u 若目标文件已经存在,源文件比较新,才会覆盖(update)
cp -i sourceFile destFile
cp -ir sourceDir destDir

# rm(Remove)
# -i 操作前会先询问
# -r 递归持续删除
rm tmpFile
rm -r tmpDir

# mkdir(Make Directory)创建目录
# -p 递归创建目录
mkdir newFolder
mkdir -p newFolder/newFolder2

# rmdir(Remove Directory)删除目录
# 必须目录为空
# -p 递归删除目录
rmdir newFolder
rmdir -p newFolder/newFolder2

# ls(List)查看当前目录下的文件和目录
# -l 使用长列表模式,列出更多细节
# -a 查看所有文件,包括以.开头的隐藏文件
ls -la

# echo(Echo)
echo hello world

# stat(Status)查看文件或者文件系统的状态
stat tmpFile

# touch(Touch)修改文件或目录的时间
# -a 仅更改读取时间
# -m 仅更改修改时间
# -d 使用指定的日期更改,而非当前时间
# 修改"所有时间属性"为当前系统时间
touch tmpFile
# 修改"读取时间"为当前系统时间
touch -a tmpFile

# ln(Link)创建连接
# 硬链接,多个文件名指向同一索引节点(Inode),只能针对文件,可以防止误删(只要有一个索引,文件就不会被删除)
ln destFile sourceFile
# 软链接,是普通文件,数据块中存放的内容是另一文件的路径名的指向
ln -s destFile sourceFile

# cat(concatenate)由第一行开始显示文件内容
# -n 列印出行号,连同空白行也会有行号
cat tmpFile
cat sourceFile1 sourceFile2 > destFile

# tac 从最后一行开始显示文件内容

# head 取出文件前面几行
head -n 5 tmpFile

# tail 取出文件后面几行
tail -n 5 tmpFile

# find
# 将目前目录及其子目录下名称为tmpFile的文件列出来。
find . -name tmpFile

高级文本处理

正则表达式

模式 描述
^ 匹配字符串开头
$ 匹配字符串结尾
. 匹配除了换行符的任意字符
[...] 匹配[]中的任意一个字符,例如[a-zA-Z]
... 匹配不在[]中的任意一个字符,例如
re* 匹配0个或多个表达式
re+ 匹配1个或多个表达式
re? 匹配0个或1个表达式
re{n} 精确匹配n个前面表达式
re{n,} 匹配前面表达式至少n个
re{m, n} 匹配m到n个前面表达式
a|b 匹配a或者b
(re) 分组

需要转义的字符有$ ( ) * . [ ] ? { } ^ |

grep

1
2
3
4
5
6
7
8
# grep (Globally search a Regular Expression and Print)
# 用于匹配、查找
# -E 开启扩展(Extend)的正则表达式,{}和?等不需要转义
# -n 显示行号
# -v 只打印没有匹配的,而匹配的反而不打印(invert)
# -o 只显示被模式匹配到的字符串
grep "hello" tmpFile
ifconfig | grep -E "[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}"

awk

1
2
3
# awk (Aho Weiberger and Kernighan)
# 输出第1、4列
awk '{print $1,$4}' log.txt

sed

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
# sed (Stream Editor)
# sed是行处理工具,一次处理一行并且不改变文本内容

# 参数
# -i 直接修改
# -n 仅显示处理后的结果
# -e 以选项中指定的script来处理输入的文本文件(可不写)

# 命令
# d 删除行(delete)
# p 打印行(print)
# a 新增 (add),在后
# i 插入(insert),在前
# c 取代一行
# s 取代
# q 推出(quit)
# = 打印匹配行号

# 第二行后新增一行
sed '2a\newLine' tmpFile
sed '2a newLine' tmpFile
# 删除第二行
sed '2d' tmpFile
# 删除第二到最后行
sed '2,$d' tmpFile
# 定位第二行
sed -n '2p' tmpFile
# 定位第二到第五行
sed -n '2,5p' tmpFile
# 搜索一行
sed -n '/SCL/p' tmpFile
# 替换一行
sed -n '/SCL/{s/SCL/SCL2/;p;q}' tmpFile

归档、压缩和加密

计算MD5值md5sum

1
2
3
4
5
6
7
8
# 校验单个文件
echo "123" > tmpFile
md5sum tmpFile > tmpFile.md5
md5sum -c tmpFile.md5
# 检验多个文件
echo "1234" > tmpFile2
md5sum tmpFile tmpFile2 > multipleFile.md5
md5sum -c multipleFile.md5

打包和压缩tar

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# -z 使用gzip算法压缩或者解压
# -j 使用bzip2算法压缩或者解压
# -c 创建包(Create)
# -t 查看(Tap)
# -x 解包(Extract)
# -v 显示详情(verbose)
# -f 指定文件(File)
# 以gzip格式压缩
tar -czvf tmpFile.tar.gz tmpFile
# 查看gzip格式压缩文件内容
tar -tzvf tmpFile.tar.gz
# 解压缩gzip格式压缩文件
tar -xzvf tmpFile.tar.gz
# 批量解压缩
ls *.tar.gz | xargs -n1 tar xzvf

压缩zip

可能需要安装zip和unzip工具

1
2
3
4
# 压缩
zip tmpFile.zip tmpFile
# 解压缩
unzip tmpFile.zip

加密和密钥管理GPG

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
# 生成密钥
gpg --full-generate-key

# 查看密钥
gpg --list-keys
gpg -k

# 导出密钥
# --armor或者-a 代表创建ASCII格式的文件
# --export-key,导出公钥
--export-secret-keys,导出私钥
# xxx代表uid或者密钥指纹
gpg --armor --export xxx > xxx.key
gpg --armor --export-secret-key xxx > xxx.key

# 导入密钥
gpg --import xxx.key

# 删除密钥
gpg --delete-keys xxx
gpg --delete-secret-keys xxx

# 加密
# --recipient或者-r 指定接收者密钥
gpg --recipient xxx --output tmpFile.gpg --encrypt tmpFile
gpg -r xxx -o tmpFile.gpg -e tmpFile

# 解密
gpg --output tmpFile --decrypt tmpFile.gpg
gpg -o tmpFile -d tmpFile.gpg

# 签名
# --sign 生成既含原文又含签名的二进制文件(取出时同解密)
gpg --sign tmpFile
# --clear-sign 生成适合阅读的既含原文又含签名的文件
gpg --clear-sign tmpFile
# --detach-sign 只生成签名文件
gpg --armor --detach-sign tmpFile

# 验证
gpg --verify tmpFile.asc tmpFile

加密和密钥管理openSSL

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
# 随机数
openssl rand -base64 16
# 随机密码
openssl rand -base64 32 | tr -d +/ | cut -c 1-16

# 摘要
# 可选方法有[-md5|-sha256...]
openssl dgst -md5 tmpFile

# 对称加密
# -des DES算法
# -e 加密
# -a ASCII编码,否则为二进制编码
openssl enc -des -e -in tmpFile -out tmpFile.des
openssl enc -des -e -a -in tmpFile -out tmpFile.des

# 对称解密
# -d 解密
openssl enc -des -d -a -in tmpFile.des -out tmpFile

# 密钥生成
openssl genrsa -out private.pem 1024
openssl rsa -in private.pem -pubout -out public.pem

# 公钥加密
openssl rsautl -encrypt -in tmpFile -inkey public.pem -pubin -out tmpFile.rsa

# 私钥解密
openssl rsautl -decrypt -in tmpFile.rsa -inkey private.pem -out tmpFile

# 私钥签名
openssl dgst -sign private.pem -sha256 -in tmpFile -out sign.txt

# 公钥验证
openssl dgst -verify public.pem -sha256 -signature sign.txt tmpFile

# 私钥验证
openssl dgst -prverify private.pem -sha256 -signature sign.txt tmpFile

系统管理

Top

无需其他参数,通常输出为

1
2
3
4
5
6
7
8
top - 21:11:38 up 7 min,  2 users,  load average: 0.15, 0.29, 0.20
Tasks: 192 total, 2 running, 190 sleeping, 0 stopped, 0 zombie
Cpu(s): 0.2%us, 0.2%sy, 0.0%ni, 99.7%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Mem: 6109668k total, 630520k used, 5479148k free, 33388k buffers
Swap: 0k total, 0k used, 0k free, 200328k cached

PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
2342 root 20 0 255m 8780 5152 S 0.3 0.1 0:01.11 vmtoolsd

抬头部分

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 第一行 任务队列信息
当前时间、运行时间、当前用户、平均负载(三个数字分别是1分钟、5分钟和15分钟的平均负载)

# 第二行 任务
总进程数、运行进程数、休眠进程数、停止进程数、僵尸进程数

# 第三行 cpu状态
用户空间cpu占比us、内核空间cpu占比sy、改变过优先级的进程cpu占比ni、空闲cpu占比id、IO等待cpu占比wa、硬件中断cpu占比hi、软件中断cpu占比si

# 第四行 物理内存
物理内存总量、使用的内存、空闲的内存、缓存的内存

# 第五行 交换分区
交换区总量、使用的交换区、空闲的交换区、缓存的交换区

正文部分:

1
2
3
4
5
6
7
8
9
10
11
12
PID: 进程ID
USER: 进程所有者
PR: 进程的优先级,实时进程为RT,其他为(优先级-100)
NI: NICE值,取-20至19的整数,越小优先级越高
VIRT: 虚拟内存用量,单位kB,为SWAP+RES
RES: 进程使用的(未被交换的)物理内存用量,单位kB
SHR: 共享内存大小,单位kB
S: 进程状态,D=不可中断的睡眠,R=运行,S=睡眠,T=跟踪,Z=僵尸
%CPU: cpu时间占比
%MEM: 物理内存占比
TIME+: cpu时间总计
COMMAND: 进程名称

磁盘管理

1
2
3
4
5
6
7
8
9
10
11
12
13
# df 检查文件系统的磁盘空间占用
# -a 列出所有的文件系统
# -h 以较易阅读的 GBytes, MBytes, KBytes 等格式显示
# -k 以 KBytes 的容量显示各文件系统
# -m 以 MBytes 的容量显示各文件系统
df -h

# du 检查文件和目录磁盘使用的空间
# -a 列出所有的文件与目录容量
# -h 以较易阅读的 GBytes, MBytes, KBytes 等格式显示
# -k 以 KBytes 的容量显示各文件系统
# -m 以 MBytes 的容量显示各文件系统
du -ah ~/Desktop

参考

  1. 老马的春天. GPG入门指南(加密/签名).
  2. 明翼. OpenSSL 介绍和使用.
  3. 牛奔. Linux top命令详解.
  4. 菜鸟教程. Linux 命令大全.
0%