• 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:清屏

  • 相关阅读:
    (Good Bye 2019) Codeforces 1270B Interesting Subarray
    (Good Bye 2019) Codeforces 1270A Card Game
    Codeforces 1283D Christmas Trees(BFS)
    Codeforces 1283C Friends and Gifts
    Codeforces 1283B Candies Division
    1095 Cars on Campus (30)
    1080 Graduate Admission (30)
    1099 Build A Binary Search Tree (30)
    1018 Public Bike Management (30)
    1087 All Roads Lead to Rome (30)
  • 原文地址:https://www.cnblogs.com/sx66/p/11885655.html
Copyright © 2020-2023  润新知