实用Linux命令

基本操作

常用的基础命令:

1
2
3
4
5
6
7
8
9
10
11
$ 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系)
$ rpm -qa | grep kernel | sort

进程管理

查看和管理进程的命令:

1
2
3
4
5
6
$ ps -ef                                # 查看系统中所有进程
$ top # 显示实时的系统状态
# 杀死一个进程
$ ps -ef | grep vim # 查看进程ID
krist 3271 2258 1 22:16 pts/1 00:00:00 vim package.json
$ kill -9 3271 # -9选项,杀死进程

压缩解压缩

使用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
$ netstat -npt                          # 查看所有TCP连接及其相关进程信息
$ sudo iftop -i eth0 # 监控eth0上的流量
$ nslookup panqiincs.me # 查询域名解析(DNS)信息
$ curl -I https://panqiincs.me # 查看HTTP Header

参考

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