• Linux常见的Shell命令


    1.具体的shell命令用法可以通过help或man命令进入手册来查询其具体的用法。
    2.终端本质上对应着linux上的/dev/tty设备,linux的多用户登录就是通过不同的/dev/tty设备完成的,linux默认提供了6个纯命令行界面的’‘terminal’’(准确的说这里应该是6个虚拟控制台)来让用户登录,在物理机系统上你可以通过ctrl+alt+F1~F6进行切换。当切换到其中一个终端后,想要切换回图形界面,可以按下ctrl+alt+F7来完成。
    3.命令行提示符$表示普通用户,#表示root用户。
    4.几个技巧:

    • Tab键:补全命令、参数
    • Ctrl+C:强制退出当前程序
    • Ctrl+Z:将当前程序放到后台,拖回前台输入命令fg
    • Ctrl+A:将光标输入行开始,相当于home键
    • Ctrl+E:将光标输入行结束,相当于End键
    • 在终端切换以root账户登录: sudo su 退出输入: exit

    5.linux中常用的通配符

    • * 匹配0或多个字符
    • ? 匹配任意1个字符
    • [list] 匹配list中的任意单一字符
    • [!list] 匹配除list中的任意单一字符以外的字符
    • [c1-c2] 匹配c1-c2中的任意单一字符,如:[0-9][a-z]
    • {strin1,string2,…} 匹配string1或string2(或更多)其1字符串
    • {c1…c2} 匹配c1-c2中全部字符串,如{1…10},如利用通配符批量创建5个文件 touch file{1…5}.txt

    6.常用的shell命令总结

    (1) pwd(printing working directory):显示当前目录

    • 格式:pwd [参数]
    • 可选参数:
    • -P 显示物理地址,为默认值
    • -L 目录为连接路径时,显示连接路径

    (2) wc(word count):用来计算数字,利用wc指令可以计算文件的byte数、字数或行数,若不指定文件名称,或是所给予的文件名为"-",则wc指令会从标准输入设备读取数据。

    • 格式:wc [选项] [文件]
    • 可选参数:
    • -c 只显示bytes数
    • -l 只显示行数
    • -w 只显示字数
    • -m 只统计字符数
    • -L 打印最长行行数
    • 如,统计/bin目录下的命令个数:ls /bin | wc -l

    (3) cd(change directory):切换当前目录到指定目录

    • 格式: cd [目录名]
    • 几个特殊参数:
    • /:系统根目录
    • .:当前系统目录
    • …:当前目录的父目录
    • ~:当前用户主目录,即/home/cdl目录
    • -:上次所在目录

    (4) ls(list):列出对应目录清单

    • 格式为:ls [选项] [目录名]
    • 可选参数为:
    • -a:列出目录下所有文件
    • -l:除文件名外,打印包括文件权限,大小等详细信息
    • -d:directory,显示文件夹即可,不显示其下具体的文件
    • -h:以容易理解的方式列出文件大小,1k=1048
    • -t:按时间顺序排列
    • 目录名缺省为当前目录,如,列出/home文件夹下的所有文件和目录的详细信息
    • ls -al /home
    • 以容易理解的格式列出/home目录中所有以"m"开头的文件目录的大小
    • cd /home ls -lh m*

    (5) mkdir(make directory):创建目录名

    • 格式:mkdir [选项] [目录名]
    • 可选参数:
    • -m:mode,设置权限
    • -p:parents,创建多个目录
    • -v:verbose,每次创建新目录都显示信息
    • 如,一次创建多个目录,并且显示具体的创建信息 mkdir -vp temp/text
    • 创建权限为777的目录 mkdir -m 777 temp

    (6) touch:用于把已存在文件的时间标签更新为系统的当前时间(默认方式),它们的数据将原封不动的保留下来;用于创建新的空文件

    • 格式:touch [选项] [文件]
    • 可选参数:
    • -a:只更改存取时间
    • -c:不创建文件
    • -d<时间日期>/-t<时间日期>:使用指定的时间
    • -m:只更改变动时间
    • 如,创建文件text1 touch text1

    (7) rm(remove):删除目录中的文件或目录,对于链接文件,只删除链接

    • 格式:rm [选项] [文件或目录名]
    • 可选参数:
    • -f:force,忽略不存在的文件,不给提示
    • -i:interactive,交互式删除
    • -v:verbose,详细显示步骤
    • -r:递归删除
    • 如,删除后缀名为.log的所有文件,删除前逐一询问 rm -i *.log
    • 删除/var/log/httpd/access目录以及其下所以文件、文件夹:rm -rf /var/log/httpd/access

    (8) mv(move):移动或更改文件名,常用来备份文件或目录

    • 格式: mv [选项] [源文件或目录] [目标文件或目录]
    • 可选参数:
    • -b:back,覆盖前先备份
    • -f:force,强行覆盖
    • -i:interactive,询问是否覆盖
    • -u:update,目标文件已经存在,源文件较新时更新
    • -t:target,移动多个源文件到一个目录下,此时目标目录在前,源文件在后
    • 如,将文件a.txt移动到test1目录下,如果文件存在,覆盖前询问是否覆盖 mv -i a.txt test1(test1目录已经存在,否则会执行重命名)
    • sudo mv opencv-3.3.1/ opencv-3.3.1-dev

    (9) cp(copy):复制文件或目录

    • 格式: cp [选项] [源文件] [目录]
    • 可选参数:
    • -t:target,指定目标目录,此时目标目录在前,源文件在后
    • -f:force,强行复制
    • -i:interactive,询问是否复制
    • -u:update,目标文件已经存在,源文件较新时更新
    • -n:no-clobber,不要覆盖已经存在的文件
    • -s:symbolic-link,建立源文件的符号链接,而非复制文件
    • -r:复制文件夹
    • 如,将test1目录下的所有文件复制到test2目录下,覆盖前询问 cp -i test1/* test2

    (10) cat(concatenate):将文件或标准输入组合输出到标准输出,常用来显示文件内容或连接文件,反向显示文件内容命令为tac

    • 格式:cat [选项] [文件]
    • 可选参数:
    • -A:show all
    • -b:对非空输出行 编号
    • -n:对所有输出行进行行编号
    • -s:多个空白行转换为一个空白符
    • 例如将a.log文件的内容加上行号后输入到b.log这个文件中,多个空行转换成一个行输出 cat -ns a.log > b.log

    (11) nl(number of lines):计算文件中的行数

    • 格式:nl [选项] [文件]
    • 可选参数:
    • -b a:空行也列出行号,类似于cat -n
    • -b t:空行不列出行号,默认值
    • -w:行号栏位的位数
    • -n ln:行号在自己栏位的最左方显示
    • -n rn:行号在自己栏位的最右方显示,不加0
    • -n rz:行号在自己栏位的最右方显示,加0
    • 如,把a.log的文件内容加上行号后显示,行号在屏幕右方加0显示,行号栏占位数为3
    • nl -n rz -w 3 a.log

    (12) more:功能类似于cat,cat将文件内容从上到下显示,more命令一页页显示,方便阅读,按空格键往下翻,按b(back)键显示上一页,=键输出当前行号,q键退出more。此外还可以搜索字符串

    • 格式:more [选项] [文件]
    • 可选参数:
    • +n:从第n行开始显示
    • -n:定义屏幕大小为n行
    • +/pattern:在文件显示前搜索字符串pattern,从该字符串前两行开始显示
    • 如,从a.log文件中查找第一个出现"g"字符串的行,并从该处前两行开始显示输出,规定每屏的行数为5
    • more -5 +/g a.log

    (13) less:对文件及输出的显示工具,功能非常强大

    • 格式:less [选项] [文件]
    • 可选参数:
    • -f:强迫打开
    • -i:忽略大小写
    • -N:显示每列行号
    • -s:显示连续空行为一行
    • 常用操作:
    • /字符串:向下搜索字符串
    • ?字符串:向上搜索字符串
    • 如,显示文件a.log中的内容,搜索字符串"hello",可以使用如下命令 less a.log /hello
    • less与cat和more的区别:
    • cat命令用于显示整个文件的内容,单独使用没有翻页功能。因此经常和more命令搭配使用,cat命令还有就是可以将多个文件合并成一个文件的功能。
    • more命令功能:让画面在显示满一页时暂停,此时可按空格键继续显示下一个页面,或按q键退出显示
    • less命令功能:less命令与more命令类似,也可以用了浏览超过一页的文件。所不同的是less命令除了可以按空格键向下显示文件外,还可以利用上下键来卷动文件。当要结束浏览时,只要在less命令的提示符:下按q键即可。其实这三个命令除了cat命令有合并文件的功能外,其余功能上相似,只是从浏览习惯和显示方式上有所不同。

    (14) head:显示文件的开头,默认为前10行,对应于tail命令,显示文件末尾内容

    • 格式:head [选项] [文件]
    • 可选参数:
    • -q:隐藏文件名
    • -v:显示文件名
    • -c <字节数>:显示字节数
    • -n <行数>:显示行数,参数为负时显示文件末尾行
    • 如,显示a.log和b.log文件的前5行内容 head -n 5 a.log b.log

    (15) which:在PATH变量指定的路径中搜索可执行文件的所在位置,一般用来确认系统中是否安装了指定软件

    • 如,确认是否正确安装了gcc,使用which gcc

    (16) whereis:定位文件,还可以搜索源代码,指定备用搜索路径和搜索不寻常项的能力。whereis命令查找速度非常快,因为它根本不是在磁盘中漫无目的乱找,而是在一个数据库(/var/lib/mlocate/)查询。这个数据库是linux系统自动创建的,包含本地所有文件的信息,并且每天通过自动执行updatedb命令更新一次。也正因为这个数据库要每天才更新一次,就会使得whereis命令的搜索结果有时候不准确,比如刚刚添加的文件可能搜索不到。

    • 格式:whereis [选项] [文件]
    • 可选参数:
    • -b:定位可执行文件
    • -m:定位帮助文件
    • -s:定位源代码文件
    • 如,搜索gcc帮助文件的路径 whereis -m gcc

    (17) locate:与whereis命令类似,且使用相同的数据库。但whereis命令只能搜索可执行文件、联机帮助文件和源代码文件,如果要获得更全面的搜索结果,可以使用locate命令。

    • 格式:locat [选项] [搜索字符串]
    • 可选参数:
    • -q:quiet,不显示出错信息
    • -n:至多显示n个输出
    • -r:使用正则表达式作搜索条件
    • 如,搜索etc目录下所有以sh开头的文件,可以使用这样的命令 locate /etc/sh

    (18) find:沿文件层次结构向下遍历,匹配符合条件的文件,并执行相应操作

    • 格式:find [搜索路径] [表达式]
    • 默认路径是当前目录,默认表达式为 -print
    • 可选参数:
    • -print:输出到标准输出
    • -delete:删除搜索到的文件
    • -exec:对匹配的文件执行参数给出的shell命令
    • -name:按文件名查找文件
    • -type:按类型查找文件,常用文件类型有b(块设备文件)、c(字符设备文件)、d(目录)、f(普通文件)、l(符号链接)
    • -perm:根据文件权限查找文件
    • -user:所有者选项
    • -mtime -n +n:按照文件更改时间查找文件,-n表示更改时间小于n天,+n表示更改时间大于n天
    • -size +10k/-10k/10k:搜索大于/小于/等于10k的文件
    • 逻辑操作符:-add -or -not ():圆括号字符在shell中有特殊含义,所以在命令中使用它们的时候需要引起来,通常使用转义字符
    • 如,打印当前目录下所有以.txt结尾的符号链接
    • find . -type l -name “.txt” -print
    • 打印当前目录下所有权限是777的php文件
    • find . -type f -name “.php” -perm 777
    • 打印当前目录下root用户拥有的所有文件
    • find . -type f -user root
    • 打印当前目录下权限不是777和664的所有文件
    • find . -type f (! -perm 777 -and ! -perm 664 )
    • 现在想要把所有c语言代码文件下载下来,如果一个一个下载很麻烦,可以先查找到所有的c语言代码文件,然后将这些文件内容写到一个文件中,下载该文件
    • find . -name “*.c” -exec cat {} ; > all.c
    • 解释:{}其实是一个占位符,在find命令的执行过程中会不断地替换成当前找到的文件;是exec命令结束的标记,因为规定-exec后面的命令必须以;结束,但;在shell中有特殊含义,所以这里进行转义。

    (19) xargs:可以从标准输入接收输入,并把输入转换为一个特定的参数列表

    • 格式:command | xargs [选项] [command]
    • 可选参数:
    • -n:指定每行最大的参数数量
    • -d:指定分隔符
    • 如,echo “nameXnameXnameXname” | xargs -dX -n2
    • 查找当前目录下所有c代码文件,统计总行数
    • find . -type f -name “*.c” | xargs wc -l
    • 将find产生的输出(test2目录下的所有py文件)作为rm的参数,从而完全删除
    • find test2/ -name “.py” | xargs rm -rf

    (20) grep:一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来

    • 格式:grep [选项] pattern [文件]
    • 可选参数:
    • -c:计算搜索到字符串即pattern的次数
    • -i:忽略大小写
    • -n:输出行号
    • -v:反向选择,打印不匹配的行
    • -r:递归搜索
    • -E:将范本样式为延伸的普通表示法来使用,意味着使用扩展正则表达式
    • -color=auto:找到的关键字加颜色显示
    • -o:只打印匹配项,一个个按列显示
    • 如,将/etc/passwd文件中出现root的行取出来,关键字部分加颜色显示
    • grep “root” /etc/passwd --color=auto
    • 将/etc/passwd文件中没有出现root和nologin的行取出来
    • grep -v “root” /etc/passwd | grep -v “nologin”
    • 在当前目录下递归搜索文件中包含main()的文件,经常用于查找某些函数位于哪些源码文件中
    • grep -r “main()”
    • 正则表达式
    • 正则表达式是一种符号表示法,被用来识别文本模式。在某种程度上,它们与匹配文件和路径名的shell通配符比较相似,但其规模更大。形式和功能上正则表达式和通配符很像,不过它们之间又有很大区别,特别在于一些特殊的匹配字符的含义上,比如*在通配符中表示0或多个字符,而在正则表达式中为匹配之前字符串的0次或多次。
    • 如,利用linux系统自带的字典查找一个5个字母的单词,第3个字母是j,最后一个字母为r
    • grep “^…j.r$” /usr/share/dict/words

    (21) cut:一个将文本按列进行切分的小工具,可以指定分隔每列的定界符。如果一行数据包含多个字段(多列),现在想要提取其中的一列或多列,这时候cut命令将可以使用了。

    • 格式:cut [选项 ] [文件名]
    • 可选参数:
    • -b:以字节为单位进行分割
    • -c:以字符为单位进行分割,-c -5 前5个,-c 5- 前5个之后,-c 5 第5个, -c 2-5 第2个到第5个
    • -d:自定义分隔符,默认是制表符
    • -f:自定义字段,如一列和三列-f 1,3, 第一列 -f 1,前三列 -f 1-3
    • -complement:抽取除-c,-f指定的文本外的整个文本行
    • 如,提取student.txt文件中除第一列的其他列 cut -f 1 -d ’ ’ student.txt -complement

    (22) sed:属于流编辑器,即在编辑文件的时候不用把整个文件都读入内存,可以一行行的读入,操作完成后再读入下一行,可以占用较小的内存资源。

    • 格式:sed [选项] [操作] [文件名]
    • 如将/etc/passwd的内容列出并且打印行号,同时,请将第2-5行删除
    • nl /etc/passwd | sed ‘2,5d’
    • 与grep一样,sed也支持特殊元字符,来进行模式查找与替换。不同的是,sed使用的正则表达式是括在/之间的模式。如果要把正则表达式分隔符/改为另一个字符,比如o,只要在这个字符前加入一个,在字符后跟上正则表达式,再跟上这个字符即可。

    (23) paste:与cut指令相反,它会添加一个或多个文本列到文件中,而不是从文件中抽取文本列

    • 格式:paste [选项] [文件名]
    • 可选参数:
    • -s:将每个文件合并成行,而不是单独的黏贴
    • -d:自定义分隔符,默认是制表符
    • 如,将student.txt和telephone.txt文件中的内容按列拼接,指定分隔符是: paste student.txt telephone.txt -d ‘:’

    (24) tr(translate):常被用来更改字符,可以看作是一种基于字符的查找与替换操作。换字是一种把字符从一个字母转换成另一个字母的过程。tr 从标准输入中替换、缩减、删除字符,并将结果写到标准输出。

    • 格式:tr [选项] SET1 SET2
    • 可选参数:
    • -d:删除匹配SET1的内容,不作替换
    • 如,将输入的字符大写转换为小写
    • echo ‘THIS IS CDL’ | tr ‘A-Z’ ‘a-z’
    • 如,将输入的字符中的数字删除
    • echo ‘THIS 123 IS CDL!’ | tr -d ‘0-9’

    (25) sort:对于文件及标准输入的文本进行从小到大的排序

    • 格式:sort [选项] [文件名]
    • 可选参数:
    • -n:基于字符串的长短进行排序
    • -k:指定排序关键词
    • -b:排序时忽略每行开头空格
    • -r:以相反的顺序即降序排列
    • -t:自定义分隔符,默认是制表符
    • 如,列出/usr/bin/目录下使用空间最多的前10个目录文件
    • ls -l /usr/bin | sort -nr -k 5 | head -n 10

    (26) uniq(unique):用于报告或忽略文件真的重复行,只能用于排过序的数据,常和sort命令结合使用

    • 格式:uniqu [选项] [文件名]
    • 可选参数:
    • -c:在每行前加上出现次数的标号
    • -d:只输出重复出现的行
    • -u:只显示唯一的行
    • 如,找出/bin目录和/usr/bin目录下所有相同的命令
    • ls /bin /usr/bin | sort | unqiu -d

    (27) join:用来将两个文件中制定栏位内容相同的行连接起来。找出两个文件中,指定栏位内容相同的行,并加以合并,再输出到标准输出设备。与uniqu命令相同,常用于已经排序后的数据。

    • 格式:join [选项] 文件1 文件2
    • 可选参数:
    • -j FIFLD(等同于-1 FIFLD -2 FIFLD):两个文件匹配字段相同
    • 如,指定两个文件的第三个字段为匹配字段,连接两个文件 join -1 3 -2 3 c.txt d.txt

    (28) common:逐行比较文本文件,显示结果包括3列:第一列是只在第一个文件中找到的行;第二列是只在第二个文件中找到的行;第三列是两个文件的共同行,与uniqu、join相同,只能用在已经排好序的数据

    • 格式:common [选项] [文件1] [文件2]
    • 可选参数:
    • -1:不能输出文件1特有的行
    • -2:不能输出文件2特有的行
    • -3:不能输出两个文件共有的行
    • 如,比较file1.txt和file2.txt两个文件的内容,只显示两个文件共有的内容 common -12 file1.txt file2.txt

    (29) diff(differential):在最简单的情况下,比较两个文件的不同,如果使用-代替文件参数,则要比较的内容将来自标准输入。diff命令是以逐行的方式,比较文本文件的异同处。如果该命令指定进行目录的比较,则将会比较该目录中具有相同文件名的文件,而不会对其子目录文件进行任何比较操作。

    • 格式: diff [选项] 文件
    • 可选参数:
    • -c:上下文模式
    • -u:统一模式
    • -a:逐行比较
    • -r:递归比较目录下的文件

    (30) patch:被用来把更改的地方应用到文件中。它接收从diff程序的输出,并且通常被用来将较老的文件版本转变为较新的文件版本。

    • 使用diff/patch组合有两个优点:
    • 一个diff文件非常小,与整个源码树的大小相比较而言
    • 一个diff文件简洁地显示了所做的修改地方,从而允许程序补丁的审阅者能快速地评估它。
    • 当然,diff/patch命令能工作在任何文本文件,不仅仅是源码文件
    • 准备一个diff文件供patch命令使用,diff -Naur old_file new_file > diff_file
    • 格式:patch [选项] 补丁文件
    • 可选参数:
    • -p num:忽略几层文件夹
    • -E:发现空文件时删除
    • -R:取消打过的补丁
    • 如,生成file1.txt和file2.txt的diff文件,然后应用patch命令更新file1.txt文件
    • diff -Naur file1.txt file2.txt > patchdiff.txt
    • patch < patchdiff.txt
    • 取消打过的补丁
    • patch -R < patchdiff.txt

    (31) df(disk free):检查linux服务器的文件系统的磁盘占用情况

    • 格式:df [选项] 文件
    • 可选参数:
    • -a:全部文件系统列表
    • -h:方便阅读显示
    • -i:显示inode信息
    • -T:文件系统类型
    • -t <文件系统类型>:只显示选定文件系统的磁盘信息
    • -X <文件系统类型>:不显示选定文件系统的磁盘信息
    • 如,指定类型磁盘 df -t ext4

    (32) du(disk usage):对文件和目录使用空间的查看

    • 格式:du [选项] 文件
    • 可选参数:
    • -a:显示目录中个别文件的大小
    • -b:显示大小时以byte为单位
    • -k:显示大小时以KB为单位
    • -m:显示大小时以MB为单位
    • -s:仅显示总计,列出最后加总的值
    • -h:以K,M,G为单位,提供可读性
    • -c:除显示单独目录大小外,显示所有目录和文件总和
    • 如,显示几个文件或目录各自占用磁盘空间的大小,并统计总和
    • du -ch file1.txt file2.txt
    • 按照空间大小逆序排列显示
    • du -h | sort -nr | head -n 10

    (33) time:测量一个命令的运行时间

    • 格式:time 命令
    • 如,将命令date的运行时间保持到本地文件中
    • {time date;} > 1.txt

    (34) clear:清屏

  • 相关阅读:
    shell 去除utf8文件中bom头的方法
    bad interpreter:No such file or directory
    桥接配置虚拟机网络
    coreseek因为重启遇到的问题
    监听微信内置浏览器 返回点击事件
    phpredis 扩展装完后,重启php不生效的原因之一
    linux上ThinkPHP中原本正常的css,js文件找不到的解决方式
    vps
    java基础-《JAVA语言程序设计与数据结构》笔记
    面经问题总结——django相关
  • 原文地址:https://www.cnblogs.com/sx66/p/11885655.html
Copyright © 2020-2023  润新知