今日命令
- du:统计目录(或文件)所占磁盘空间的大小。
参数:
-a或-all 为每个指定文件显示磁盘使用情况,或者为目录中每个文件显示各自磁盘使用情况。
-b或-bytes 显示目录或文件大小时,以byte为单位。
-c或–total 除了显示目录或文件的大小外,同时也显示所有目录或文件的总和。
-D或–dereference-args 显示指定符号连接的源文件大小。
-h或–human-readable 以K,M,G为单位,提高信息的可读性。
-H或–si 与-h参数相同,但是K,M,G是以1000为换算单位,而不是以1024为换算单位。
-k或–kilobytes 以1024 bytes为单位。
-l或–count-links 重复计算硬件连接的文件。
-L<符号连接>或–dereference<符号连接> 显示选项中所指定符号连接的源文件大小。
-m或–megabytes 以1MB为单位。
-s或–summarize 仅显示总计,即当前目录的大小。
-S或–separate-dirs 显示每个目录的大小时,并不含其子目录的大小。
-x或–one-file-xystem 以一开始处理时的文件系统为准,若遇上其它不同的文件系统目录则略过。
-X<文件>或–exclude-from=<文件> 在<文件>指定目录或文件。
–exclude=<目录或文件> 略过指定的目录或文件。
–max-depth=<目录层数> 超过指定层数的目录后,予以忽略。
–help 显示帮助。
–version 显示版本信息。
-sh *显示当前目录内文件夹及文件的大小。
- lsof:(list open files)是一个列出当前系统打开文件的工具。
lsof -c abc 显示abc进程现在打开的文件
lsof -c -p 1234 列出进程号为1234的进程所打开的文件
lsof -g gid 显示归属gid的进程情况
lsof +d /usr/local/ 显示目录下被进程开启的文件
lsof +D /usr/local/ 同上,但是会搜索目录下的目录,时间较长
lsof -d 4 显示使用fd为4的进程
lsof -i 用以显示符合条件的进程情况
lsof -i[46] [protocol][@hostname|hostaddr][:service|port]
46 --> IPv4 or IPv6
protocol --> TCP or UDP
hostname --> Internet host name
hostaddr --> IPv4地址
service --> /etc/service中的 service name (可以不止一个)
port --> 端口号 (可以不止一个)
lsof输出各列信息的意义如下:
COMMAND:进程的名称 PID:进程标识符
USER:进程所有者
FD:文件描述符,应用程序通过文件描述符识别该文件。如cwd、txt等 TYPE:文件类型,如DIR、REG等
DEVICE:指定磁盘的名称
SIZE:文件的大小
NODE:索引节点(文件在磁盘上的标识)
NAME:打开文件的确切名称
FD 列中的文件描述符cwd 值表示应用程序的当前工作目录,这是该应用程序启动的目录,除非它本身对这个目录进行更改,txt 类型的文件是程序代码,如应用程序二进制文件本身或共享库,如上列表中显示的 /sbin/init 程序。
其次数值表示应用程序的文件描述符,这是打开该文件时返回的一个整数。如上的最后一行文件/dev/initctl,其文件描述符为 10。u 表示该文件被打开并处于读取/写入模式,而不是只读 ® 或只写 (w) 模式。同时还有大写 的W 表示该应用程序具有对整个文件的写锁。该文件描述符用于确保每次只能打开一个应用程序实例。初始打开每个应用程序时,都具有三个文件描述符,从 0 到 2,分别表示标准输入、输出和错误流。所以大多数应用程序所打开的文件的 FD 都是从 3 开始。
与 FD 列相比,Type 列则比较直观。文件和目录分别称为 REG 和 DIR。而CHR 和 BLK,分别表示字符和块设备;或者 UNIX、FIFO 和 IPv4,分别表示 UNIX 域套接字、先进先出 (FIFO) 队列和网际协议 (IP) 套接字。
1、创建1个 100k磁盘
第1个里程碑-创建100k的文件
[root@oldboyedu59 ~]# dd if=/dev/zero of=/tmp/100k bs=1k count=100
100+0 records in
100+0 records out
102400 bytes (102 kB) copied, 0.000433072 s, 236 MB/s
命令使用格式:
dd if=/dev/zero of=/tmp/100k bs=1k count=100
input file 从哪里获取数据
output file 输出文件
block size 每次复制多大(10k 1M)
count 数量
- DEV下目录
/dev/zero #白洞 源源不断输出
/dev/null #黑洞
/dev/urandom #随机字节数据流(设置动态密码的时候用)
[root@oldboyedu59 ~]# ll -h /tmp/100k
-rw-r--r-- 1 root root 100K May 13 09:44 /tmp/100k
[root@oldboyedu59 ~]# mkfs.ext4 /tmp/100k
mke2fs 1.42.9 (28-Dec-2013)
/tmp/100k is not a block special device.
Proceed anyway? (y,n)
第2个里程碑-格式化
[root@oldboyedu59 ~]# file /tmp/100k
/tmp/100k: data
[root@oldboyedu59 ~]# mkfs.ext4 /tmp/100k
mke2fs 1.42.9 (28-Dec-2013)
/tmp/100k is not a block special device.
Proceed anyway? (y,n) y
Filesystem too small for a journal
Discarding device blocks: done
Filesystem label=
OS type: Linux
Block size=1024 (log=0)
Fragment size=1024 (log=0)
Stride=0 blocks, Stripe width=0 blocks
16 inodes, 100 blocks
5 blocks (5.00%) reserved for the super user
First data block=1
1 block group
8192 blocks per group, 8192 fragments per group
16 inodes per group
Allocating group tables: done
Writing inode tables: done
Writing superblocks and filesystem accounting information: done
[root@oldboyedu59 ~]# file /tmp/100k
/tmp/100k: Linux rev 1.0 ext2 filesystem data, UUID=f69a3045-8775-4a4f-89ee-c0af21f9d9f3 (extents) (64bit) (huge files)
第3个里程碑-挂载
[root@oldboyedu59 ~]# mkdir -p /app/log
[root@oldboyedu59 ~]# mount /tmp/100k /app/log/
[root@oldboyedu59 ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda3 99G 1.8G 98G 2% /
devtmpfs 980M 0 980M 0% /dev
tmpfs 991M 0 991M 0% /dev/shm
tmpfs 991M 9.6M 981M 1% /run
tmpfs 991M 0 991M 0% /sys/fs/cgroup
/dev/sda1 197M 105M 93M 54% /boot
/dev/sdb1 98M 5.3M 93M 6% /data
tmpfs 199M 0 199M 0% /run/user/0
/dev/loop0 93K 14K 72K 17% /app/log
[root@oldboyedu59 ~]# df -i
Filesystem Inodes IUsed IFree IUse% Mounted on
/dev/sda3 51801600 64784 51736816 1% /
devtmpfs 250795 412 250383 1% /dev
tmpfs 253511 1 253510 1% /dev/shm
tmpfs 253511 753 252758 1% /run
tmpfs 253511 16 253495 1% /sys/fs/cgroup
/dev/sda1 102400 326 102074 1% /boot
/dev/sdb1 51712 3 51709 1% /data
tmpfs 253511 1 253510 1% /run/user/0
/dev/loop0 16 11 5 69% /app/log
2、故障模拟
2.1模拟inode满了
[root@oldboyedu59 ~]# cd /app/log/
[root@oldboyedu59 /app/log]# touch oldboy{01..10}.txt
touch: cannot touch ‘oldboy06.txt’: No space left on device
touch: cannot touch ‘oldboy07.txt’: No space left on device
touch: cannot touch ‘oldboy08.txt’: No space left on device
touch: cannot touch ‘oldboy09.txt’: No space left on device
touch: cannot touch ‘oldboy10.txt’: No space left on device
[root@oldboyedu59 /app/log]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda3 99G 1.8G 98G 2% /
devtmpfs 980M 0 980M 0% /dev
tmpfs 991M 0 991M 0% /dev/shm
tmpfs 991M 9.6M 981M 1% /run
tmpfs 991M 0 991M 0% /sys/fs/cgroup
/dev/sda1 197M 105M 93M 54% /boot
/dev/sdb1 98M 5.3M 93M 6% /data
tmpfs 199M 0 199M 0% /run/user/0
/dev/loop0 93K 14K 72K 17% /app/log
[root@oldboyedu59 /app/log]# touch oldboy.txt
touch: cannot touch ‘oldboy.txt’: No space left on device
2.2Linux下面删除大量小文件(文件) Argument list too long 解决流程
[root@oldboyedu59 ~]# mkdir test
[root@oldboyedu59 ~]# touch test/{1..400000}
-bash: /usr/bin/touch: Argument list too long
[root@oldboyedu59 ~]# ls test/
[root@oldboyedu59 ~]# echo test/{1..400000}|xargs touch
2.3报错
[root@oldboyedu59 ~]# ls test/|wc -l
400000
[root@oldboyedu59 ~]# \rm test/*
-bash: /usr/bin/rm: Argument list too long
2.4解决
ls或find +|xargs rm -f
2.4.1Linux文件删除原理:
Linux彻底删除1个文件的条件:
1.没有入口(rm 硬链接数为0) oldboy.txt /etc/hosts
2.没有人使用这个文件(进程调用数为0) 重启这个服务
2.4.2 losf(list open files)是一个列出当前系统打开文件的工具。
安装:
yum install lsof -y
功能:
lsof list open files 显示系统中所有被打开的文件(使用中)
2.4.3每列含义
[root@lubao ~]# lsof |head
COMMAND PID TID USER FD TYPE DEVICE SIZE/OFF NODE NAME
systemd 1 root cwd DIR 253,0 4096 64 /
systemd 1 root rtd DIR 253,0 4096 64 /
systemd 1 root txt REG 253,0 1612152 17243169 /usr/lib/systemd/systemd
命令或服务 文件大小 inode 路径(文件)
3、模拟文件没有被彻底删除导致磁盘空间不足
3.1环境准备
seq 500000000 >>/var/log/messages
3.2通过一层层的查找(找到后删除)
df -h
du -sh /*|sort -h
du -sh /var/*|sort -h
du -sh /var/log/*|sort -h
ll -h /var/log/messages
df -h
\rm -f /var/log/messages
df -h
ll /var/log/messages
此时完成故障模拟
3.3排错
lsof |grep messages
3.3.1 rsyslog 系统日志服务
/var/log/messages
/var/log/secure
/var/log/cron
lsof |grep messages
df -h
3.3.2 重启系统日志服务和abrtd.service (问题解决)
systemctl restart rsyslog.service abrtd.service
3.3.3 lsof的delete标记说明
1个窗口 tail -f alex.txt
4、另外1个窗口
[root@oldboyedu59 ~]# lsof |grep alex.txt
tail 17302 root 3r REG 8,3 0 134348620 /root/alex.txt
[root@oldboyedu59 ~]# rm -f alex.txt
[root@oldboyedu59 ~]#
[root@oldboyedu59 ~]#
[root@oldboyedu59 ~]# lsof |grep alex.txt
tail 17302 root 3r REG 8,3 0 134348620 /root/alex.txt (deleted)
[root@oldboyedu59 ~]# ls -l alex.txt
ls: cannot access alex.txt: No such file or directory
[root@oldboyedu59 ~]# lsof |grep alex.txt
tail 17302 root 3r REG 8,3 0 134348620 /root/alex.txt (deleted)
4、No Space left on device 磁盘空间不足 故障系列:
原因 排查过程 解决
1.inode满了 df -h 没有满,df -i 整体哪里满了 找出系统中目录大于1MB的 然后确认之后删除下面的小文件
2.block正常 df -h 满了, du -sh 一层一层 排查 排查到具体的文件或目录时候 确认再删除
3.block(文件没有被彻底删除)df -h 满了, du -sh 没有满 ,lsof |grep delete 重启对应服务
4.1 inode满了 df -h 没有满,df -i 整体哪里满了 找出系统中目录大于1MB的 然后确认之后删除下面的小文件
[root@oldboyedu59 ~]# ll -hd guoav/
drwxr-xr-x 2 root root 1.2M May 13 11:49 guoav/
目录的block的大小 block里面存放的是文件名
[root@oldboyedu59 ~]# dd if=/dev/zero of=/tmp/500m bs=1M count=500
500+0 records in
500+0 records out
524288000 bytes (524 MB) copied, 5.14645 s, 102 MB/s
[root@oldboyedu59 ~]# mkswap /tmp/500m
Setting up swapspace version 1, size = 511996 KiB
no label, UUID=6ba0befd-aeaf-4dd4-88b0-07cab2af6f61
[root@oldboyedu59 ~]# chmod 600 /tmp/500m
[root@oldboyedu59 ~]# swapon /tmp/500m
[root@oldboyedu59 ~]# free -h
total used free shared buff/cache available
Mem: 1.9G 204M 76M 2.3M 1.7G 1.5G
Swap: 1.5G 32M 1.5G
提示集合
1、Device does not contain a recognized partition table
设备 没有 包含 磁盘分区表。
Building a new DOS disklabel with disk identifier 0x6df46197.
DPT= disk partition table 磁盘分区表
2、Invalid partition type `e'
无效的分区类型“e”
3、mkfs.xfs /dev/sdb1
mkfs.xfs: /dev/sdb1 appears to contain an existing filesystem (ext4).
这个磁盘分区中 已经包含了1个文件系统(已经格式化过了)
mkfs.xfs: Use the -f option to force overwrite.
如果强制格式化使用-f
4、[root@cuihua ~]# mount /dev/sdb1 /mnt
mount: /dev/sdb1 is write-protected, mounting read-only
mount: unknown filesystem type '(null)'
未知的文件系统(没有格式化)
5、[root@guanggege ~]# mount /dev/sdb1 /mnt/
mount: special device /dev/sdb1 does not exist
特殊文件(设备文件) 不存在
6、[root@oldboyedu59 ~]# mkfs.xfs /dev/sdb1
mkfs.xfs: /dev/sdb1 contains a mounted filesystem
sdb1磁盘分区 包含 1个已经挂载的文件系统 (磁盘分区已经挂载)
Usage: mkfs.xfs
/* blocksize / [-b log=n|size=num]
/ metadata / [-m crc=0|1,finobt=0|1,uuid=xxx]
/ data subvol / [-d agcount=n,agsize=n,file,name=xxx,size=num,
(sunit=value,swidth=value|su=num,sw=num|noalign),
sectlog=n|sectsize=num
/ force overwrite / [-f]
/ inode size / [-i log=n|perblock=n|size=num,maxpct=n,attr=0|1|2,
projid32bit=0|1]
/ no discard / [-K]
/ log subvol / [-l agnum=n,internal,size=num,logdev=xxx,version=n
sunit=value|su=num,sectlog=n|sectsize=num,
lazy-count=0|1]
/ label / [-L label (maximum 12 characters)]
/ naming / [-n log=n|size=num,version=2|ci,ftype=0|1]
/ no-op info only / [-N]
/ prototype file / [-p fname]
/ quiet / [-q]
/ realtime subvol / [-r extsize=num,size=num,rtdev=xxx]
/ sectorsize / [-s log=n|size=num]
/ version */ [-V]
devicename
xxxm (xxx MiB), xxxg (xxx GiB), xxxt (xxx TiB) or xxxp (xxx PiB).
[root@oldboy ~]# mkfs.xfs /dev/sdb1 -f
agsize (2560 blocks) too small, need at least 4096 blocks
磁盘分区太小了 无法格式化
Usage: mkfs.xfs
[root@oldboyedu ~]# mount /dev/sdb1 /mnt/
mount: /dev/sdb1 is already mounted or /mnt busy
磁盘分区 已经 挂载或/mnt正在使用中
/dev/sdb1 is already mounted on /mnt
9、Changes will remain in memory only, until you decide to write them.
你进行的修改默认存放在内存中,直到你决定保存这些修改的时候.
:wq
Be careful before using the write command.
保存之前小心点!
10、Argument list too long
参数 列表过长 (命令后面的文件太多了)
[root@oldboyedu59 ~]# mkdir test
[root@oldboyedu59 ~]# touch test/{1..400000}
-bash: /usr/bin/touch: Argument list too long
[root@oldboyedu59 ~]# ls test/
[root@oldboyedu59 ~]# ls test/|wc -l
400000
11、/tmp/100k is not a block special device.
/tmp/100k不是块专用设备。
dd if=/dev/zero of=/tmp/100k bs=1k count=100
[root@oldboyedu59 ~]# file /tmp/100k
/tmp/100k: data
[root@oldboyedu59 ~]# mkfs.ext4 /tmp/100k
mke2fs 1.42.9 (28-Dec-2013)
/tmp/100k is not a block special device.
Proceed anyway? (y,n) y
12、No space left on device
设备上没有剩余空间
[root@oldboyedu59 /app/log]# touch oldboy{01..10}.txt
touch: cannot touch ‘oldboy06.txt’: No space left on device
13、Cannot allocate memory
无法分配内存
[root@oldboy ~]# echo test1/{0..500000000}
-bash: fork: Cannot allocate memory
yum 故障 Resource temporarily unavailable
资源暂时不可用
error: db5 error(11) from dbenv->open: Resource temporarily unavailable
error: cannot open Packages index using db5 - Resource temporarily unavailable (11)
error: cannot open Packages database in /var/lib/rpm
CRITICAL:yum.main:
- 原因 :
yum的数据库缓存没了 重新建立
解决:
rpmdb --rebuilddb
No space left on device 设备上没有剩余空间
[root@shenfan2hao1 ~]# yum install lsof -y
error: db5 error(28) from dbenv->open: No space left on device
error: cannot open Packages index using db5 - No space left on device (28)
error: cannot open Packages database in /var/lib/rpm
CRITICAL:yum.main:
Error: rpmdb open failed
Device or resource busy
设备正忙
这个文件正在使用中 已经挂载或激活
[root@oldedu59 ~]# ll /tmp/500m
-rw-r--r-- 1 root root 524288000 May 13 12:10 /tmp/500m
[root@oldedu59 ~]# swapon /tmp/500m
swapon: /tmp/500m: insecure permissions 0644, 0600 suggested.
[root@oldedu59 ~]# chmod 600 /tmp/500m
[root@oldedu59 ~]# swapon /tmp/500m
swapon: /tmp/500m: swapon failed: Device or resource busy
[root@oldboyedu59 ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda3 99G 4.2G 95G 5% /
devtmpfs 980M 0 980M 0% /dev
tmpfs 991M 0 991M 0% /dev/shm
tmpfs 991M 9.7M 981M 1% /run
tmpfs 991M 0 991M 0% /sys/fs/cgroup
/dev/sda1 197M 105M 93M 54% /boot
/dev/sdb1 98M 5.3M 93M 6% /data
tmpfs 199M 0 199M 0% /run/user/0
/dev/loop0 93K 14K 72K 17% /app/log
[root@oldboyedu59 ~]# mount /tmp/100k /app/log/
mount: /tmp/100k is already mounted
文件系统:
装修风格---决定房屋怎么住人
文件系统: 文件在磁盘中如何存放 存放规则
- 硬盘 ---->分区-------->格式化 创建文件系统----->挂载
划分隔断 装修 安装门窗
常见的文件系统:
CentOS 7 默认的文件系统xfs
CentOS 6 默认的文件系统ext4
CentOS 5 默认的文件系统ext3
交换分区 swap
内存文件系统 tmpfs 存放的数据是在内存中 用于加速或存放缓存
SUSE reiserFS
应用场景:
reiserfs大量小文件业务首选reiserfs(100K以内), 单独安装。
xfs有的门户的数据库MySQL业务会选择xfs。
ext4 视频下载,流媒体,数据库,小文件业务也OK,可以用默认的。
ext2 没有日志(不是messages cron secure),蓝汛、网宿的cache业务,CDN 网站加速服务的。
swap 交换分区 内存不足临时充当内存
tmpfs 用于加速或存放缓存
【面试题】计算机网络、运维网络、Linux网络
https://www.jianshu.com/p/fd8fd997760f
osi7层
三次握手 四次挥手
添加路由
wireshark 抓包
tcpdump
掩码计算 子网划分