Linux面试常考命令
后端面试常考linux命令。
note:本文只总结了一些面试时会常考到的命令,一些简单命令如cp,cd,ls 等不做介绍。
参考: Linux 命令大全 | 菜鸟教程 (runoob.com)
实际使用中,我们可以通过
man 命令 查看一个命令的说明。
cat命令
把 textfile1 的文档内容加上行号后输入 textfile2 这个文档里:
cat -n textfile1 > textfile2
把 textfile1 和 textfile2 的文档内容加上行号(空白行不加)之后将内容附加到 textfile3 文档里:
cat -b textfile1 textfile2 >> textfile3
所以:>是覆盖式的输入,>>是append式的输入。
注意
cat不适合读取超大文件,因为他需要一次将文件加载进内存,所以去读超大文件时会导致服务器卡死。
tail
默认显示最后的10行。
格式
tail [参数] [文件]
- -f 循环读取
- -c<数目> 显示的字节数
- -n<行数> 显示文件的尾部 n 行内容
tail -f filename 会把 filename 文件里的最尾部的内容显示在屏幕上,并且不断刷新,只要 filename 更新就可以看到最新的文件内容。
tail -n -5 /test001/text001 与 tail -n 5 /test001/text001 显示的结果相同,均是文件末尾最后 5 行内容。
tail -n +5 /test001/text001 显示的内容为从第 5 行开始,直到末尾的内容。tail -n 后面的数字有效输入只有单个数字(5)或者加号连接数字(+5)两种。
head
head 命令可用于查看文件的开头部分的内容,有一个常用的参数 -n 用于显示行数,默认为 10,即显示 10 行的内容。
命令格式:
head [参数] [文件]
- -c<数目> 显示的字节数。
- -n<行数> 显示的行数。
less和more
less(重点)
less 与 more 类似,less 可以随意浏览文件,支持翻页和搜索,支持向上翻页和向下翻页。
这里只展示几个参数:
- /字符串:向下搜索"字符串"的功能
- ?字符串:向上搜索"字符串"的功能
- Q退出less命令。
- 空格键 滚动一页
- 回车键 滚动一行
less功能很强大,不用一次将文件全部读取进来,所以比vi、cat等工具读取速度快很多。
more
Linux more 命令类似 cat ,不过会以一页一页的形式显示,更方便使用者逐页阅读,而最基本的指令就是按空白键(space)就往下一页显示,按 b 键就会往回(back)一页显示,而且还有搜寻字串的功能(与 vi 相似),使用中的说明文件,请按 h 。
从第 20 行开始显示 testfile 之文档内容。
more +20 testfile
区别
more比cat强大,提供分页显示的功能,less比more更强大,随意翻页。more再管道中不能往前翻页。
grep
语法
grep [-abcEFGhHilLnqrsvVwxy][-A<显示行数>][-B<显示列数>][-C<显示列数>][-d<进行动作>][-e<范本样式>][-f<范本文件>][--help][范本样式][文件或目录...]
- -c 或 --count : 计算符合样式的列数。
- -C<显示行数> 或 --context=<显示行数>或-<显示行数> : 除了显示符合样式的那一行之外,并显示该行之前后的内容。
- -A<显示行数> 或 --after-context=<显示行数> : 除了显示符合范本样式的那一列之外,并显示该行之后的内容。
- -B<显示行数> 或 --before-context=<显示行数> : 除了显示符合样式的那一行之外,并显示该行之前的内容。
- -n 或 --line-number : 在显示符合样式的那一行之前,标示出该行的列数编号。
- -o 或 --only-matching : 只显示匹配PATTERN 部分
- -r 或 --recursive : 此参数的效果和指定"-d recurse"参数相同。
- -v 或 --invert-match : 显示不包含匹配文本的所有行。
- -i 或 --ignore-case : 忽略字符大小写的差别。
- -e<范本样式> 或 --regexp=<范本样式> : 指定字符串做为查找文件内容的样式。
场景: 系统报警显示了时间,但是日志文件太大无法直接 cat 查看。(查询含有特定文本的文件,并拿到这些文本所在的行)
解决:
grep -n '2019-10-24 00:01:11' *.log
递归查找/etc/acpi 下含字符串"update"的文件,并打印出该字符串所在行的内容
grep -r update /etc/acpi
从文件内容查找与正则表达式匹配的行:
$ grep –e "正则表达式" 文件名
从根目录开始查找所有扩展名为 .log 的文本文件,并找出包含 “ERROR” 的行:
$ find / -type f -name "*.log" | xargs grep "ERROR"
查找网络连接中非正常链接
netstat -tn | grep -v ESTABLISHED
查看系统中的非正常连接
find
语法
find path -option [ -print ] [ -exec -ok command ] {} \;
-name name, -iname name : 文件名称符合 name 的文件。iname 会忽略大小写
-size n : 文件大小 是 n 单位,b 代表 512 位元组的区块,c 表示字元数,k 表示 kilo bytes,w 是二个位元组。
-type c : 文件类型是 c 的文件。
d: 目录
c: 字型装置文件
b: 区块装置文件
p: 具名贮列
f: 一般文件
l: 符号连结
将当前目录及其子目录下所有文件后缀为 .c 的文件列出来:
# find . -name "*.c"
将当前目录及其子目录中的所有文件列出:
# find . -type f
查找大于1G文件并删除
find /APP/istester/ -type f -size +1G | [xargs](https://so.csdn.net/so/search?q=xargs&spm=1001.2101.3001.7020) rm
awk
awk是三个创作人名字的组合,所以不用想为什么叫这个。
一般用来处理文件的每一行。
语法
awk [选项参数] 'script' var=value file(s)
或
awk [选项参数] -f scriptfile var=value file(s)
script就是对应的命令脚本,也可以-f scriptfile 的方式从scriptfile读取awk命令来执行。
-v 设置变量 ,例如-va=1,就是设置了一个a=1的变量。
-F设置分隔符,默认是按照空格或者tab分割的,-F可以指定分割符,例如 -F,就是指定按照,分割。
注意:
awk 'BEGIN{ commands } pattern{ commands } END{ commands }'
关于 awk 脚本,我们需要注意两个关键词 BEGIN 和 END。
- BEGIN{ 这里面放的是执行前的语句 }
- END {这里面放的是处理完所有的行后要执行的语句 }
- {这里面放的是处理每一行时要执行的语句}
以下是示例:
awk '{[pattern] action}' {filenames} # 行匹配语句 awk '' 只能用单引号
awk -v # 设置变量
$ awk -va=1 '{print $1,$1+a}' log.txt #指定
awk -F #-F相当于内置变量FS, 指定分割字符
过滤第一列大于2并且第二列等于’Are’的行
$ awk '$1>2 && $2=="Are" {print $1,$2,$3}' log.txt #命令
#输出
3 Are you
sort
sort 可针对文本排序
语法
sort [-bcdfimMnr][-o<输出文件>][-t<分隔字符>][+<起始栏位>-<结束栏位>][--help][--verison][文件][-k field1[,field2]]
常用参数介绍:
-
-o<输出文件> 将排序后的结果存入指定的文件。
-
-r 以相反的顺序来排序。
-
-t<分隔字符> 指定排序时所用的栏位分隔字符。
-
-n 依照数值的大小排序。
-
-u 意味着是唯一的(unique),输出的结果是去完重了的。
-
-m 将几个排序好的文件进行合并。
-
-b 忽略每行前面开始出的空格字符。
-
-c 检查文件是否已经按照顺序排序。
-
-d 排序时,处理英文字母、数字及空格字符外,忽略其他的字符。
-
-f 排序时,将小写字母视为大写字母。
-
[-k field1[,field2]] 按指定的列进行排序。sort testfile -k 2 之地那个对第二列的排序。
uniq
Linux uniq 命令用于检查及删除文本文件中重复出现的行列,一般与 sort 命令结合使用。
uniq 可检查文本文件中重复出现的行列。
语法
uniq [-cdu][-f<栏位>][-s<字符位置>][-w<字符位置>][--help][--version][输入文件][输出文件]
-
-c或–count 在每列旁边显示该行重复出现的次数。
-
-d或–repeated 仅显示重复出现的行列。
-
-u或–unique 仅显示出一次的行列。
-
[输入文件] 指定已排序好的文本文件。如果不指定此项,则从标准读取数据;
-
[输出文件] 指定输出的文件。如果不指定此选项,则将内容显示到标准输出设备(显示终端)。
注意:
uniq命令只适用于已经排序号的文件,否则不起作用。
所以使用时结合sort命令,例如统计出现次数最多的前三个字符。
sort test.log | uniq -c |head -3| awk '{print $2}'
netstat
Linux netstat 命令用于显示网络状态。
利用 netstat 指令可让你得知整个 Linux 系统的网络情况。
语法
netstat [-acCeFghilMnNoprstuvVwx][-A<网络类型>][--ip]
-
-t或–tcp 显示TCP传输协议的连线状况。
-
-u或–udp 显示UDP传输协议的连线状况。
-
-n或–numeric 直接使用IP地址,而不通过域名服务器。
-
-N或–netlink或–symbolic 显示网络硬件外围设备的符号连接名称。
-
-a或–all 显示所有连线中的Socket。
-
-c或–continuous 持续列出网络状态。
-
-l或–listening 显示监控中的服务器的Socket。
xargs
xargs 一般是和管道一起使用。
命令格式:
somecommand |xargs -item command
假如你有一个文件包含了很多你希望下载的 URL,你能够使用 xargs下载所有链接:
# cat url-list.txt | xargs wget -c
find /sbin -perm +700 |ls -l #这个命令是错误的
find /sbin -perm +700 |xargs ls -l #这样才是正确的
ps
Linux ps (英文全拼:process status)命令用于显示当前进程的状态,类似于 windows 的任务管理器。
语法
ps [options] [--help]
-
ps 的参数非常多, 在此仅列出几个常用的参数并大略介绍含义
-
-A 列出所有的进程
-
-w 显示加宽可以显示较多的资讯
-
-au 显示较详细的资讯
-
-aux 显示所有包含其他使用者的进程
-
USER: 行程拥有者
-
PID: pid
-
%CPU: 占用的 CPU 使用率
-
%MEM: 占用的记忆体使用率
-
VSZ: 占用的虚拟记忆体大小
-
RSS: 占用的记忆体大小
-
TTY: 终端的次要装置号码 (minor device number of tty)
-
STAT: 该行程的状态:
- D: 无法中断的休眠状态 (通常 IO 的进程)
- R: 正在执行中
- S: 静止状态
- T: 暂停执行
- Z: 不存在但暂时无法消除
- W: 没有足够的记忆体分页可分配
- <: 高优先序的行程
- N: 低优先序的行程
- L: 有记忆体分页分配并锁在记忆体内 (实时系统或捱A I/O)
-
START: 行程开始时间
-
TIME: 执行的时间
-
COMMAND:所执行的指令
ps -u root //显示root进程用户信息
ps -ef //显示所有命令,连带命令行
ps -ef| grep docker //查看docker 相关进程。
top
Linux top命令用于实时显示 process 的动态。
使用权限:所有使用者。
语法
top [-] [d delay] [q] [c] [S] [s] [i] [n] [b]
一般就直接top。
然后按shift+H,可以查看具体的线程信息
free
查看内存使用情况
语法
free [-bkmotV][-s <间隔秒数>]
free -ht -s
-
-h 以合适的单位显示内存使用情况
-
-t 显示内存总和列。
-
-s<间隔秒数> 持续观察内存使用状况。
nohup
nohup 命令,在默认情况下(非重定向时),会输出一个名叫 nohup.out 的文件到当前目录下,如果当前目录的 nohup.out 文件不可写,输出重定向到 $HOME/nohup.out 文件中。
语法格式
nohup Command [ Arg … ] [ & ]
参数说明:
Command:要执行的命令。
Arg:一些参数,可以指定输出文件。
&:让命令在后台执行,终端退出后命令仍旧执行。
实例
以下命令在后台执行 root 目录下的 runoob.sh 脚本:
nohup /root/runoob.sh &
更多推荐
所有评论(0)