强力一gei

被公司前辈指点了下,说了下常用的一些东西,下面说说一些Linux命令,虽然我都见过,知道大概是干啥的,但是一些确实不太会用。

df和du

df:列出文件系统的整体使用量

du: 查看文件系统的磁盘使用量(常用在查看目录所占磁盘空间)

 

df:

-a          列出所有的文件系统,包括系统特有的/proc

-k          以kb的容量显示各文件系统

-m         以m的容量显示各文件系统

-h          以人们较易阅读的GBytes,Mbytes,KBytes等格式自行显示

-H         以M=1000k替换M=1024K的进位方式

-T         连同该硬盘分区的文件系统名称也列出

-i          不用磁盘容量,而以inode的数量来显示 

 

 df 不加任何选项,那么默认会将系统内所有的都以1kb的容量列出来。

Filestem: 代表文件系统在哪个磁盘分区,所以列出设备名名称

1k-blocks: 说明下面的数字单位是1kb,可利用-h或-m来改变容量

Used: 用掉的磁盘空间

Ava:剩下的磁盘空间

Use% 磁盘使用率

Mounted: 磁盘挂载点

[root@iz2zeczv3xrnm2jx6aayhxz ~]# df
Filesystem     1K-blocks     Used Available Use% Mounted on
devtmpfs          930480        0    930480   0% /dev
tmpfs             941108        0    941108   0% /dev/shm
tmpfs             941108    98920    842188  11% /run
tmpfs             941108        0    941108   0% /sys/fs/cgroup
/dev/vda1       41151808 11165608  27872768  29% /
tmpfs             188224        0    188224   0% /run/user/0
tmpfs             188224        0    188224   0% /run/user/1002
[root@iz2zeczv3xrnm2jx6aayhxz ~]# df -h
Filesystem      Size  Used Avail Use% Mounted on
devtmpfs        909M     0  909M   0% /dev
tmpfs           920M     0  920M   0% /dev/shm
tmpfs           920M   97M  823M  11% /run
tmpfs           920M     0  920M   0% /sys/fs/cgroup
/dev/vda1        40G   11G   27G  29% /
tmpfs           184M     0  184M   0% /run/user/0
tmpfs           184M     0  184M   0% /run/user/1002

将系统内的所有特殊文件格式以及名称都列出来

[root@iz2zeczv3xrnm2jx6aayhxz ~]# df -aT
Filesystem     Type       1K-blocks     Used Available Use% Mounted on
sysfs          sysfs              0        0         0    - /sys
proc           proc               0        0         0    - /proc
devtmpfs       devtmpfs      930480        0    930480   0% /dev
securityfs     securityfs         0        0         0    - /sys/kernel/security
tmpfs          tmpfs         941108        0    941108   0% /dev/shm
devpts         devpts             0        0         0    - /dev/pts
tmpfs          tmpfs         941108    98920    842188  11% /run
tmpfs          tmpfs         941108        0    941108   0% /sys/fs/cgroup
cgroup         cgroup             0        0         0    - /sys/fs/cgroup/systemd
pstore         pstore             0        0         0    - /sys/fs/pstore

df后面加上目录或是文件时,df会自动的分析该目录或文件所在的磁盘分区的容量

[root@iz2zeczv3xrnm2jx6aayhxz ~]# df -h /etc
Filesystem      Size  Used Avail Use% Mounted on
/dev/vda1        40G   11G   27G  29% /

由于df只要读取的数据几乎都是针对一整个文件系统,因此读取的范围只要是在超级区块内的信息,所以这个命令显示结果的速度非常快。在显示的结果中你需要特别留意的是根目录,的的剩余容量。

 

du

-a         列出所有的文件与目录容量,因为默认仅统计目录下面的文件量

-h          友好的格式

-s          仅列出总量,而不列出每个各别的目录占用量

-S          不包括子目录下的的统计,与-s有点差别

-k           以kb列出容量显示

-m          以列出容量显示

 直接输入du没有任何选项时,则du会分析[目前所在目录]的文件与目录所占用的磁盘空间,但是,实际显示是,仅会显示目录容量(不含文件), 因此(.)目录有很多文件没有别列出来。所以全部的目录相加不会等于(.)目录,此外,输出的数值数据为1k大小的容量单位。

[root@iz2zeczv3xrnm2jx6aayhxz ~]# du
8	./.oracle_jre_usage
8	./uwsgi_latest_from_installer/vhosttest/flask004
8	./uwsgi_latest_from_installer/vhosttest/flask001
8	./uwsgi_latest_from_installer/vhosttest/flask002
8	./uwsgi_latest_from_installer/vhosttest/flask003
8	./uwsgi_latest_from_installer/vhosttest/flask005
48	./uwsgi_latest_from_installer/vhosttest
192	./uwsgi_latest_from_installer/buildconf
12	./uwsgi_latest_from_installer/valgrind
40	./uwsgi_latest_from_installer/lib
8	./uwsgi_latest_from_installer/tests/templates
8	./uwsgi_latest_from_installer/tests/t
260	./uwsgi_latest_from_installer/tests
72	./uwsgi_latest_from_installer/apache2

 

