开发人员的 Linux 命令学习清单
作为一个开发人员,尤其是 服务端应用开发者, 掌握适量的 Linux 常用命令是非常有助于工作的。很多日常任务,比如查看服务器日志,数据文件处理、批量修改,不再需要使用主开发语言实现,而只需要掌握和使用一些命令和工具就可以了。不过,作为开发者和作为系统管理员, 学习 linux 命令工具的程度也显然是有差异的。
作为开发者, 应该掌握如下使用频繁的 linux 命令工具:
1. 文件目录相关: ls, cp, rm , mv, cat , head, tail , cd , pwd, mkdir , touch, rename, less, find, which, locate, chmod, chown, less, ln, tar, umask
2. 文本处理: grep, sed, awk, tr, uniq, sort, join, cut, tee, wc, echo
3. 进程查看: ps, top, kill, who,
4. 网络工具: netstat , scp , ssh, ping, wget, ifconfig, arp
5. 环境设置与服务器软件: apache, set, alias, . , source, sudo , su, date, read
6. 帮助信息: --help, man ,
7. 其它: xargs
总共也就 50 条左右的命令。
使用 man cmdname | wc -l 可查看该命令说明有多少行,阅读前有个底。shift + g 可以直达 man 文档末尾。num+shift+g 可以直达第 num 行。 试一试:
man ls | wc -l 243
man find | wc -l 1572
任务: 分别计算上述命令的MAN文档的行数
STEP1: 将上述命令放置到一个文本文件中, 命令为 cmds.list
ls, cp, rm , mv, cat , head, tail , cd , pwd, mkdir , touch, rename, less, find, which, locate, chmod, chown, less, ln, tar, umask grep, sed, awk, tr, uniq, sort, join, cut, tee, wc, ps, top, fg, kill, who, netstat , scp , ssh, ping, wget set, alias, . , source, sudo , su, date, man , xargs
STEP2:使用 tr 命令先将 , 转化为 换行,并去掉空格和空行;
$ tr ',' '\n' < cmds.list | tr -d ' ' | grep -v '^$' > result.mid
STEP3: 使用简单 while&read 循环,输出每一个命令的man文档的行数
$ while IFS='' read CMD_NAME; do echo -ne $CMD_NAME "\t"; man $CMD_NAME | wc -l ; done < result.mid
STEP4: 整合: 重定向通常可以使用管道来替代。下面是完整命令
$ cat cmds.list | tr ',' '\n' | tr -d ' ' | grep -v '^$' | while IFS='' read CMD_NAME; do echo -ne $CMD_NAME "\t"; man $CMD_NAME | wc -l ; done | sort -nrk 2
less 1583 less 1583 wget 1579 find 1572 ps 1166 top 1158 awk 902 ssh 901 man 710 grep 636 sudo 520 tar 492 netstat 356 ping 340 sed 280 xargs 275 ls 243 date 204 locate 189 cp 172 sort 160 scp 156 chmod 146 tr 137 chown 125 ln 120 rm 108 mv 105 kill 104 tail 103 join 103 who 99 touch 93 uniq 89 cut 88 cat 82 wc 70 head 68 umask 67 su 66 mkdir 63 rename 57 pwd 57 tee 53 which 31 source 0 set 0 fg 0 cd 0 alias 0 . 0
注意到,一般命令MAN文档的行数(包括空行)在 100-400 之间,重量级的命令则有很详细的说明,约500- 2000 行 比如 find 近 1500 多行! 小型命令可以一个个选项地尝试, 掌握大型命令就要讲究技巧了。先掌握日常工作需要的那些,不必求全。
选项通用部分:
1. -q 静默方式, 不打印操作相关的任何信息; -v “罗嗦”方式, 打印操作相关信息
常用命令:
. ls 列举目录内容(所含文件的元信息)
-a 所有 -h 大小人类可读 -l 详细信息 -i 索引节点号 -m 以逗号分隔 -1 每行一个 -r 反序显示 -R 递归显示子目录内容 -t 按修改时间排序
. rm 删除文件或目录 (1) -i , -I[once] 是否提示用户 (2) -r , -R 删除目录时使用; (3) -f 强制删除
. mv 移动文件或重命名。 记住语法格式即可
(1) mv srcName destName (2) mv src1 src2 ... destDirectory (3) mv -t destDirectory src1 src2 ...
. cp 复制文件或建立链接。 语法格式同 mv
-i 提示用户 -r 复制目录,递归复制 -s 建立软链接 -l 建立硬链接
. mkdir 若目录不存在,则根据指定目录名称创建目录;否则报错。
-p 指定目录路径上的目录若不存在,则创建相应目录,而不报错。eg. mkdir -p a/b 若目录 a 不存在,则先创建目录 a , 再创建目录 b.
.
. which 定位命令的全路径 -a 显示匹配参数的所有路径
. head 显示文件开头的指定部分,或者除去指定末尾的所有部分。 可以使用两种方式指定 -c 字节数, -n 行数 ;
eg. head -n 5 data.txt 显示 data.txt 的前5行; head -n -5 data.txt 显示 data.txt 除去最后5行的所有行
. pwd 显示当前所在目录的全路径; cd 切换到指定目录
. cat 连接多个文件的内容并打印到标准输出。 -E 在行尾显示 $ ; -n 在行头显示行号
. wc 统计指定文件。 -c 字节数 -m 字符数 -l 行数 -w 单词数 -L 最长行长度
. tee 从标准输入中读取内容,并写到标准输出和指定的文件中; 用于将同一内容批量复制到多个文件中。
若存在则覆盖,不存在则创建 -a 追加内容而不是覆盖。
. uniq 报告或删除重复行,常与 sort 连用。 -d 只打印有重复的行; -u 只打印没有重复的行; -c 统计行及重复出现的次数
-s N 比较时跳过前N个字符; -f N 比较时跳过前N个字段; -w N 只比较至多前N个字符
. cut 打印文件每一行的选定部分到标准输出,作用单位是文件行。用于剪切指定内容。
-b [range] 指定范围的字节 -c [range] 指定范围的字符 -f [range] 指定范围的字段 -d 指定字段分割符
范围指定: N 第N个 ; N- 从第N个到末尾 ; -N 从第一个到第N个; M-N 从第M到第N个(边界包含)
eg. cut -c 1-4 cmds.list 打印文件 cmds.list 中每一行的前4个字符; cut -f 2 cmds.list 打印第二个字段
. who 查看登录用户及运行概况 -u 用户列表 -b 系统启动时间 -r 运行级别 -q 登录用户数
grep: 从指定文件中搜索匹配模式的行,并打印。 若没有指定,则从标准输入中读入内容。
-A Num 打印匹配行及接下来的 Num 行 -B Num 打印匹配行及之前的 Num 行
-c 只打印匹配行数 --color 高亮显示匹配部分
-E 使用扩展正则表达式 -e PATTERN 使用 PATTERN 作为模式 -P 使用 perl 表达式
-F 使用固定字符串匹配 -f inputfile 从指定文件中读取模式,每行一个
-n 打印匹配行时显示行号
-H 搜索多个文件时,打印文件名 -h 不打印文件名
-i 忽略大小写
-l 只打印含有匹配的文件名 -L 打印没有任何匹配的文件名
-r 递归搜索 -v 搜索不匹配的行 -x 选择完全匹配整行的行
sed: 流编辑器, 使用指定编辑命令文本过滤和处理
-e script 使用 script 的编辑命令处理文件
-f script-file 使用 script-file 给出的命令集合编辑文件,每行一个编辑命令
-i 就地编辑,直接改变所编辑的文件
-r 在编辑命令中使用扩展正则表达式
编辑命令 a 追加文本 i 插入文本 q 退出sed s/regexp/replacement