文章目录
lunix支持的命令有很多,这里分类整理了一些常用,可以满足日常工作的命令解释合集。如果想要了解更多,可以参考linux命令大全
一,文件夹操作
1. 创建目录 mkdir
- mkdir xxx:在当前目录下创建子目录xxx
- mkdir /x/x/x:创建指定的全路径目录
- mkdir -p /x1/x2/x3:级联创建目录,如果在创建目录x3的过程中,发现x1或者是x2不存在,就会自动创建,不会报错
2. 删除目录 rm -rf
- rmdir xxx:删除目录xxx
- rmdir -p gg/xx :删除目录xx,如果删除之后发现gg变成了空目录,那么gg也会被删除
- rm -rf xx/yy:会直接删除xx目录
rm -r 删除之后无法恢复,操作需谨慎
3. 查看目录 cd,ls,stat,pwd
- cd ~:进入当前用户的根目录
- cd /:进入系统根目录
- cd xxx:进入指定目录xxx
- cd …/:进入上层目录,…表示上一层的意思,可以多层叠加
- ls:显示当前目录下的非隐藏内容
- ls -a:显示当前目录下的隐藏(.开头 )+非隐藏内容
- ls -l:除了显示文件名称之后,还是显示文件的型态,权限,拥有者等详细信息
- ls -t:根据创建时间由后到前显示
- ls -A:和ls -a一样,但是不会显示 . 和…
- ls -R:多级级联显示,即子目录中的内容也会被显示
- stat xxx:会显示出文件夹xxx的详细信息,创建时间,修改时间,大小等等
- pwd:显示当前所在目录
4. 修改目录 mv
- mv sourceDir destDir:
如果目标目录destDir存在的话,会将原目录sourceDir 移入到destDir中,作为其子目录
如果目标目录destDir不存在的话,那么会将sourceDir的目录名修改为destDir
二,文件操作
1. 创建文件 touch,vi
- touch fff:创建文件fff,可以是全路径或相对路径,默认创建在当前路径。
当文件fff不存在的时候,会创建该文件,创建时间也是当前的系统时间。
当文件fff已经存在的时候,那么就会修改fff的创建时间为当前系统时间- vi fff:如果文件fff不存在,那么可以使用vi或者是vim的方式,然后随便输入一些内容之后,:wq,就可以保存输入的内容,创建一个新文件fff
2. 删除文件 rm
- rm fff:使用rm命令可以完全删除指定文件fff
3. 查看文件 cat,head,tail,more
- cat xxx: 将指定文件的内容定向到stdout
- cat -n xxx:输出的时候从1开始递增对每一行编号并输出
- cat -b xxx:编号输出,相较于-n,空白行不输出
- cat -s xxx:输出的时候会将连续多行空白行合并为一行
- cat -E xxx:输出的时候在每一行的结尾加$
- head -n 100 fff:将文件fff的前100行定向到stdout
- tail -n 100 fff:将文件fff的最后100行定向到stdout
- tailf -f fff:显示文件的最后10行,当有其他进程添加内容到fff的时候,在当前客户端也会输出到stdout,直到执行ctrl+c停止
- tail -n +20 fff:输出文件的第20行到最后一行
- tail -c 10 fff:输出最后10个字符
- more file1:类似于cat,以分页的方式显示file1的内容 进入more命令之后:
- enter:向下前进n行,默认是1行
- ctrl+F(空格):前进一屏
- ctrl+B:向上翻滚一屏
- =:在左下角输出当前行号
- :f:在左下角输出文件名和当前行号
- v:进入vi编辑器
- q:退出more
4. 修改文件 mv cp
mv file1 file2:将源文件名 file1 改为目标文件名 file2
mv file1 dir2:将文件 file1 移动到目标目录 dir2中
cp file1 file2:将file1复制到file2 如果file2不存在,那么就创建文件file2,复制file1的内容到file2
如果file2已经存在,会提醒是否要覆盖file2,可以选择Y/Ncp -b file1 fil:2:-b参数的作用在于在复制的时候不仅会复制文件内容,而且还会复制文件的时间和访问权限
cp -l file1 file2:-l参数的作用在于不是复制文件,而是生成file1的一个链接文件。
当stat file2的时候,显示的属性就是file1的属性。
当对file1或file2 中的一个做出修改的时候,另外一个也会同步修改cp f1 d2:将文件f1复制到目录d2中
三:查找
1. find
在指定的目录下进行查找
语法格式为:find path expression
find : find命令关键字
path:find命令的执行路径,注意,这里的path是查找开始的根目录,即从path向下一直查找,直到底
express:find命令的选项
为了方便参数的以及,下面的()中的内容是对命令的英文全称
支持的express有:
- -amin n:在过去的n分钟被读取过的文件,(access min)
- -anewer file1:比文件file1更晚读取过的文件,(access newer)
- -atime n:在过去的n天内被读取过的文件
- -cmin n:在过去的n分钟内被修改过的文件,(change min)
- -cnewer file1:比文件file1更晚修改过的文件,(change newer)
- -ctime n:在过去的n天内被修改过的文件
- -ipath p, -path p :路径名称符合p的路径,ipath 会忽略大小写
- -iname name, -name name : 文件名称符合 name 的文件。iname 会忽略大小写
- -size n : 大小 是 n 单位的文件,b 代表 512 位元组的区块,c 表示字元数,k 表示 kilo bytes,w 是二个位元组。
- -type c : 文件类型是:c 的文件。
支持的type的取值范围:d: 目录 c: 字型装置文件 b: 区块装置文件 p: 具名贮列 f: 一般文件 l: 符号连结 s: socket
使用示例:
- 在当前目录查找sh结尾的文件
[root@centos7-01 an]# find . -name '*.sh'
./local/mwget/mwget_0.1.0.orig/ltmain.sh
./a.sh
./b.sh
- 从当前目录开始查找列出所有的文件
find . -type f
- -anewer的示例
[root@centos7-01 l]# touch a
[root@centos7-01 l]# touch b
[root@centos7-01 l]# find . -anewer b
[root@centos7-01 l]# find . -anewer a
.
./b
[root@centos7-01 l]#
2. which
which命令会在$path 配置的目录中去进行查找
语法:which [文件…]
所以一般which命令都会用来查看安装指令的绝对路径
例如,查看Python的路径,bash的路径 等等
[root@centos7-01 l]# which python
/usr/bin/python
[root@centos7-01 l]# which bash
/usr/bin/bash
[root@centos7-01 l]#
3. grep
grep一般用来查找看文件中是否有符合条件的内容
grep
支持的参数:
grep -A n:输出匹配行和之后的n行
grep -b: 在显示符合样式的那一行之前,标示出该行第一个字符的编号
grep -B n:输出匹配行和之前的n行
grep -c:输出符合样式的列数
grep -C n:输出匹配行和之后的n行和之前的n行
grep -e ‘xx’:-e 用来指定正则样式。
对于不包含特殊字符的样式,不管是否使用-e来指定都可以正确匹配
但是如果正则样式中包括‘-a’这样的内置参数的时候,那么解析器就会把-a当做参数来处理,而不是正则样式。所以这个时候就需要-e
[root@centos7-01 an]# grep -e '-a' a
-a
[root@centos7-01 an]# grep '-a' a
c^C
- grep -E ‘xxx’:指定延伸的正则样式,比如包含或关系的正则。也可以直接使用egrep 指定,可以支持绝大部分正则
[root@centos7-01 an]# grep 'j|a' a
[root@centos7-01 an]# grep -e 'j|a' a
[root@centos7-01 an]# grep -E 'j|a' a
nbdsjkb
-a
bnsjak
- grep -f file:当需要使用多个规则样式的时候,可以引用规则文件file
- grep -F ‘xxx’:将xxx作为固定字符串进行匹配。即如果xxx中包含正则标识符[,],* 等,不会按正则去解析。
[root@centos7-01 an]# grep '[log.info*ndsak]' a
nbdsjkb
sn,
-a
hd[log.info*ndsak]df
bnsjak
[root@centos7-01 an]# grep -F '[log.info*ndsak]' a
hd[log.info*ndsak]df
[root@centos7-01 an]#
当然,可以用正则的方式去进行解析,但是,显而易见,grep -F的方式对于我们解析日志是更为方便的
- grep -h:当输出样式匹配行的时候,不输出文件名
- grep -H:当输出样式匹配行的时候,在每一行的前面先输出文件名,默认是-h
[root@centos7-01 an]# grep -F '[log.info*ndsak]' -h a
hd[log.info*ndsak]df
[root@centos7-01 an]# grep -F '[log.info*ndsak]' -H a
a:hd[log.info*ndsak]df
- grep -i:在进行样式匹配的时候,忽略大小写的差异
- grep -l:只输出可以匹配到的文件名
- grep -L:当对目录进行匹配的时候,只输出匹配不到的文件名
[root@centos7-01 an]# grep -F '[log.info*ndsak]' -L a*
a.sh
[root@centos7-01 an]# grep -F '[log.info*ndsak]' -l a*
a
- grep -o:当匹配到内容的时候,只输出匹配成功部分,而不是整行
[root@centos7-01 an]# grep -F '[log.info*ndsak]' -o a
[log.info*ndsak]
[root@centos7-01 an]# grep -F '[log.info*ndsak]' a
hd[log.info*ndsak]df
- grep -r xxx:以递归的方式查找,包括xxx目录,以及该目录下的多级子目录
- grep -v ff:显示ff文件中匹配不到的行
- grep -V:显示grep 命令的版本信息
- grep -w:只显示整行都匹配上的行
[root@centos7-01 an]# grep -F '[log.info*ndsak]' -w a
[log.info*ndsak]
[root@centos7-01 an]# grep -F '[log.info*ndsak]' a
hd[log.info*ndsak]df
[log.info*ndsak]
四,磁盘管理
1. du(磁盘空间)
用来显示目录或文件的大小,指代所占用的磁盘空间
支持的参数:
- du dir:输出指定目录dir下所有文件的大小
如果有子目录,会递归输出
如果没有指定dir,那么默认将dir设置为当前目录- du -b :输出大小的时候,以byte为单位
- du -c dir:在输出dir下文件大小的同时,还会输出dir目录的整体大小
- du -h:以K,M,G为单位输出大小。如果文件的大于1024b的时候,会以K为单位显示。如果大于1024K的时候,那么就会以M为单位显示
- du -H:和-h类似,只不过是以1000为换算单位
- du -k:指定输出的单位为K
- du -m:指定输出的单位为M
- du -s dir:只输出dir目录总计大小
- du --exclude=dir:统计大小的时候,忽略dir。dir可以是目录或文件
10.–max-depth=<目录层数>:统计大小的时候,如果层数大于指定层数,就不显示
[root@centos7-01 an]# du --max-depth=1
51408 ./local
0 ./g
51456 .
2. df(文件系统)
显示目前Linux系统上文件系统磁盘的使用情况
因为这个命令主要是显示文件系统的使用,所以如果对文件系统不是很了解的可以先看一下linux文件系统,有助于对一些参数的理解
支持的参数
- df -a:显示全部的文件系统的使用情况
对于上图中出现的几列进行一个简单的介绍
1). Filesystem:文件系统名称
2). 1K-blocks:以1k的方式统计的block个数
3). Used:上面统计的1K-blocks中已经使用的block个数
4). Available:上面统计的1K-blocks中当前可用的block个数
5). Use%:使用率
6). Mounted on:挂载点
- df --block-size=<区块大小> 以指定的区块大小来显示区块数目,默认是1024
- df -h:以一种最可读的方式来展示可读性,即每一个文件系统的大小都是用K,M,G中的最大表示单位,即大于1024K的时候用M作为单位,大于1024M的时候用G作为单位
- df -H:同上-h,决定单位的时候使用1000,而不是1024
- df -i, --inodes :显示每一个文件系统 inode 的信息
1).Filesystem :文件系统名
2).Inodes :该文件系统下inode的数量
3).IUsed : 已经使用的iNode的数量
4).IFree :仍未使用的iNode的数量
5).IUse% :使用比
6).Mounted on: 挂载点
- df -t xx:–type=TYPE 只输出指定类型的文件系统的统计值
- df -T:–print-type 显示文件系统的类型
- df -x xx:–exclude-type=TYPE 不显示指定类型的文件系统的统计值
3. free(内存)
显示可用的内存的使用情况,包括实体内存,虚拟的交换文件内存,共享内存区段,以及系统核心使用的缓冲区等。
支持的参数
- free -b:以bytes为单位显示内存使用情况
- free -k:以KB为单位显示内存使用情况
- free -m:以MB为单位显示内存使用情况
- free -h:自动选择合适的单位显示内存使用情况
- free -t:显示内存使用总和
五:进程
1.ps
显示当前进程的状态
支持的参数:
- ps -A:列出当前机器所有的进程
- ps -au(x):显示进程较为详细的内容
USER :进程的owner
PID :进程ID
%CPU :进程占用的CPU使用率
%MEM:进程占用的内存使用率
VSZ(Virtual Memory Size):占用虚拟内存大小
RSS (Resident Set Size ):占用的常驻内存大小,包含了完整的在stack和heap中的内存
TTY
STAT:进程的当前状态:D: 无法中断的休眠状态 (通常 IO 的进程)
R: 正在执行中
S: 休眠状态
T: 暂停执行
Z: 不存在但暂时无法消除,僵尸进程
W: 没有足够的内存分页可分配,/进入内存交换
<: 高优先序的行程
N: 低优先序的行程
L: 有内存页并锁在内存内START:进程的开始时间
TIME:进程的运行时间
COMMAND:进程执行命令
- ps -ef:显示所有进程
和ps -aux的区别在于输出的格式不同
UID:用户ID(用户名)
PID:进程ID
PPID :父进程ID
C :进程占用CPU的百分比
STIME:时间
TTY:该进程在哪个终端上运行;若与当前终端无关,则显示?
若为pts/0等,则表示由网络连接主机进程TIME: 时间
CMD:命令的名称和参数
2. top
实时显示进程的动态
top : 显示进程动态
top -p xxx:显示pid是xxx的进程动态
PID:进程id
USER:进程owner
PR:优先级
NI:nice值
VIRT:占用虚拟内存包括进程使用的库、代码、数据等
假如进程申请100m的内存,但实际只使用了10m,那么它会增长100m,而不是实际的使用量RES:占用常驻内存
进程当前使用的内存大小,但不包括swap out
包含其他进程的共享
如果申请100m的内存,实际使用10m,它只增长10m,与VIRT相反
关于库占用内存的情况,它只统计加载的库文件所占内存大小SHR:共享内存
S :进程状态
%CPU :cpu使用率
%MEM :内存使用率
TIME+:运行时间
COMMAN:执行命令
六. 其他
1. xargs
- 命令之间传递参数的过滤器
- 可以将piple或stdin转换为命令行参数,也可以从文件的stdout中读取
- 可以把单行或多行文本输入数据进行转换
- 默认命令是echo。意味着通过piple传递给xargs的输入会包含换行和空白,在经过xargs之后,换行和空白都会被空格取代
出现的必要性: 因为有些命令不支持管道,所以需要xargs来转一下
支持的参数:
- xargs -a file:将file中的内容作为stdin
[root@centos7-01 an]# xargs -a data
a b c d e f g h i j k l m n o p q r s t u v w x y z
- -p:每执行一次命令都会询问一次是否执行 因为xargs的默认命令是echo,所以
[root@centos7-01 an]# xargs -a data -p
echo a b c d e f g h i j k l m n o p q r s t u v w x y z ?...y
a b c d e f g h i j k l m n o p q r s t u v w x y z
- -d delimi:xargs使用的默认分隔符是回车。解析参数的时候默认分隔符是空格
[root@centos7-01 an]# xargs -a data1 -d \#
1 2 3
[root@centos7-01 an]# xargs -a data1
1#2#3
可以看到,但使用特殊符号作为分隔符的时候,需要进行转义
- -c n:执行一次命令使用的参数个数 对于上面3的例子中,如果正确的使用#作为分隔符的话,那么解析到参数就是3个。 在默认情况下,是所有的参数执行一次命令
[root@centos7-01 an]# xargs -a data1 -d \#
1 2 3
[root@centos7-01 an]# xargs -a data1 -d \# -n 2
1 2
3
- -L n:读取n行执行一次命令
[root@centos7-01 an]# cat data
a b c d e f g
h i j k l m n
o p q
r s t
u v w x y z
[root@centos7-01 an]# xargs -a data -L 2
a b c d e f g h i j k l m n
o p q r s t
u v w x y z
- -t :指定需要执行的命令,默认是echo
[root@centos7-01 an]# xargs -a data -L 2
a b c d e f g h i j k l m n
o p q r s t
u v w x y z
[root@centos7-01 an]# xargs -a data -L 2 -t
echo a b c d e f g h i j k l m n
a b c d e f g h i j k l m n
echo o p q r s t
o p q r s t
echo u v w x y z
u v w x y z
[root@centos7-01 an]# xargs -a data1 -d \# -t touch
touch 1 2 3
[root@centos7-01 an]# ls
1 2 3?
- -I :自定义参数传递
[root@centos7-01 g]# cat data | xargs -t -I % sh -c 'touch %;ls %'
sh -c touch f1 f2 f4;ls f1 f2 f4
f1 f2 f4
如上:
将data 的内容作为xargs的stdin;
使用-t指定之后要执行的命令;
使用-I指定执行命令找那个参数的传递形式,因为这里没有指定-n,所以是将接收到的所有stdin作为参数一次性执行。从打印的执行命令中也可以看得出来;
sh -c将后面’'中的内容作为完整执行命令
touch %,使用stdin中的内容来替换%,所以这里是touch f1 f2 f4
ls %,使用stdin中的内容来替换%,所以这里是ls f1 f2 f4
-t的命令也可以放在脚本中执行
[root@centos7-01 g]# cat a.sh
#!/bin/bash
echo "this is a $1!!!$2"
[root@centos7-01 g]# cat data | xargs -I % sh a.sh yu %
this is a yu!!!f1 f2 f4