2019-05-13 日课程总结

今日命令

  • 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
is required unless -d name=xxx is given.
is xxx (bytes), xxxs (sectors), xxxb (fs blocks), xxxk (xxx KiB),
xxxm (xxx MiB), xxxg (xxx GiB), xxxt (xxx TiB) or xxxp (xxx PiB).
is xxx (512 byte blocks).

  1. [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
掩码计算 子网划分

你可能感兴趣的:(2019-05-13 日课程总结)