Shell常用命令

Posted 小火柴的蓝色理想

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Shell常用命令相关的知识,希望对你有一定的参考价值。

前面的话

  自以为前端工程师可能用不到Linux命令。但在学习Git时,发现除了Git命令,还有好多是需要Linux命令来配合的。所以,Linux命令需要系统的学习并进行总结,本文将详细介绍Linux常用命令

 

特殊字符

  特殊字符对shell具有特殊含义,不要把它们当作普通字符使用。某些特殊字符用于正则表达式匹配

& ; | * ? \' " ` [ ] ( ) $ < > { } # / \\ ! ~

空白符

  尽管RETURN、SPACE、TAB都不是特殊字符,但它们对shell具有特殊含义

  RETURN键通常用于结束命令行并开始命令的执行

  SPACE键和TAB键则用作命令行上的分隔符

转义字符

  要将特殊字符当作普通字符使用,可对它们转义引用

  [注意]斜杠(/)无法被转义,它总是表示路径名中的分隔符

  在特殊字符前加反斜杠(\\)即可将将、特殊字符转义。要将连续的两个或多个特殊字符转义,必须在每个字符前面加一个反斜杠(\\)

  另一种将特殊字符转义的方法是使用单引号将它们引起来(\'**\'),也可以将特殊字符和普通字符一起用一对单引号引起来

【echo】

echo [选项] [输出内容]
选项:
  -e: 支持反斜线控制的字符转换

管道符

【多命令顺序执行】

【管道符】

命令1 | 命令2
#命令1的正确输出作为命令2的操作对象

通配符

其他特殊符号

  

目录相关

显示目录路径

【pwd】 显示当前目录

  [注意]如果使用Windows系统,为了避免遇到各种莫名其妙的问题,请确保目录名(包括父目录)不包含中文

切换目录

【cd】 切换到另一个工作目录,参数direction为要指定为新工作目录的目录路径名

cd [options] [direction]

  如果不带任何参数,或使用波浪号(~),切换到主目录

  使用连字符(-)来切换到前一次的工作目录

  使用点(.)表示当前目录

  使用双句点(..)来返回到当前目录下的上一级目录

  [注意]cd和符号之间一定要有空格,否则会提示未找到命令

创建目录

【mkdir】创建目录,如果已经存在同名目录,则无法创建成功

mkdir [option] directory-list

  [注意]如果存在-p命令,则为递归创建

  下面代码中,先创建了test目录,然后在test目录下,创建了abc目录

mkdir -p test/abc

删除目录

【rmdir】删除目录,如果不是空目录,则无法删除成功

rmdir directory-list

【rm -rf】删除目录及目录里的文件

  [注意]如果使用"rm -rf /",会删除所有文件

 

文件相关

显示所有文件

【ls】 类似于dos下的dir命令,用于显示一个或多个文件的相关信息

  默认情况下,ls按照文件名的字母顺序列出文件的信息

ls [options] [file-list]

  options有很多选项,常用选项如下

ls –a 显示所有文件,包括隐藏文件
ls –F 在文件的后面添加表示文件类型的符号。*表示可执行,/表示目录,@表示连结文件
ls –l 列出每个文件更详细的信息
ls -ld 查看当前目录属性
ls -lh 文件大小以K为单位 ls
-R 递归地列出子目录的内容 ls -t 按最后一次修改时间的顺序显示文件
ls -i 显示iNode号

  [注意]ls -l命令可以简写成ll命令

  file-list包含目录时,ls将显示该目录的内容

ls mygit 显示mygit目录下的文件
ls g* 显示所有以g字母开头的文件

显示文件内容

【cat】 显示文本文件的内容,类似于dos下的type命令

cat [options] [direction]
cat file1 显示file1文件内容
cat file1 file2 依次显示file1,file2的内容
cat file1 file2 > file3 把file1,file2的内容结合起来,再重定向(>)到file3文件中

  ">"是右重定向符,表示将左边命令结果当成右边命令的输入。如果右侧文件是一个已存在文件,其原有内容将会被清空,而变成左侧命令输出内容。如果希望以追加方式写入,请改用">>"重定向符

重写文件

  如果">"左边没有指定文件,如: cat >file1,将会等用户输入,输入完毕后再按[Ctrl]+[d],就会将用户的输入内容写入file1

删除文件

【rm】 删除文件,与dos下的del/erase命令相似

rm [options] file-list

  options有很多选项,常用选项如下

rm –i 系统在删除文件之前会先询问确认,用户回复y或Y之后,文件才会真的被删除
rm –r 递归删除指定目录的内容,包含所有子目录和目录自身
rm –f 和-i参数相反,-f表示强制删除
rm -v 显示被删除的每个文件的文件名

复制文件

【cp】 复制文件

cp [options] source-file destination-file
cp [options] source-file-list destination-directory

  使用cp命令可以生成一个文件的一个副本

  使用cp命令也可以把一个或者多个文件复制到某个目录

  cp -R 递归地复制包含普通文件的目录层次结构

  [注意]如果使用ls -a命令,则不仅文件内容,所有的文件属性也相同,如文件创建时间等

移动文件或重命名

【mv】重命名或移动文件

mv [options] existing-file new-filename
mv [options] existing-file-list direction
mv [options] existing-direction new-direction

  使用mv命令可以重命名文件

  使用mv命令可以将一个文件移动到另一个目录

  使用mv命令可以将一个文件移动到另一个目录,并改名

  使用mv命令也可以移动目录

新建文件

【touch】 新建文件,或改变文件的访问和修改时间

touch [options] file-list

  同名文件不存在时,touch用于新建文件

  同名文件存在时,touch用于修改文件的访问和修改时间

 

文件链接

  通过ln命令来生成链接文件,-s选项表示生成软链接,没有选项则表示生成硬链接

ln -s [原文件] [目标文件]

  硬链接包括以下特征:

  1、拥有相同的i节点和存储block块,可以看做是同一个文件

  2、可通过i节点识别

  3、不能跨分区

  4、不能针对目录使用

  软链接包含以下特征:

  1、类似windows快捷方式

  2、软链接拥有自己的I节点和Block块,但是数据块中只保存原文件的文件名和I节点号,并没有实际的文件数据

  3、修改任意文件,另一个都改变

  4、删除原文件,软链接不能使用

  5、软链接文件权限都为rwxrwxrwx

  6、软链接的原文件一定要写绝对路径

 

文件搜索

【locate】

  该命令搜索速度非常快,因为其在后台数据库中按文件名搜索,格式如下

locate 文件名

  后台数据库的地址如下

/var/lib/mlocate

  后台数据库一般1天更新一次,所以当天新建的文件不会被放到数据库中,但可以通过updatadb命令来强制更新数据库

updatedb

  locate命令的缺点是只可以按照文件名来搜索

  locate是按照/etc/updatedb.conf配置文件来搜索的

PRUNE_BIND_MOUNTS = "yes" #开启搜索限制
PRUNEFS =  #搜索时,不搜索的文件系统
PRUNENAMES = #搜索时,不搜索的文件类型
PRUNEPATHS = #搜索时,不搜索的路径

命令搜索

【whereis】

  搜索该命令的所在路径及帮助文档所在位置

-b 只查找可执行文件
-m 只查找帮助文件

【which】

  搜索命令的所在路径及可能存在的别名

【PATH环境变量】

  PATH环境变量定义的是系统搜索命令的路径

【find】

  在Linux中,最强大的搜索命令是find命令,该命令会把所有文件都搜索一遍

find [搜索范围] [搜索条件]
#搜索文件

find / -name install.log
#避免大范围搜索,会非常耗费系统资源
#find是在系统之中搜索符合条件的文件名
  如果要模糊匹配,需要使用通配符匹配,通配符是完全匹配
find /root -iname install.log
#不区分大小写
find /root -user root
#按照所有者搜索
find /root -nouser
#查找没有所有者的文件
find /var/log -mtime +10
#查找10天前修改的文件

-10 10天内修改的文件
10 第10天修改的文件
+10 10天前修改的文件

atime 文件访问时间
ctime 改变文件属性
mtime 修改文件内容
find . -size 25k
#查找文件大小是25KB的文件

-25K 小于25KB的文件
25K 等于25KB的文件
+25K 大于25KB的文件

find . -inum 262422
#查找i节点是262422的文件
find /etc -size +20K -a -size -50K
#查找/etc/目录下,大于20KB并且小于50KB的文件
-a and 逻辑与,两个条件都满足
-o or 逻辑或,两个条件满足一个即可

find /etc -size +20K -a -size -50K -exec ls -lh {} \\;
#查找/etc/目录下,大于20KB并且小于50KB的文件,并显示详细信息
#-exec/-ok 命令{} \\; 对搜索结果执行操作

 【grep】

  该命令是搜索字符串的命令

grep [选项] 字符串 文件名
#在文件当中匹配符合条件的字符串
-i 忽略大小写
-v 排除指定字符串

  find命令是在系统当中探索符合条件的文件名,如果需要匹配,使用通配符匹配,通配符是完全匹配

  grep命令是在文件当中搜索符合条件的字符串,如果需要匹配,使用正则表达式进行匹配,正则表达式是包含匹配

 

文件比较

【cmp】 逐字节地比较两个文件,如果两个文件相同,则cmp不显示任何内容;否则,cmp将显示第1个不同处对应的字节数和行号

cmp [options] file1 [file2 [skip1 [skip2]]]

显示不同

【diff】 按行显示两个文本文件的不同。默认情况下,可以按照diff显示的不同来编辑其中的一个文件,使之与另一个文件相同

diff [options] file1 file2
diff [options] file1 directory
diff [options] directory file2
diff [options] directory1 directory2

  file1和file2为diff要比较的普通文本文件的路径名。当file2被directory参数替换时,diff将在directory目录下查找与file1同名的文件;类似地,当file1被directory替换,diff将在directory目录下查找与file2同名的文件;当指定两个目录参数时,diff将比较directory1目录下与directory2目录下具有相同的简单文件名的两个文件

  1c1表示更改a.txt的第1行,使之与b.txt的第一行相同

统计

【wc】 显示行数、单词数和字节数

wc [options] [file-list]

 

帮助命令

【man】

man 命令
#获取指定命令的帮助
man ls
#查看ls的帮助

man级别

1:查看命令帮助
2:查看可被内核调用的函数的邦族
3:查看函数和函数库的帮助
4:查看特殊文件的帮助(主要是/dev目录下的文件)
5:查看配置文件的帮助
6:查看游戏的帮助
7:查看其他杂项
8:查看系统管理员可用的命令帮助
9:查看和内核相关的文件帮助
man -f 命令
相当于
whatis 命令

【help】

命令 --help
#获取命令选项的帮助
help shell内部命令
#获取shell内部命令的帮助
whereis cd
#确定是否是shell内部命令
help cd
#获取内部命令帮助

【info】

info 命令
-回车 进入子帮助页面(带有*号标记)
-u 进入上层页面
-n 进入下一个帮助小节
-p 进入上一个帮助小节
-q 退出

 

压缩命令

  5种常用的压缩格式: .zip .gz .bz2 .tar.gz .tar.bz2

【zip】

zip 压缩文件名 源文件
#压缩文件

zip -r 压缩文件名 源目录
#压缩目录

upzip 压缩文件
#解压缩.zip文件

【gz】

  可在windows中解压缩,但是windows中的rar格式不能在Linux中解压

gzip 源文件
#压缩为.gz格式的压缩文件,源文件会消失
gzip
-c 源文件 > 压缩文件
#利用>输出重定向,将源文件保留(没有太大的意义)
gzip -r 目录
#压缩目录下所有的子文件,但是不能压缩目录
gzip
-d 压缩文件
#解压缩

gunzip 压缩文件
#解压缩

【bz2】

bzip2 源文件
#压缩为.bz2格式,不保留源文件

bzip2 -k 源文件
#压缩之后保留源文件

bzip2 -d 压缩文件
#解压缩,-k保留压缩文件

bunzip2 压缩文件
#解压缩,-k保留压缩文件

  [注意]bzip2命令不能压缩目录

【tar】

tar -cvf 打包文件名 源文件
选项:
-c 打包
-v 显示过程
-f 指定打包后的文件名
tar -xvf 打包文件名
选项:
    -x: 解打包

  其实,.tar.gz格式是先打包为.tar格式,再压缩为.gz格式

tar -zcvf 压缩包名.tar.gz 源文件
选项:
    -z: 压缩为.tar.gz格式
tar -zxvf 压缩包名.tar.gz
选项:
    -x: 解压缩.tar.gz格式
tar -jcvf 压缩包名.tar.bz2 源文件
选项:
    -z: 压缩为.tar.bz2格式
tar -jxvf 压缩包名.tar.bz2
选项:
    -x: 解压缩.tar.bz2格式

【tar.xz】

  对于tar.xz文件来说,解压缩命令如下所示

$xz -d ***.tar.xz
$tar -xvf  ***.tar

【tgz】

  对于taz文件来说,解压缩命令如下所示

$tar -zxvf  ***.tgz

 

挂载命令

  挂载就是指分配盘符

【查询与自动挂载】

mount
#查询系统中已经挂载的设备

mount -a
#依据配置文件/etc/fstab的内容,自动挂载

【挂载命令格式】

mount [-t 文件系统] [-o 特殊选项] 设备文件名 挂载点
选项:
-t 文件系统: 加入文件系统类型来指定挂载的类型,可以ext3、ext4、iso9660等文件系统
-o 特殊选项: 可以指定挂载的额外选项

【挂载光盘】

mkdir /mnt/cdrom/
#建立挂载点

mount -t iso9660 /dev/cdrom /mnt/cdrom/
#挂载光盘

mount /dev/sr0 /mnt/cdrom/

 【卸载光盘】

umount 设备名或挂载点

umount /mnt/cdrom

【U盘挂载】

fdist -l
#查看U盘设备文件名

mount -t vfat /dev/sdb1 /mnt/usb/

  [注意]Linux默认是不支持NTFS文件系统的

 

别名

【alias】

alias
#查看系统中所有的命令别名

alias 别名= \'原命令\'
#设定命令别名

   一般地,别名在用户注销或重新登录时就会失效。如果在长期使用,则需要将其写入环境变量配置文件中

vi ~/.bashrc
#写入环境变量配置文件

unallias 别名
#删除别名

  [注意]如果要彻底删除别名,需要修改配置文件

【命令生效顺序】

  1、执行用绝对路径或相对路径执行的命令

  2、执行别名

  3、执行bash的内部命令

  4、执行按照$PASH环境变量定义的目录查找顺序找到的第一个命令

 

历史命令

【history】

history [选项] [历史命令保存文件]
选项:
    -c: 清空历史命令
    -w: 把缓存中的历史命令写入历史命令保存文件~/.bash_history

【历史命令的调用】

  使用上下箭头调用以前的历史命令

  使用"!n"重复执行第n条历史命令

  使用"!!"重复执行上一条命令

  使用"!字串"重复执行最后一条以该字串开头的命令

 

快捷键

ctrl+l 清屏
ctrl+c 强制终止当前命令
ctrl+a 光标移动到命令行首
ctrl+e 光标移动到命令行尾
ctrl+u 从光标所在位置删除到行首
ctrl+z 把命令放入后台
ctrl+r 在历史命令中搜索
一次tab 补全 两次tab 提示
shift+pageup 向上翻页
shift+pagedown 向下翻页

 

以上是关于Shell常用命令的主要内容,如果未能解决你的问题,请参考以下文章

提效小技巧——记录那些不常用的代码片段

shell脚本简介及常用文本编辑命令

常用的shell变量

代码片段:Shell脚本实现重复执行和多进程

hadoop常用shell命令怎么用

Linux shell常用命令