检查根目录下面每个目录所占用的容量,

这个是经常被使用的功能,利用通配符*来代表每个目录,如果想要检查某个目录下,哪个子目录占用最大的容量,可以用这个方法找出来。

[root@iz2zeczv3xrnm2jx6aayhxz ~]# du -sm /*
0	/bin
200	/boot
37	/data
0	/dev
40	/etc
483	/home
0	/lib
0	/lib64
1	/lost+found
1	/media
1	/mnt
1	/opt

至于-S这个选项部分,由于du默认会将所有文件的大小均列出,因此假设你在/etc下面使用du时,所有的文件大小,包括/etc下面的子目录也会被计算一次。所以想要列出某目录下的全部数据,可以加上-S选项。

 

 

sed

-n       使用安静模式,在一般sed的用法中,所有来自stdio的数据一般都会被列出到屏幕上,当如果加上-n参数后,则只有有经过sed特殊处理的那一行才会被列出来

-e       直接在命令行模式上进行sed操作编辑

-f        直接将sed的操作写在一个文件内,- f filename 则可以执行filename内的sed操作

-r        sed的操作使用的是扩展形正则表达式的语法(默认是基础正则表达式语法)

-i        直接修改读取的文件内容,而不是由屏幕输出

操作说明:

n1, n2:    不见得会存在,一般代表[选择进行操作的行数],举例来说,如果操作时需要在10到20行之间的,则【10,20[操作行为]】

fuction  有下面的东西:

a                   新增,a后面可以接字符,而这些字符会在新的一行出现,(目前的下一行)

c                   替换,c的后面可以接字符,这些字符可以替换n1,n2之间的行

d                   删除,因为是删除,所以d后面通常不接任何东西

i                    插入,i 的后面可以接字符,而这些字符会在新的一行出现(目前的上一行)

p                   打印,亦即将某个选择的数据打印出来,通常p会与参数sed -n 一起运行,

s                  替换,可以直接进行替换的工作,通常这个s的操作可以搭配正则表达式,例如 1,20s/old/new/g

以行为单位的新增/删除功能

删除

nl 是加行号打印文本,原本应该是要执行sed-e才对,没有-e也行,同时后面要加''   实测"" 也行,特别注意,删除只是在屏幕打印的删除,相当于py的切片,源文件并没有删除。

nl sedtest | sed '2,36d'    # 删除2到36行
nl sedtest | '2d'           # 删除第2行
n1 sedtest | '3,$d'         # 删除第3行开始到最后一行

新增

nl sedtest | sed '2a #################'   # 在第二行后加内容
nl sedtest | sed '2i #################'   # 在第二行前加内容
nl sedtest | sed '2i ################# /
> sfsadfsadf'                             # 插入多行内容

以行为单位的替换与显示功能

nl sedtest | sed '2,5c 替换的内容'

显示指定行的内容

nl sedtest | sed -n '5,7p'

注意要加个-n, 是安静输出,不加-n 5到7行会重复输出

部分数据的查找和替换、

下面是个稍微复杂的例子:

