实用Linux命令

基本操作

常用的基础命令:

1
2
3
4
5
6
7
8
9
cd -                     # 切换到上一次的工作目录
Ctrl-R(keyboard) # 查找历史命令
cp -a /source/. /dest # 将一个目录下的所有文件拷贝到另一个目录
ln -s target soft_link # 为名为target的文件创建一个软链接,target在前
du -sh file_path # 查看文件夹的大小,不加s选项会列出每个子文件夹大小
# 通过用户名和密码登录远程主机
sshpass -p your_password ssh username@hostname
# 在两个主机之间传输文件
scp [options] username1@source_host:dir1/file1 username2@dest_host:dir2/file2

软件管理

和rpm文件有关的:

1
2
3
4
rpm -qa | grep kernel | sort                    # 查看系统安装的所有内核(rpm系)
rpm -ivh wps-office-10.1.0.6757-1.x86_64.rpm # 安装rpm文件
rpm -e wps-office # 卸载通过rpm安装的软件
yum remove wps-office # 亦可使用yum命令卸载(rpm系)

进程管理

查看和管理进程的命令:

1
2
3
ps -ef                                # 查看系统中所有进程
top # 显示实时的系统状态
kill -9 3271 # -9选项,根据PID杀死进程

压缩解压缩

使用tar进行压缩、解压缩时需要好几个选项配合使用,只要剖析一下几个常用选项,就很容易记住了:

  • -c, --create 创建新压缩包
  • -t, --list 查看包的内容
  • -x, --extract 从包中提取文件
  • -f, --from=archive 指定包文件名
  • -r, --append 在末尾添加文件
  • -u, --update 更新原压缩包中的文件
  • -v, --verbose 详细列出处理的文件

下面的选项和压缩包的格式相关:

  • -j 和bzip2相关的
  • -J, -xz 和xz相关的
  • -z 和gzip相关的
  • -Z 和compress相关的

有了上面的铺垫,很容易理解和记忆下面的命令:

1
2
3
4
5
6
7
8
9
10
11
12
# .tar文件
tar -vcf all.tar *.png # 将所有的png文件打包成名为all.tar的包,列出处理过的文件名
tar -vrf new.png all.tar # 将new.png增加到all.tar包中去,列出处理过的文件名
tar -vuf new.png all.tar # 更新all.tar包中的new.png文件,列出处理过的文件名
tar -tf png.tar # 列出png.tar包中包含的文件
tar -xf all.tar # 解出all.tar中所有的文件
# .gz, .bz2, .Z文件
tar -czf all.tar.gz *.png # 将所有的png文件打包成名为all.tar的包,并用gzip压缩,压缩包为all.tar.gz
tar -cjf all.tar.bz2 *.png # 将所有的png文件打包成名为all.tar的包,并用bzip2压缩,压缩包名为all.tar.bz2
tar -cZf all.tar.Z *.png # 将所有的png文件打包成名为all.tar的包,并用compress压缩,压缩包名为all.tar.Z
tar -xzvf all.tar.gz # 解压all.tar.gz
tar -xjvf all.tar.bz2 # 解压all.tar.bz2

文件查找

Linux的find命令在目录结构中搜索文件,并执行指定操作。命令的基本格式如下:

1
find pathname -options [-print -exec -ok ...]

命令选项-options指定查找的根据,常用的有:

  • -name 根据文件名查找文件
  • -size 根据文件大小查找文件
  • -perm 根据文件权限查找文件
  • -user 根据文件属主查找文件
  • -type 根据文件类型查找文件

命令参数意义如下:

  • -print 将匹配的文件名打印出来
  • -exec 对匹配的文件执行该参数所给出的shell命令,末尾必须以分号;结尾,一般在分号前加上转义字符,相应命令的形式为cmd {} \; 其中花括号{}代表搜索出来的文件名
  • -ok-exec作用相同,每执行一个命令前,会给出提升让用户确认,更加安全

下面是一些例子:

1
2
3
4
5
find . -name "*.log" -print           # 在当前目录查找以.log结尾的文件
find /tmp -perm 777 # 按照权限查找文件
find . -size +1000c 777 # 按照文件大小查找
find . -name "*.jpg" -exec mv {} ~ \; # 找到该目录下所有的jpg文件,拷贝到HOME目录下
find . -name '*.py' | xargs wc -l # 计算当前目录下代码总行数

find命令需要遍历路径,速度较慢。locate命令比find快很多,因为它不搜索具体目录,而是搜索一个包含所有本地文件信息的数据库。该数据库每天更新一次,但是使用前最好先使用updatedb命令手动更新一下。

文本搜索

Linux的grep命令是强大的文本搜索工具,命令的基本格式如下:

1
grep [options] pattern [files]

常用的选项有:

  • -E 使用拓展正则表达式(Extended Regular Expression, ERE)
  • -G 使用基本正则表达式(Basic Regular Expression, BRE)
  • -e 指定字符串作为查找文件内容的样式(pattern)
  • -i 忽略大小写
  • -v 反转查找,匹配不符合特征的内容
  • -R 递归查找目录下的文件
  • -c 计算每个文件中符合样式的行数
  • -n 打印匹配样式内容的行号
  • -w 只匹配全字符合的内容

下面是一些示例:

1
2
3
grep -in "error" *.log                # 匹配文件中包含字符(不区分大小写)的内容,并打印行号 
grep -e "[Aa]rsenal" teams.txt # 匹配符合正则表达式的内容
grep "fork" ./src -R -n # 在目录中对文本进行递归搜索

网络相关

下面是常用的网络管理命令:

1
2
3
4
5
6
7
8
9
10
11
12
netstat -npt                          # 查看所有TCP连接及其相关进程信息
sudo iftop -i eth0 # 监控eth0上的流量
nmap -sn 192.168.1.0/24 # 查看局域网内所有主机
nslookup panqiincs.me # 查询域名解析(DNS)信息
curl -I https://panqiincs.me # 查看HTTP Header

# 防火墙开启service和port
sudo firewall-cmd --permanent --zone=public --add-service=http
sudo firewall-cmd --permanent --zone=public --add-service=https
sudo firewall-cmd --permanent --zone=public --add-port=8080/tcp
sudo firewall-cmd --reload
sudo systemctl restart firewalld.service

二进制文件操作

提取文件的特定片段:

1
2
# 块大小为4096,跳过第1块(从第4097个字节开始),提取2块数据(共8192个字节)
dd skip=1 count=2 if=input.bin of=output.bin bs=4096

在文件末尾补0:

1
2
# 在二进制文件的末尾补3个0
dd if=/dev/zero bs=1 count=3 >> sample.bin

编辑pdf文件

对pdf进行裁边,四个裁剪长度的顺序是左、下、右、上:

1
pdfjam --keepinfo --trim "10mm 15mm 10mm 15mm" --clip true --suffix "cropped" input.pdf

提取pdf部分页:

1
2
# 提取第1、2、3、5、6、7页
pdftk myoldfile.pdf cat 1-3 5-7 output mynewfile.pdf

修改pdf的文件属性:

1
2
3
4
# 提取信息到metadata.txt文件
pdftk old.pdf dump_data output metadata.txt
# 修改metadata.txt对应字段的内容,然后更新pdf的属性
pdftk old.pdf update_info metadata.txt output new.pdf

pdf转换成文本,尝试转换了非扫描版的中文pdf,效果还不错:

1
pdftotext input.pdf output.txt

参考

  1. Linux man pages
  2. tar压缩解压缩命令详解
  3. Ask Ubuntu
  4. 每天一个Linux命令
  5. find命令之exec
  6. 50 Most Frequently Used UNIX/Linux Commands