本文主要为学习贴,用来记录一些linux上的经常使用指令以供参考。linux
从上往下阅读文件内容面试
cat [-AbEnTv] ${FILE_NAME) cat -n /etc/issue 将该文件的内容输出到标准输出中,并显示行号 cat file1 file2 > file3 将file1 file2的内容依次添加到file3当中
从下往上阅读文件内容,用法同cat正则表达式
添加行号打印,默认状况下空白行不显示行号数据库
nl [-bnw] ${FILE_NAME} nl -b a file1 即便空白行也显示行号 nl -b a -n rz file 空白行也显示行号,而且行号在字段的最右方显示,且行号不用加0对齐
一页一页翻动文件。数组
more ${FILE_NAME} 向下翻动文件 less ${FILE_NAME} 向上/下翻动文件
取文件的前几行或者最后几行内容bash
head/tail [-n number] ${FILE_NAME} head -n 10 file 读取文件前十行的内容 tail -n 10 file 读取文件后十行的内容 head -n -10 file 不打印文件后十行内容 tail -n +100 file 只打印100行之后的内容 tail -f file 打开文件并持续更新,直到ctrl+c才退出。这个经常使用于查看最新的日志
查看命令是属于内置指令仍是外部指令微信
type [-tpa] name -t: 加入-t参数时,会显示命令的类型,file表示为外部命令,alias表示为命令别名设置的名称,builtin表示为bash内置的命令功能 -p: 若是name为外部命令,会显示完整的文件名 -a: 会将全部在PATH路径下包含name的命令显示出来
寻找执行文件,查找命令的完整文件名网络
which [-a] command #-a会将全部由PATH目录中能够找到的命令均列出,而不仅第一个被找到的指令 which ifconfig #在非root用户下会查找不到,由于ifconfig位于/sbin/ifconfig下,而非root用户的PATH中不包含该路径,因此找不到 which cd #找不到,由于cd为bash的内置命令
根据文件名寻找文件,查找文件的完整文件名less
whereis [-bmsu] 文件或目录名 -b 只找二进制文件 -m 只找在manual路径下的文件 -s 只找source源文件 -u 查找不在上述选项中的其余特殊文件
locate会根据/var/lib/mlocate内的数据库记载,找出用户输入的关键字文件名,即全部包含该关键字的文件都将被输出。可是由于数据库的更新通常为一天一次,因此若是须要查找新的内容,须要用updatedb指令更新数据库,updatedb会根据/etc/updatedb.conf去查找硬盘内的文件名,并更新数据库文件socket
locate [-ir] keyword -i 忽略大小写差别 -r keyword能够为正则表达式
查找文件,磁盘查找,支持通配符
find [PATH] [option] [action] find / -mtime 0 #查找24小时内被修改过的文件 find /etc -mtime 3 #查找3天前的24小时内被修改的文件 find / -mtime +3 #查找3天前(不含3天自己)被更改的文件 find / -mtime -3 #查找3天内被更改的文件 find / -user name #查找用户名为name的文件 find / -group name #查找群组名为group的文件 find / -nouser #查找不属于任何用户的文件,可能出现于网络文件,或是已经被删除的用户建立的文件 find / -name filename #查找文件名为filename的文件 find / -type TYPE #查找某一类文件,f:正规文件,b:设备文件,d:目录,l:链接文件,s:socket,p:FIFO
*.Z: compress程序压缩文件 *.gz: gzip程序压缩文件 *.bz2: bzip2程序压缩的文件 *.tar: tar程序打包的文件,但没有被压缩 *.tar.gz: tar程序打包的文件,其中通过gzip的压缩 *.tar.bz2: tar程序打包的文件,其中通过bzip2压缩
gzip能够解开compress,zip与gzip等软件所压缩的文件。gzip压缩后,源文件会被删除,被替代为.gz的压缩文件。
gzip [-cdtv#] 文件名 -c: 将压缩的数据输出到屏幕上,可经过数据流重定向来处理 -d: 解压缩的参数 -t: 能够用来校验一个压缩文件的一致性 -v: 显示压缩比等信息 -#: 压缩等级,-1最快,-9最慢但压缩程度最高,默认-6 gzip -d filename: 会将压缩文件解压缩,并删除压缩文件
tar [-j|-z] [cv] [-f 新建的文件名] filename #压缩 tar [-j|-z] [xv] [-f 打包文件名] [-C 目录] #解压缩 -c: 新建打包文件,可配合v查看过程当中被打包的文件名 -x: 解打包或解压缩功能,能够搭配-C在特定目录中解开 -j: 经过bzip2的支持进行压缩和解压缩 -z: 经过gzip支持压缩和解压缩 -v: 将正在处理的文件名显示出来 -C: 在特定目录中解压缩 -p: 保留备份数据的本来权限和属性 -P: 保留绝对路径,通常状况下都是相对路径,防止数据覆盖 --exclude=FILE: 在压缩过程当中不要讲FILE打包进去 --newer: 打包ctime和mtime在日期后面的文件 --newer-mtime:打包mtime在日期后面的文件 tar -zcv -f filename.tar.gz filename #压缩打包为filename.tar.gz tar -zxv -f filename.tart.gz -C 欲解压缩的目录 filename
从控制台读取输入
read [-pt] variable -p: 能够加上提示符 -t: 等待输入的秒数
declare [-aixr] variable -a: 声明为数组 -i: 声明为整数 -x: 声明为环境变量,用法同export -r: 声明为只读变量 declare -i sum=100+200+300 #若是不声明为整数,则会默认为字符串 declare +r sum #等同于取消操做
${变量#关键字} :从变量内容开头开始,将符合关键字的最短数据删除 ${变量##关键字}:从变量内容开头开始,将符合关键字的最长数据删除 ${变量%关键字}:从变量内容最后开始,将符合关键字的最短数据删除 ${变量%%关键字}:从比那两内容最后开始,将符合关键字的最长数据删除 ${变量/旧字符串/新字符串}:将遇到的第一个旧字符串更新为新字符串 ${变量//旧字符串/新字符串}:将全部旧字符串更新为新字符串
变量的替换通常是指根据变量非空与否将变量的值进行替换,记忆方法是当公式中含有:
时,则变量不存在与变量为空字符串为空,不然只有变量不存在视为空
var=${str-expr}: 至关于var= str==null ? expr : str var=${str:-expr}: 至关于var= (str==null || str=='') ? expr : str var=${str+expr}: 至关于var=(str==null ? '' : expr) var=${str:+expr}: 至关于var=(str==null || str=='') ? '' : expr var=${str=expr}: 至关于str= str = null ? expr : str, expr = str var=${str:=expr}: 至关于str= str == nul || str == '' ? expr : str, expr = str
>/1>: 以覆盖的方式将正确的数据输出到指定的文件或设备上 >>/1>>: 以累加的方式将正确的数据输出到指定的文件或设备上 2>: 以覆盖的方式将错误信息输出到指定的文件或设备上 2>>: 以累加的方式将错误信息输出到指定的文件或设备上 <: 将本来须要键盘输入的数据改成文件代替 <<: 结束输入 find /home -name .bashrc > list 2>&1 #将标准输出和错误输出都导出到list文件中 cat > catfile < ~/.bashrc #将.bashrc的内容拷贝并覆盖到catfile中 cat > catfile << "eof" #输入eof后马上结束
cut -d '分隔符' -f fields #根据分隔符将每一行分割并取出下标为fields的值 cur -c 字符范围 #将每一行字符范围内的内容切割出来 export | cut -c 12- #将export文件的每一行从第12个字符开始之后全部内容切割出来 echo ${PATH} | cut -d ':' -f 3,5 #将path内容按照:分割开来并取第三个和第五个值
cut在处理多空格分隔的行时会比较吃力
分析一行,当该行中有咱们想要的信息,就将该行输出
grep [-acinv] [--color=auto] '关键词' 文件名 -a: 将binary文件以text文件的方式进行查找 -c: 打印出现的次数 -i: 忽略大小写 -n: 同时输出行号 -v: 反向选择,即选择不存在关键字的行 --color=auto: 将关键字加上颜色显示 last | grep 'root' | cut -d ' ' -f 1
egrep能够合并管道命令
egrep -v '^$|^#' filename
这里|表明或
sed [-nefr] [n1[,n2]function] -n: 只有通过sed特殊处理的那一行才会被列出来 -e:直接在命令行模式上进行sed的动做编辑 -f filename:将sed动做写在一个文件内 -r:支持扩展型正则表达式语法 -i:直接修改读取的文件内容 n1,n2: 通常表明选择进行动做的行数,$表明最后一行 function: a:新增 c: 替换,会替换n1到n2之间的行 d:删除 p:将某个选择的数据打印出来 s:替换,能够接正则表达式 sed 's/要被替换的字符串/新的字符串/g' cat /etc/passwd | sed -e '4d' -e '6c no six line' #若是要添加多个指令,则必须添加-e
sort [-fbMnrtuk] file/stdin -f: 忽略大小写 -b:忽略最前面的空格 -M:以月份来排序 -n:使用纯数字来排序,默认为文字类型 -r:倒序 -u:相同数据中,只显示一行 -t:分隔符,默认为tab -k:第几段数据做为排序标准
统计文件的行数和子树
wc [-lwm] filename -l: 仅列出行 -w:仅列出多少字 -m: 多少字
去重
uniq [-ic] -i: 大小写无关 -c: 计数统计
双重重定向,将一份输出同时输出到文件和标准输出流
tee [-a] filename -a: 添加到文件后面
读入stdin数据,而且以某种分割字符将其分割成参数。该命令适合于不支持管道的命令来支持管道操做
xargs [-0epn] command -0: 将特殊字符还原成通常字符 -e: EOF,当xargs分析到这个参数时会中止解析 -p:在执行每一个命令的参数时,都会询问用户 -n: 后面接次数,要使用几个参数的意思
主要是处理每一行的字段内的数据,而默认的字段的分隔符为空格键或tab键
awk '条件类型{动做1}条件类型2{动做2}...' filename NF:$0每一行拥有的字段总数 NR:目前awk所处理的是第几行数据 FS: 目前的分隔符 last -n 5 | awk '{print $1 "\t" $3}' #打印一行的第一段文字和第三段文字 last -n 5 | awk '{print $1 "\t lines: " NR "\t columnes: " NF}' cat /etc/passwd | awk 'BEGIN {FS=":"} $3 < 10 {print $1 "\t " $3}'
以行尾单位比较两个文件之间的区别,也可比较不一样目录之间相同文件的内容
diff [-bBi] from-file to-file from-file和to-file能够用 - 即标准输入替代 -b: 忽略一行当中仅有多个空白的区别,如about me和about me视为相同 -B:忽略空白行的区别 -i:忽略大小写的区别
想要了解更多开发技术,面试教程以及互联网公司内推,欢迎关注个人微信公众号!将会不按期的发放福利哦~