[root@iz2zeczv3xrnm2jx6aayhxz ~]# /sbin/ifconfig eth0
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 172.24.20.165  netmask 255.255.192.0  broadcast 172.24.63.255
        ether 00:16:3e:12:ff:90  txqueuelen 1000  (Ethernet)
        RX packets 10384212  bytes 2545361694 (2.3 GiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 9995923  bytes 4657717520 (4.3 GiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

要取到inet的ip地址

[root@iz2zeczv3xrnm2jx6aayhxz ~]# /sbin/ifconfig eth0 | grep 'inet'
        inet 172.24.20.165  netmask 255.255.192.0  broadcast 172.24.63.255

[root@iz2zeczv3xrnm2jx6aayhxz ~]# /sbin/ifconfig eth0 | grep 'inet' | sed 's/^.*inet //g'
172.24.20.165  netmask 255.255.192.0  broadcast 172.24.63.255
# s/^.*inet //g 是个正则,^.*实际匹配的是inet前面的空格,inet 后面有个空格,
# 实际就是把inet前面所有的空格,外加后面的一个空格全部替换成空。


[root@iz2zeczv3xrnm2jx6aayhxz ~]# /sbin/ifconfig eth0 | grep 'inet' | sed 's/^.*inet //g' \
>  | sed 's/ *netmask.*$//g'
172.24.20.165

 

删除不要的数据保留需要的数据

[root@iz2zeczv3xrnm2jx6aayhxz ~]# cat /etc/man_db.conf | grep 'MAN'
# MANDATORY_MANPATH			manpath_element
# MANPATH_MAP		path_element	manpath_element
# MANDB_MAP		global_manpath	[relative_catpath]
# every automatically generated MANPATH includes these fields
#MANDATORY_MANPATH 			/usr/src/pvm3/man
MANDATORY_MANPATH			/usr/man
MANDATORY_MANPATH			/usr/share/man
MANDATORY_MANPATH			/usr/local/share/man
# set up PATH to MANPATH mapping
#		*PATH*        ->	*MANPATH*
MANPATH_MAP	/bin			/usr/share/man
MANPATH_MAP	/usr/bin		/usr/share/man
MANPATH_MAP	/sbin			/usr/share/man
MANPATH_MAP	/usr/sbin		/usr/share/man
MANPATH_MAP	/usr/local/bin		/usr/local/man


# 删除以#开头的注释,但是会留下空格
[root@iz2zeczv3xrnm2jx6aayhxz ~]# cat /etc/man_db.conf | grep 'MAN' | sed 's/#.*$//g'





MANDATORY_MANPATH			/usr/man
MANDATORY_MANPATH			/usr/share/man
MANDATORY_MANPATH			/usr/local/share/man


MANPATH_MAP	/bin			/usr/share/man
MANPATH_MAP	/usr/bin		/usr/share/man
MANPATH_MAP	/sbin			/usr/share/man
MANPATH_MAP	/usr/sbin		/usr/share/man


# 删除空格,sed '/^$/d
[root@iz2zeczv3xrnm2jx6aayhxz ~]# cat /etc/man_db.conf | grep 'MAN' | sed 's/#.*$//g' | sed '/^$/d'
MANDATORY_MANPATH			/usr/man
MANDATORY_MANPATH			/usr/share/man
MANDATORY_MANPATH			/usr/local/share/man
MANPATH_MAP	/bin			/usr/share/man
MANPATH_MAP	/usr/bin		/usr/share/man
MANPATH_MAP	/sbin			/usr/share/man
MANPATH_MAP	/usr/sbin		/usr/share/man
MANPATH_MAP	/usr/local/bin		/usr/local/man
MANPATH_MAP	/usr/local/bin		/usr/local/share/man
MANPATH_MAP	/usr/local/sbin		/usr/local/man
MANPATH_MAP	/usr/local/sbin		/usr/local/share/man
MANPATH_MAP	/usr/X11R6/bin		/usr/X11R6/man
MANPATH_MAP	/usr/bin/X11		/usr/X11R6/man

 

sed还可以直接修改文件内容(危险操作)

sed -i 's/\.s/\!/g' xx.txt
# 将xx.txt每行末尾的. 替换成! 注意转意

 

 

awk

相较于sed常常作用于一整个行的处理,awk则比较倾向于一行当中分成数个字段来处理。因此,awk相当于处理小型的文本数据。

通常运行的模式: awk '条件类型1{操作1} 条件类型2{操作2} ... ' filename

[root@iz2zeczv3xrnm2jx6aayhxz ~]# last -n 5
root     pts/0        123.113.35.194   Sun Jan 12 23:51   still logged in   
root     pts/0        123.113.35.194   Sun Jan 12 11:33 - 20:10  (08:36)    
root     pts/0        111.21.39.46     Sun Dec 22 13:11 - 16:39  (03:28)    
root     pts/0        111.21.39.46     Thu Dec 19 17:01 - 17:06  (00:04)    
root     pts/0        111.21.39.46     Thu Dec 19 10:45 - 11:41  (00:56) 


[root@iz2zeczv3xrnm2jx6aayhxz ~]# last -n 5 | awk '{print $1 "\t" $3}'
# \t 是tab分隔符
root	123.113.35.194
root	123.113.35.194
root	111.21.39.46
root	111.21.39.46
root	111.21.39.46

每一行的每个字段都是有变量名称,那就是$1$2等变量名称。$1是每行第一个变量,$0是一整行数据。

变量名称代表意义
NF每一行拥有字段的总数
NR目前awk所处理的是第几行数据
FS目前的分割符,默认是空格键
$ last -n 5 | awk '{print $1 "\t lines:" NR "\t columns:" NF}'
plat_dev	 lines:1	 columns:10
plat	     lines:2	 columns:10
plat_dev	 lines:3	 columns:10
plat_dev	 lines:4	 columns:10
plat_dev	 lines:5	 columns:10

 在/etc/passwd 当中是以冒号":"来作为字段分隔符的,该文件中第一字段为账号,第三字段是UID。要查看第三栏小于10以下的的数据,并且仅列出账号与第三列,

[plat_dev@BJHTYD-Client-104-11 ~]$ cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
operator:x:11:0:operator:/root:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
avahi-autoipd:x:170:170:Avahi IPv4LL Stack:/var/lib/avahi-autoipd:/sbin/nologin



[plat_dev@BJHTYD-Client-104-11 ~]$ cat /etc/passwd | awk '{FS=":"} $3 < 10 {print $1 "\t" $3}'
root:x:0:0:root:/root:/bin/bash	
bin	1
daemon	2
adm	3
sync	5
shutdown	6
halt	7

但是第一行root:x:0:0:root:/root:/bin/bash显示并不正确,因为读入第一行时,那些变量$1$2默认还是以空格键为分隔符,虽然我们定义了FS=":",但是却仅能在第二行才开始生效。所以可以预先设置awk的变量,利用BEGIN这个关键词。

 

 

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值