Linux 文件管理(完成優先於完美)

一、描述 Linux 發行版的系統目錄名稱命名規則以及用途。node

文件和目錄被組織成一個單根倒置樹結構
文件系統從根目錄下開始,用「/」表示
路徑分隔的 /
文件名最長 255 個字節
包括路徑在內文件名稱最長 4095 個字節
除了斜槓和 NUL,全部字符都有效。但使用特殊字符的目錄名和文件不推薦使用,有些字符須要用引號來引用mysql

/boot:引導文件存放目錄,內核文件(vmlinuz)、引導加載器(bootloader,grub)都存放於此目錄
/bin:全部用戶使用的基本命令;不能關聯至獨立分區,OS 啓動即會用到的程序
/sbin:管理類的基本命令;不能關聯至獨立分區,OS 啓動即會用到的程序
/lib:啓動時程序依賴的基本共享庫文件以及內核模塊文件(/lib/modules)
/lib64:專用於 x86_64 系統上的輔助共享庫文件存放位置
/etc:配置文件目錄
/home/USERNAME:普通用戶家目錄
/root:管理員的家目錄
/media:便攜式移動設備掛載點
/mnt:臨時文件系統掛載點
/dev:設備文件及特殊文件存儲位置
b:block device,隨機訪問
c:character device,線性訪問
/opt:第三方應用程序安裝位置
/srv:系統上運行的服務用到的數據
/tmp:臨時文件存儲位置
/usr:universal shared, read-only data
bin:保證系統擁有完成功能而提供的應用程序
sbin:
lib:32 位使用
lib64:只存在 64 位系統
include:C 程序的頭文件(header files)
share:結構化獨立的數據,例如 doc、man 等
local:第三方應選用程序的安裝位置
bin,sbin,lib,lib64,etc,share
/var:variable data files
cache:應用程序緩存數據目錄
lib:應用程序狀態信息數據
local:專用於爲 /usr/loacl 下的應用程序存儲可變數據
lock:鎖文件
log:日誌目錄及文件
opt:專用於爲 /opt 下的應用程序存儲可變數據
run:運行中的進程相關數據,一般用於存儲進程 pid 文件
spool:應用程序數據池
tmp:保存系統兩次重啓之間產生的臨時數據
/proc:用於輸出內核與進程信息相關的虛擬文件系統
/sys:用於輸出當前系統上硬件設備相關信息虛擬文件系統
/selinux:security enhanced Linux,selinux 相關的安全策略等信息的存放位置linux

二、描述文件的元數據信息有哪些,分別表示什麼含義,如何查看?如何修改文件的時間戳信息?git

inode number 節點號、文件類型、權限、UID、GID、連接數(指向這個文件名路徑名稱個數)、改文件的大小和不一樣的時間戳、指向磁盤上文件的數據塊指針、有關文件的其餘數據sql

[root@centos8 ~]# stat /tmp/test.txt
File: /tmp/test.txt
Size: 0 Blocks: 0 IO Block: 4096 regular empty file
Device: 802h/2050d Inode: 1403409 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 1000/ wang) Gid: ( 0/ root)
Context: unconfined_u:object_r:user_tmp_t:s0
Access: 2020-10-06 18:51:36.000631508 +0800
Modify: 2020-10-06 18:48:36.833631914 +0800
Change: 2020-10-06 18:48:36.833631914 +0800
Birth: -shell

touch [OPTION]... FILE...
-a 僅改變 atime 和 ctime
-m 僅改變 mtime 和 ctime
-t [[CC]YY]MMDDhhmm[.ss] 指定 atime 和 mtime 的時間戳
-c 若是文件不存在,則不予建立vim

三、總結軟連接和硬連接區別,並用實例操做說明。windows

硬連接本質是同一個文件
軟連接本質是不一樣一個文件
硬連接不支持文件夾
軟連接:原始文件的相對路徑是相對於連接文件的相對路徑centos

[root@centos8 data]# ll
total 0
-rw-r--r--. 1 root root 0 Oct 7 15:34 file.txt
drwxr-xr-x. 2 root root 6 Oct 7 19:44 zhl
[root@centos8 data]# ln file.txt zhl/file.txt
[root@centos8 data]# ll file.txt zhl/file.txt
-rw-r--r--. 2 root root 0 Oct 7 15:34 file.txt(連接數變爲 2)
-rw-r--r--. 2 root root 0 Oct 7 15:34 zhl/file.txt
[root@centos8 data]# ll -i file.txt zhl/file.txt
132 -rw-r--r--. 2 root root 0 Oct 7 15:34 file.txt
132 -rw-r--r--. 2 root root 0 Oct 7 15:34 zhl/file.txt
[root@centos8 data]# rm file.txt
rm: remove regular empty file 'file.txt'? y
[root@centos8 data]# ll -i file.txt zhl/file.txt
ls: cannot access 'file.txt': No such file or directory
132 -rw-r--r--. 1 root root 0 Oct 7 15:34 zhl/file.txt(文件還能夠訪問,連接數減1,不依賴於原文件。刪文件,是指刪名)
硬連接不能跨文件系統(分區),本質是給一個文件起多個名。跨了分區,節點號有可能衝突
不容許給文件夾建立硬連接,避免存在嵌套的問題(文件夾套子文件,子文件又套自身,造成死循環)緩存

[root@centos8 zhl]# ln -s file.txt f1.txt
[root@centos8 zhl]# ll -i
total 0
134 lrwxrwxrwx. 1 root root 8 Oct 8 17:50 f1.txt -> file.txt
132 -rw-r--r--. 1 root root 0 Oct 7 15:34 file.txt
[root@centos8 zhl]# ln -s file.txt f2.txt
[root@centos8 zhl]# ll -i
total 0
134 lrwxrwxrwx. 1 root root 8 Oct 8 17:50 f1.txt -> file.txt(大小是連接的信息內容,8 個字符數)
135 lrwxrwxrwx. 1 root root 8 Oct 8 17:52 f2.txt -> file.txt
132 -rw-r--r--. 1 root root 0 Oct 7 15:34 file.txt(文件連接數沒變,節點號不同,是不一樣的文件。刪除文件,連接做廢)
root@centos8 data]# ln -s f1.txt dir1/f1.txt.link(此處繞,它認爲 f1.txt.link 和 f1.txt 在同一個目錄裏,現實卻不是。此時 f1.txt 的相對路徑應該是相對於軟連接 dir1/f1.txt.link 的相對路徑,而不是相對於 data 的。正確的應該是ln -s ../f1.txt dir1/f1.txt.link 。看這個「/data/dir1/f1.txt.link -> /data/f1.txt」,它是從前日後去找到你,因此你不能是相對的)
[root@centos8 data]# ll -i !*
ll -i -s f1.txt dir1/f1.txt.link
33555841 0 lrwxrwxrwx. 1 root root 6 Oct 8 18:07 dir1/f1.txt.link -> f1.txt(此時系統提示 f1.txt 不存在,閃亮。)
132 0 -rw-r--r--. 1 root root 0 Oct 8 18:06 f1.txt
[root@centos8 data]# mkdir mysql5.6.10
[root@centos8 data]# ln -s mysql5.6.10/ mysql
[root@centos8 data]# ll -i
total 0
33555840 drwxr-xr-x. 2 root root 25 Oct 8 18:07 dir1
132 -rw-r--r--. 1 root root 0 Oct 8 18:06 f1.txt
133 lrwxrwxrwx. 1 root root 12 Oct 8 18:22 mysql -> mysql5.6.10/
67161792 drwxr-xr-x. 2 root root 6 Oct 8 18:21 mysql5.6.10
[root@centos8 data]# rm -f mysql
[root@centos8 data]# mkdir mysql5.6.11
[root@centos8 data]# ln -s mysql5.6.11/ mysql
[root@centos8 data]# ll -i
total 0
33555840 drwxr-xr-x. 2 root root 25 Oct 8 18:07 dir1
132 -rw-r--r--. 1 root root 0 Oct 8 18:06 f1.txt
133 lrwxrwxrwx. 1 root root 12 Oct 8 18:23 mysql -> mysql5.6.11/(軟件升級的方式)
67161792 drwxr-xr-x. 2 root root 6 Oct 8 18:21 mysql5.6.10
100664640 drwxr-xr-x. 2 root root 6 Oct 8 18:22 mysql5.6.11
[root@centos8 data]# rm -rf mysql/(多 / 會刪文件,沒有 / 只是刪軟連接。多 / 表明進入了,場景變了)(基礎不牢,地動山搖。弄清楚區別)

[root@centos8 data]# ll
total 0
drwxr-xr-x. 2 root root 25 Oct 8 18:07 dir1(天生就是 2,. 用的與其相同的節點編號。能不能變成 3 呢?能夠,建個子目錄,子目錄的..就是它了,因此能夠是 3。以此類推)

四、Linux 上的文件管理類命令都有哪些,其經常使用的使用方法及其相關示例演示。

pwd

cd
-P:切換至物理路徑
echo $PWD
echo $OLDPWD

ls
-a
-l
-R:目錄遞歸
-ld:目錄、符號連接
-1
-S:大到小
-t:mtime
-u:配合 -t,atime
-U
-X
/etc/DIR_COLORS
LS_COLORS
[root@centos8 ~]# ls /boot
System.map-4.18.0-147.el8.x86_64 initramfs-4.18.0-147.el8.x86_64.img
config-4.18.0-147.el8.x86_64 loader
efi lost+found
grub2 vmlinuz-0-rescue-7650fa24cc7e4d12acb58cba4449720f
initramfs-0-rescue-7650fa24cc7e4d12acb58cba4449720f.img vmlinuz-4.18.0-147.el8.x86_64
[root@centos8 ~]# ls -R /boot
[root@centos8 ~]# ls -ld /boot
dr-xr-xr-x. 6 root root 4096 Oct 1 19:46 /boot
mtime(modify) ctime(change) atime(access)
[root@centos8 ~]# ll /tmp/test.txt
-rw-r--r--. 1 root root 5 Oct 3 16:01 /tmp/test.txt
[root@centos8 ~]# ll --time=ctime /tmp/test.txt
-rw-r--r--. 1 root root 5 Oct 3 16:01 /tmp/test.txt
[root@centos8 ~]# ll --time=atime /tmp/test.txt
-rw-r--r--. 1 root root 5 Oct 3 16:02 /tmp/test.txt
[root@centos8 ~]# chown wang /tmp/test.txt
[root@centos8 ~]# ll /tmp/test.txt
-rw-r--r--. 1 wang root 5 Oct 3 16:01 /tmp/test.txt
[root@centos8 ~]# ll --time=ctime /tmp/test.txt
-rw-r--r--. 1 wang root 5 Oct 6 18:47 /tmp/test.txt
[root@centos8 ~]# ll --time=atime /tmp/test.txt
-rw-r--r--. 1 wang root 5 Oct 3 16:02 /tmp/test.txt
[root@centos8 ~]# > /tmp/test.txt
[root@centos8 ~]# ll /tmp/test.txt
-rw-r--r--. 1 wang root 0 Oct 6 18:48 /tmp/test.txt
[root@centos8 ~]# ll --time=ctime /tmp/test.txt
-rw-r--r--. 1 wang root 0 Oct 6 18:48 /tmp/test.txt
[root@centos8 ~]# ll --time=atime /tmp/test.txt
-rw-r--r--. 1 wang root 0 Oct 3 16:02 /tmp/test.txt
[root@centos8 ~]# cat /tmp/test.txt
[root@centos8 ~]# ll --time=atime /tmp/test.txt
-rw-r--r--. 1 wang root 0 Oct 6 18:51 /tmp/test.txt

stat
[root@centos8 ~]# stat /tmp/test.txt
File: /tmp/test.txt
Size: 0 Blocks: 0 IO Block: 4096 regular empty file
Device: 802h/2050d Inode: 1403409 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 1000/ wang) Gid: ( 0/ root)
Context: unconfined_u:object_r:user_tmp_t:s0
Access: 2020-10-06 18:51:36.000631508 +0800
Modify: 2020-10-06 18:48:36.833631914 +0800
Change: 2020-10-06 18:48:36.833631914 +0800
Birth: -

file
magic number
[root@centos8 ~]# file /etc
/etc: directory
[root@centos8 ~]# file /boot/vmlinuz-4.18.0-147.el8.x86_64
/boot/vmlinuz-4.18.0-147.el8.x86_64: Linux kernel x86 boot executable bzImage, version 4.18.0-147.el8.x86_64 (mockbuild@kbuilder.bsys.centos.org) #1 SMP Wed Dec 4 21:51:45 UTC 2019, RO-rootFS, swap_dev 0x7, Normal VGA
[root@centos8 ~]# which file
/usr/bin/file
[root@centos8 ~]# file /usr/bin/file
/usr/bin/file: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 3.2.0, BuildID[sha1]=1aaef7e4e7e253a9191d2e7e43d5e7dd8c8ab1e8, stripped
[root@centos8 ~]# file /dev/zero
/dev/zero: character special (1/5)
[root@centos8 ~]# file /dev/sda
/dev/sda: block special (8/0)
[root@centos8 ~]# file /run/autofs.fifo-net
/run/autofs.fifo-net: fifo (named pipe)
[root@centos8 ~]# hexdump -C /tmp/test.txt(區分 Linux、Windows 文件)
Linux 回車換行(繼承 Unix,存儲節約空間,沒了回車字符)
Windows 寫的文件,在 Linux 中有回車也有換行
[root@centos8 ~]# dnf -y install dos2unix
Last metadata expiration check: 0:01:09 ago on Tue 06 Oct 2020 10:47:47 PM CST.
Package dos2unix-7.4.0-3.el8.x86_64 is already installed.
Dependencies resolved.
Nothing to do.
Complete!
[root@centos8 ~]# dos2unix win.txt
[root@centos8 ~]# file win.txt
[root@centos8 ~]# hexdump -C win.txt
[root@centos8 ~]# unix2dos linux.txt
早期 Windows 用的 ANSI 字符集,不是 UTF-8,傳到 Linux 中查看不了,編碼機制不同,Linux 用的 UTF-8。
解決辦法,在 Windows 上把文件另存爲 Unicode,而後傳入 Linux 可查看,大小比 ANSI 的大。
[root@centos8 ~]# iconv -l
[root@centos8 ~]# file windows.txt
[root@centos8 ~]# iconv -f gb2312 windows.txt -o windows1.txt
[root@centos8 ~]# iconv -f utf8 -t gb2312 windows1.txt -o windows11.txt(轉換編碼機制)

touch
-a
-m
-t
-c
[root@centos8 ~]# ll /etc/issue
-rw-r--r--. 1 root root 23 Jan 2 2020 /etc/issue
[root@centos8 ~]# touch /etc/issue
[root@centos8 ~]# stat /etc/issue
File: /etc/issue
Size: 23 Blocks: 8 IO Block: 4096 regular file
Device: 802h/2050d Inode: 134341451 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Context: system_u:object_r:etc_t:s0
Access: 2020-10-07 09:23:55.889008789 +0800
Modify: 2020-10-07 09:23:55.889008789 +0800
Change: 2020-10-07 09:23:55.889008789 +0800
Birth: -

cp
-i
-n
-r,-R
-d
cp -p(保留權限、全部者、時間戳)
cp -r
拷貝的快捷方式,目標是文件
cp -d不復制原文件,只複製連接名
cp -a(經常使用於備份,保留全部內容,包含r)
cp -av(v 顯示進程)
cp -f(普通用戶在本身家裏,能夠刪除 root 的文件,此處跟權限有關。先刪後拷。if an existing destination file cannot be opened, remove it and try again (this option is ignored when the -n option is also used))
cp -u(防止覆蓋新文件)
cp -b
cp -a(普通用戶拷貝別人的文件時,屬性是本身,沒有保留別人,這是合乎邏輯的)
[root@centos8 data]# cp /etc/issue ./issue.bak
[root@centos8 data]# ll !*
ll /etc/issue ./issue.bak
-rw-r--r--. 1 root root 23 Oct 7 09:23 /etc/issue
-rw-r--r--. 1 root root 23 Oct 7 10:07 ./issue.bak
[root@centos8 data]# cat /etc/issue
\S
Kernel \r on an \m

[root@centos8 data]# cat issue.bak
\S
Kernel \r on an \m

[root@centos8 data]# alias cp(root cp 是別名,別的用戶不是)
alias cp='cp -i'
[root@centos8 data]# cp --backup=numbered /etc/passwd f1.txt
[root@centos8 data]# ll
total 4
-rw-r--r--. 1 root root 2424 Oct 7 10:38 f1.txt
[root@centos8 data]# cp --backup=numbered /etc/passwd f1.txt
cp: overwrite 'f1.txt'? y
[root@centos8 data]# ll
total 8
-rw-r--r--. 1 root root 2424 Oct 7 10:38 f1.txt
-rw-r--r--. 1 root root 2424 Oct 7 10:38 f1.txt.~1~
[root@centos8 data]# cp --backup=numbered /etc/passwd f1.txt(先用過 --backup 後,-b 就用這種模式了)
cp: overwrite 'f1.txt'? y
[root@centos8 data]# ll
total 12
-rw-r--r--. 1 root root 2424 Oct 7 10:38 f1.txt
-rw-r--r--. 1 root root 2424 Oct 7 10:38 f1.txt.~1~
-rw-r--r--. 1 root root 2424 Oct 7 10:38 f1.txt.~2~
[root@centos8 data]# cp -r /etc/ /data/etcbackup
[root@centos8 data]# ll
total 12
drwxr-xr-x. 136 root root 8192 Oct 7 10:48 etcbackup
[root@centos8 data]# cp -r /etc/ /data/etcbackup
[root@centos8 data]# ll
total 12
drwxr-xr-x. 137 root root 8192 Oct 7 10:48 etcbackup
[root@centos8 data]# ls -d ./etcbackup/etc
./etcbackup/etc
[root@centos8 data]# cp -r /etc/ /data/etcbackup
cp: overwrite '/data/etcbackup/etc/xdg/menus/applications.menu'? y
[root@centos8 data]# ll /dev/zero
crw-rw-rw-. 1 root root 1, 5 Oct 6 10:17 /dev/zero
[root@centos8 data]# cp /dev/zero zero.bak
^C
[root@centos8 data]# ll !
ll /dev/zero zero.bak
crw-rw-rw-. 1 root root 1, 5 Oct 6 10:17 /dev/zero
-rw-r--r--. 1 root root 415825920 Oct 7 11:05 zero.bak
[root@centos8 data]# ll -h
total 397M
-rw-r--r--. 1 root root 397M Oct 7 11:05 zero.bak
[root@centos8 data]# hexdump -C zero.bak
00000000 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|

18c90000
[root@centos8 data]# rm -f zero.bak
[root@centos8 data]# cp -a /dev/zero zero.bak
[root@centos8 data]# ll
total 0
crw-rw-rw-. 1 root root 1, 5 Oct 6 10:17 zero.bak
[root@centos8 data]# cp -p /dev/zero zero.bak2
^C
[root@centos8 data]# ll
total 527800
crw-rw-rw-. 1 root root 1, 5 Oct 6 10:17 zero.bak
-rw-------. 1 root root 540467200 Oct 7 11:07 zero.bak2

mv
-i
-f
-b
[root@centos8 ~]# alias mv(root 下也是別名)
alias mv='mv -i'
[root@centos8 data]# touch file{1..10}.conf
[root@centos8 data]# ll
total 0
-rw-r--r--. 1 root root 0 Oct 7 12:31 file10.conf
-rw-r--r--. 1 root root 0 Oct 7 12:31 file1.conf
-rw-r--r--. 1 root root 0 Oct 7 12:31 file2.conf
-rw-r--r--. 1 root root 0 Oct 7 12:31 file3.conf
-rw-r--r--. 1 root root 0 Oct 7 12:31 file4.conf
-rw-r--r--. 1 root root 0 Oct 7 12:31 file5.conf
-rw-r--r--. 1 root root 0 Oct 7 12:31 file6.conf
-rw-r--r--. 1 root root 0 Oct 7 12:31 file7.conf
-rw-r--r--. 1 root root 0 Oct 7 12:31 file8.conf
-rw-r--r--. 1 root root 0 Oct 7 12:31 file9.conf
[root@centos8 data]# rename conf conf.bak
[root@centos8 data]# ll
total 0
-rw-r--r--. 1 root root 0 Oct 7 12:31 file10.conf.bak
-rw-r--r--. 1 root root 0 Oct 7 12:31 file1.conf.bak
-rw-r--r--. 1 root root 0 Oct 7 12:31 file2.conf.bak
-rw-r--r--. 1 root root 0 Oct 7 12:31 file3.conf.bak
-rw-r--r--. 1 root root 0 Oct 7 12:31 file4.conf.bak
-rw-r--r--. 1 root root 0 Oct 7 12:31 file5.conf.bak
-rw-r--r--. 1 root root 0 Oct 7 12:31 file6.conf.bak
-rw-r--r--. 1 root root 0 Oct 7 12:31 file7.conf.bak
-rw-r--r--. 1 root root 0 Oct 7 12:31 file8.conf.bak
-rw-r--r--. 1 root root 0 Oct 7 12:31 file9.conf.bak
[root@centos8 data]# rename .bak ''

[root@centos8 data]# ll
total 0
-rw-r--r--. 1 root root 0 Oct 7 12:31 file10.conf
-rw-r--r--. 1 root root 0 Oct 7 12:31 file1.conf
-rw-r--r--. 1 root root 0 Oct 7 12:31 file2.conf
-rw-r--r--. 1 root root 0 Oct 7 12:31 file3.conf
-rw-r--r--. 1 root root 0 Oct 7 12:31 file4.conf
-rw-r--r--. 1 root root 0 Oct 7 12:31 file5.conf
-rw-r--r--. 1 root root 0 Oct 7 12:31 file6.conf
-rw-r--r--. 1 root root 0 Oct 7 12:31 file7.conf
-rw-r--r--. 1 root root 0 Oct 7 12:31 file8.conf
-rw-r--r--. 1 root root 0 Oct 7 12:31 file9.conf

rm
[root@centos8 data]# alias rm
alias rm='rm -i'
[root@centos8 data]# rm file2.conf
rm: remove regular empty file 'file2.conf'? y
[root@centos8 data]# \rm file3.conf
[root@centos8 data]# rm -f file4.conf
[root@centos8 data]# ls -a
. .. file10.conf file1.conf file5.conf file6.conf file7.conf file8.conf file9.conf .txt
[root@centos8 data]# rm -rf *
[root@centos8 data]# ls -a
. .. .txt
[root@centos8 data]# cp -av . /opt/
思考:將 rm 定義成 mv 的別名,實現 rm file = mv file /tmp

tree
-d
-L
-P
[root@centos8 ~]# tree
.
├── anaconda-ks.cfg
├── Desktop
├── Documents
├── Downloads
├── initial-setup-ks.cfg
├── Music
├── Pictures
├── Public
├── Templates
└── Videos

8 directories, 2 files
[root@centos8 ~]# tree -d /etc/sysconfig/
/etc/sysconfig/
├── cbq
├── console
├── modules
├── network-scripts
└── rhn
├── allowed-actions
│ ├── configfiles
│ └── script
└── clientCaps.d

9 directories

mkdir
mkdir -p

rmdir

ln
[root@centos8 data]# ll
total 0
-rw-r--r--. 1 root root 0 Oct 7 15:34 file.txt
drwxr-xr-x. 2 root root 6 Oct 7 19:44 zhl
[root@centos8 data]# ln file.txt zhl/file.txt
[root@centos8 data]# ll
total 0
-rw-r--r--. 2 root root 0 Oct 7 15:34 file.txt
drwxr-xr-x. 2 root root 22 Oct 7 19:44 zhl
[root@centos8 data]# ll file.txt zhl/file.txt
-rw-r--r--. 2 root root 0 Oct 7 15:34 file.txt(連接數變爲 2)
-rw-r--r--. 2 root root 0 Oct 7 15:34 zhl/file.txt
[root@centos8 data]# ll -i file.txt zhl/file.txt
132 -rw-r--r--. 2 root root 0 Oct 7 15:34 file.txt
132 -rw-r--r--. 2 root root 0 Oct 7 15:34 zhl/file.txt
[root@centos8 data]# rm file.txt
rm: remove regular empty file 'file.txt'? y
[root@centos8 data]# ll -i file.txt zhl/file.txt
ls: cannot access 'file.txt': No such file or directory
132 -rw-r--r--. 1 root root 0 Oct 7 15:34 zhl/file.txt(文件還能夠訪問,連接數減 1,不依賴於原文件。刪文件,是指刪名)
硬連接不能跨文件系統(分區),本質是給一個文件起多個名。跨了分區,節點號有可能衝突
不容許給文件夾建立硬連接,避免存在嵌套的問題(文件夾套子文件,子文件又套自身,造成死循環)
[root@centos8 zhl]# ln -s file.txt f1.txt
[root@centos8 zhl]# ll -i
total 0
134 lrwxrwxrwx. 1 root root 8 Oct 8 17:50 f1.txt -> file.txt()
132 -rw-r--r--. 1 root root 0 Oct 7 15:34 file.txt
[root@centos8 zhl]# ln -s file.txt f2.txt
[root@centos8 zhl]# ll -i
total 0
134 lrwxrwxrwx. 1 root root 8 Oct 8 17:50 f1.txt -> file.txt(大小是連接的信息內容,8 個字符數)
135 lrwxrwxrwx. 1 root root 8 Oct 8 17:52 f2.txt -> file.txt
132 -rw-r--r--. 1 root root 0 Oct 7 15:34 file.txt(文件連接數沒變,節點號不同,是不一樣的文件。刪除文件,連接做廢)
[root@centos8 zhl]#
root@centos8 data]# ln -s f1.txt dir1/f1.txt.link(此處繞,它認爲 f1.txt.link 和 f1.txt 在同一個目錄裏,現實卻不是。此時 f1.txt 的相對路徑應該是相對於軟連接 dir1/f1.txt.link 的相對路徑,而不是相對於 data 的。正確的應該是 ln -s ../f1.txt dir1/f1.txt.link。看這個「/data/dir1/f1.txt.link -> /data/f1.txt」,它是從前日後去找到你,因此你不能是相對的)
[root@centos8 data]# ll -i !*
ll -i -s f1.txt dir1/f1.txt.link
33555841 0 lrwxrwxrwx. 1 root root 6 Oct 8 18:07 dir1/f1.txt.link -> f1.txt(此時系統提示 f1.txt 不存在,閃亮。)
132 0 -rw-r--r--. 1 root root 0 Oct 8 18:06 f1.txt
[root@centos8 data]# mkdir mysql5.6.10
[root@centos8 data]# ln -s mysql5.6.10/ mysql
[root@centos8 data]# ll -i
total 0
33555840 drwxr-xr-x. 2 root root 25 Oct 8 18:07 dir1
132 -rw-r--r--. 1 root root 0 Oct 8 18:06 f1.txt
133 lrwxrwxrwx. 1 root root 12 Oct 8 18:22 mysql -> mysql5.6.10/
67161792 drwxr-xr-x. 2 root root 6 Oct 8 18:21 mysql5.6.10
[root@centos8 data]# rm -f mysql
[root@centos8 data]# mkdir mysql5.6.11
[root@centos8 data]# ln -s mysql5.6.11/ mysql
[root@centos8 data]# ll -i
total 0
33555840 drwxr-xr-x. 2 root root 25 Oct 8 18:07 dir1
132 -rw-r--r--. 1 root root 0 Oct 8 18:06 f1.txt
133 lrwxrwxrwx. 1 root root 12 Oct 8 18:23 mysql -> mysql5.6.11/(軟件升級的方式)
67161792 drwxr-xr-x. 2 root root 6 Oct 8 18:21 mysql5.6.10
100664640 drwxr-xr-x. 2 root root 6 Oct 8 18:22 mysql5.6.11
[root@centos8 data]# rm -rf mysql/(多 / 會刪文件,沒有 / 只是刪軟連接。多 / 表明進入了,場景變了)(基礎不牢,地動山搖。弄清楚區別)

五、複製 /etc/profile 至 /tmp/ 目錄,用查找替換命令刪除 /tmp/profile 文件中的行首的空白字符

[root@centos8 ~]# cp /etc/profile /tmp/
[root@centos8 ~]# vim /tmp/profile
:%s@^[[:blank:]]+@@g

六、在 vim 中設置 tab 縮進爲 4 個字符

:set tabstop=4

文件管理
內容概述
1 文件系統目錄結構

bin 二進制文件
bin -> usr/bin
boot 啓動內核
[root@centos8 ~]# systemctl status autofs
Unit autofs.service could not be found.
[root@centos8 ~]# yum -y install autofs
[root@centos8 ~]# systemctl start autofs
[root@centos8 ~]# systemctl status autofs
● autofs.service - Automounts filesystems on demand
Loaded: loaded (/usr/lib/systemd/system/autofs.service; disabled; vendor preset: disabled)
Active: active (running) since Tue 2020-10-06 15:49:17 CST; 7s ago
Main PID: 5181 (automount)
Tasks: 5 (limit: 12364)
Memory: 2.7M
CGroup: /system.slice/autofs.service
└─5181 /usr/sbin/automount --systemd-service --dont-check-daemon

Oct 06 15:49:17 centos8.magedu.org systemd[1]: Starting Automounts filesystems on demand...
Oct 06 15:49:17 centos8.magedu.org automount[5181]: setautomntent: lookup(sss): setautomntent: No such file or d>
Oct 06 15:49:17 centos8.magedu.org automount[5181]: setautomntent: lookup(sss): setautomntent: No such file or d>
Oct 06 15:49:17 centos8.magedu.org automount[5181]: setautomntent: lookup(sss): setautomntent: No such file or d>
Oct 06 15:49:17 centos8.magedu.org systemd[1]: Started Automounts filesystems on demand.
[root@centos8 ~]# ll / | grep misc
drwxr-xr-x. 2 root root 0 Oct 6 15:49 misc
[root@centos8 ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 200G 0 disk
|-sda1 8:1 0 1G 0 part /boot
|-sda2 8:2 0 100G 0 part /
|-sda3 8:3 0 50G 0 part /data
|-sda4 8:4 0 1K 0 part
-sda5 8:5 0 4G 0 part [SWAP]<br/>sr0 11:0 1 7G 0 rom<br/>[root@centos8 ~]# cd /misc/cd<br/>[root@centos8 cd]# lsblk<br/>NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT<br/>sda 8:0 0 200G 0 disk<br/>|-sda1 8:1 0 1G 0 part /boot<br/>|-sda2 8:2 0 100G 0 part /<br/>|-sda3 8:3 0 50G 0 part /data<br/>|-sda4 8:4 0 1K 0 part<br/>-sda5 8:5 0 4G 0 part [SWAP]
sr0 11:0 1 7G 0 rom /misc/cd
[root@centos8 cd]# systemctl enable autofs(使下次開機可使用 autofs)
opt 第三方軟件
proc 對應內存數據
run 正在用的程序文件
sbin 系統管理員用的可執行文件
var 可變數據,日誌等

1.1 文件系統的目錄結構

文件名稱大小寫敏感
文件名最長 255 個字節
包括路徑在內文件名稱最長 4095 個字節
文件色彩標識慢慢適應
不使用特殊字符來命名
ext4
[root@centos8 ~]# ll /etc/DIR_COLORS
-rw-r--r--. 1 root root 4536 May 12 2019 /etc/DIR_COLORS
元數據 metadata:數據的屬性
數據 data:數據自己,內容

1.2 常見的文件系統目錄功能

/boot:引導文件存放目錄,內核文件(vmlinuz)、引導加載器(bootloader,grub)
/bin:全部用戶使用的基本命令;不能關聯至獨立分區,OS 啓動即用
/sbin:管理類的基本命令;不能關聯至獨立分區,OS 啓動即用
/lib
/lib64
/etc:配置文件目錄
/home/USERNAME
/root
/media
/mnt
/dev:b 隨機訪問、c 線性訪問
/opt:第三方應用程序安裝位置
/srv:系統運行的服務用的數據
/tmp
/usr:universal shared, read-only data
/var
/proc:內核與進程虛擬文件
/sys:硬件設備虛擬文件
/selinux

1.3 應用程序的組成部分

二進制程序:bin、sbin
庫文件:lib、lib64
配置文件:etc
幫助文件

1.4 CentOS 7 之後版本目錄結構變化

[root@centos8 ~]# ll /bin /sbin /lib /lib64
lrwxrwxrwx. 1 root root 7 May 11 2019 /bin -> usr/bin
lrwxrwxrwx. 1 root root 7 May 11 2019 /lib -> usr/lib
lrwxrwxrwx. 1 root root 9 May 11 2019 /lib64 -> usr/lib64
lrwxrwxrwx. 1 root root 8 May 11 2019 /sbin -> usr/sbin

1.5 Linux 下的文件類型

c 字符文件,邏輯設備文件,一個字符一個字符寫,順序寫
b 塊文件,以塊的方式讀寫,有大小的容器,容量,例如磁盤,有緩存空間,隨機寫
p 管道文件,兩個應用程序互聯互通,單項傳輸(網絡的單工)
l 連接文件
s 套接字文件,網絡服務,雙向的(雙工)
[root@centos8 ~]# ll /dev/zero
crw-rw-rw-. 1 root root 1, 5 Oct 6 10:17 /dev/zero
[root@centos8 ~]# dd if=/dev/zero of=f2.txt bs=1 count=1(if=input file,of=output file)

2 文件操做命令
2.1 顯示當前工做目錄

所在目錄 dirname
文件名 basename
[root@centos8 ~]# type dirname
dirname is /usr/bin/dirname
[root@centos8 ~]# type basename
basename is /usr/bin/basename

2.2 絕對和相對路徑

相對路徑名通常指相對於當前工做目錄的路徑。有個特殊場景,是相對於某目錄的位置 ln
[root@centos8 ~]# ls /boot/vmlinuz-4.18.0-147.el8.x86_64
/boot/vmlinuz-4.18.0-147.el8.x86_64
[root@centos8 ~]# ll -h /boot/vmlinuz-4.18.0-147.el8.x86_64
-rwxr-xr-x. 1 root root 7.8M Dec 5 2019 /boot/vmlinuz-4.18.0-147.el8.x86_64
[root@centos8 ~]# echo $OLDPWD
/root

2.3 更改目錄

-P:切換至物理路徑
echo $PWD
echo $OLDPWD

2.4 列出目錄內容

-a
-l
-R:目錄遞歸
-ld:目錄、符號連接
-1
-S:大到小
-t:mtime
-u:配合 -t,atime
-U
-X
/etc/DIR_COLORS
LS_COLORS
[root@centos8 ~]# ls /boot
System.map-4.18.0-147.el8.x86_64 initramfs-4.18.0-147.el8.x86_64.img
config-4.18.0-147.el8.x86_64 loader
efi lost+found
grub2 vmlinuz-0-rescue-7650fa24cc7e4d12acb58cba4449720f
initramfs-0-rescue-7650fa24cc7e4d12acb58cba4449720f.img vmlinuz-4.18.0-147.el8.x86_64
[root@centos8 ~]# ls -R /boot
[root@centos8 ~]# ls -ld /boot
dr-xr-xr-x. 6 root root 4096 Oct 1 19:46 /boot
mtime(modify) ctime(change) atime(access)
[root@centos8 ~]# ll /tmp/test.txt
-rw-r--r--. 1 root root 5 Oct 3 16:01 /tmp/test.txt
[root@centos8 ~]# ll --time=ctime /tmp/test.txt
-rw-r--r--. 1 root root 5 Oct 3 16:01 /tmp/test.txt
[root@centos8 ~]# ll --time=atime /tmp/test.txt
-rw-r--r--. 1 root root 5 Oct 3 16:02 /tmp/test.txt
[root@centos8 ~]# chown wang /tmp/test.txt
[root@centos8 ~]# ll /tmp/test.txt
-rw-r--r--. 1 wang root 5 Oct 3 16:01 /tmp/test.txt
[root@centos8 ~]# ll --time=ctime /tmp/test.txt
-rw-r--r--. 1 wang root 5 Oct 6 18:47 /tmp/test.txt
[root@centos8 ~]# ll --time=atime /tmp/test.txt
-rw-r--r--. 1 wang root 5 Oct 3 16:02 /tmp/test.txt
[root@centos8 ~]# > /tmp/test.txt
[root@centos8 ~]# ll /tmp/test.txt
-rw-r--r--. 1 wang root 0 Oct 6 18:48 /tmp/test.txt
[root@centos8 ~]# ll --time=ctime /tmp/test.txt
-rw-r--r--. 1 wang root 0 Oct 6 18:48 /tmp/test.txt
[root@centos8 ~]# ll --time=atime /tmp/test.txt
-rw-r--r--. 1 wang root 0 Oct 3 16:02 /tmp/test.txt
[root@centos8 ~]# cat /tmp/test.txt
[root@centos8 ~]# ll --time=atime /tmp/test.txt
-rw-r--r--. 1 wang root 0 Oct 6 18:51 /tmp/test.txt

2.5 查看文件狀態 stat

atime 讀取文件內容
mtime 改變文件內容(數據)
ctime 元數據改變

[root@centos8 ~]# stat /tmp/test.txt
File: /tmp/test.txt
Size: 0 Blocks: 0 IO Block: 4096 regular empty file
Device: 802h/2050d Inode: 1403409 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 1000/ wang) Gid: ( 0/ root)
Context: unconfined_u:object_r:user_tmp_t:s0
Access: 2020-10-06 18:51:36.000631508 +0800
Modify: 2020-10-06 18:48:36.833631914 +0800
Change: 2020-10-06 18:48:36.833631914 +0800
Birth: -

2.6 肯定文件內容

magic number
[root@centos8 ~]# file /etc
/etc: directory
[root@centos8 ~]# file /boot/vmlinuz-4.18.0-147.el8.x86_64
/boot/vmlinuz-4.18.0-147.el8.x86_64: Linux kernel x86 boot executable bzImage, version 4.18.0-147.el8.x86_64 (mockbuild@kbuilder.bsys.centos.org) #1 SMP Wed Dec 4 21:51:45 UTC 2019, RO-rootFS, swap_dev 0x7, Normal VGA
[root@centos8 ~]# which file
/usr/bin/file
[root@centos8 ~]# file /usr/bin/file
/usr/bin/file: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 3.2.0, BuildID[sha1]=1aaef7e4e7e253a9191d2e7e43d5e7dd8c8ab1e8, stripped
[root@centos8 ~]# file /dev/zero
/dev/zero: character special (1/5)
[root@centos8 ~]# file /dev/sda
/dev/sda: block special (8/0)
[root@centos8 ~]# file /run/autofs.fifo-net
/run/autofs.fifo-net: fifo (named pipe)
[root@centos8 ~]# hexdump -C /tmp/test.txt(區分 Linux、Windows 文件)
Linux 回車換行(繼承 Unix,存儲節約空間,沒了回車字符)
Windows 寫的文件,在 Linux 中有回車也有換行
[root@centos8 ~]# dnf -y install dos2unix
Last metadata expiration check: 0:01:09 ago on Tue 06 Oct 2020 10:47:47 PM CST.
Package dos2unix-7.4.0-3.el8.x86_64 is already installed.
Dependencies resolved.
Nothing to do.
Complete!
[root@centos8 ~]# dos2unix win.txt
[root@centos8 ~]# file win.txt
[root@centos8 ~]# hexdump -C win.txt
[root@centos8 ~]# unix2dos linux.txt
早期 Windows 用的 ANSI 字符集,不是 UTF-8,傳到 Linux 中查看不了,編碼機制不同,Linux 用的 UTF-8。
解決辦法,在 Windows 上把文件另存爲 Unicode,而後傳入 Linux 可查看,大小比 ANSI 的大。
[root@centos8 ~]# iconv -l
[root@centos8 ~]# file windows.txt
[root@centos8 ~]# iconv -f gb2312 windows.txt -o windows1.txt
[root@centos8 ~]# iconv -f utf8 -t gb2312 windows1.txt -o windows11.txt(轉換編碼機制)

2.7 文件通配符模式 wildcard pattern

通配符采有特定的符號,表示特定的含義,此特符號稱爲元 meta 字符

  • 不匹配.開頭的文件,即隱藏文件
    ? 匹配任何單個字符
    ~
    ~mage
    ~+或 .
    ~-
    [0-9]
    [a-z]是小大小大的次序寫的,aA-z(沒有 Z)
    [:digit:]
    [:lower:]
    [:upper:]
    [:alpha:]
    [:alnum:]
    [:blank:]
    [:space:]
    [:punct:]
    [:print:]
    [:cntrl:]
    [:graph:]
    [:xdigit:]
    [root@centos8 data]# ls file[[:lower:]].txt([:lower:]表明 a-z,[[:lower:]]纔等於[a-z],表明取一個)
    [wang]四取一
    [^wang]除 wang 四個意外的
    特列:( 不包含隱藏文件)
    [root@centos8 data]# touch .txt
    [root@centos8 data]# ls
    .txt
    ls: cannot access '.txt': No such file or directory
    [root@centos8 data]# ls -a
    .txt
    ls: cannot access '.txt': No such file or directory
    [root@centos8 data]# ls -a
    . .. .txt
    [root@centos8 data]# ls

    ls: cannot access '': No such file or directory
    [root@centos8 data]# rm -f
    (不包括刪除隱藏文件)
    比較下
    [root@centos8 data]# ls -a
    [root@centos8 data]# ls -a
    [root@centos8 ~]# ls -d .
    (列出目錄自己的,不進去目錄)
    . .bash_history .bash_profile .cache .cshrc .esd_auth .local .tcshrc
    .. .bash_logout .bashrc .config .dbus .ICEauthority .pki .Xauthority
    [root@centos8 ~]# ls .*
    .bash_history .bash_logout .bash_profile .bashrc .cshrc .esd_auth .ICEauthority .tcshrc .Xauthority

.:
anaconda-ks.cfg Desktop Documents Downloads initial-setup-ks.cfg Music Pictures Public Templates Videos

..:
bin data etc lib media mnt opt root sbin sys usr
boot dev home lib64 misc net proc run srv tmp var

.cache:
dconf gnome-shell libgweather
event-sound-cache.tdb.7650fa24cc7e4d12acb58cba4449720f.x86_64-redhat-linux-gnu gnome-software tracker
evolution gstreamer-1.0 yelp

.config:
dconf gconf gnome-session gtk-3.0 pulse user-dirs.locale
evolution gnome-initial-setup-done goa-1.0 ibus user-dirs.dirs yelp

.dbus:
session-bus

.local:
share

.pki:
nssdb
[root@centos8 ~]# l.
. .bash_history .bash_profile .cache .cshrc .esd_auth .local .tcshrc
.. .bash_logout .bashrc .config .dbus .ICEauthority .pki .Xauthority
[root@centos8 ~]# ls -d .
. .bash_history .bash_profile .cache .cshrc .esd_auth .local .tcshrc
.. .bash_logout .bashrc .config .dbus .ICEauthority .pki .Xauthority
[root@centos8 ~]# alias l.
alias l.='ls -d .
--color=auto'
[root@centos8 ~]# ls -A
anaconda-ks.cfg .bash_profile .config Desktop .esd_auth .local .pki Templates
.bash_history .bashrc .cshrc Documents .ICEauthority Music Public Videos
.bash_logout .cache .dbus Downloads initial-setup-ks.cfg Pictures .tcshrc .Xauthority
[root@centos8 ~]# ls -d /(偏門小技巧,列文件夾待有 /)
Desktop/ Documents/ Downloads/ Music/ Pictures/ Public/ Templates/ Videos/
[root@centos8 data]# touch file[[:upper:]].txt(touch 建立不支持通配符,你讓它怎麼建。只能查看是在現有狀況下去匹配)
[root@centos8 data]# ll
total 0
-rw-r--r--. 1 root root 0 Oct 7 09:16 'file[[:upper:]].txt'
[root@centos8 data]# touch file
.log
[root@centos8 data]# ll
total 0
-rw-r--r--. 1 root root 0 Oct 7 09:17 'file*.log'(單引號去掉通配符功能)
-rw-r--r--. 1 root root 0 Oct 7 09:16 'file[[:upper:]].txt'
通配符是過濾現有文件的

2.8 建立空文件和刷新時間

-a
-m
-t
-c
[root@centos8 ~]# ll /etc/issue
-rw-r--r--. 1 root root 23 Jan 2 2020 /etc/issue
[root@centos8 ~]# touch /etc/issue
[root@centos8 ~]# stat /etc/issue
File: /etc/issue
Size: 23 Blocks: 8 IO Block: 4096 regular file
Device: 802h/2050d Inode: 134341451 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Context: system_u:object_r:etc_t:s0
Access: 2020-10-07 09:23:55.889008789 +0800
Modify: 2020-10-07 09:23:55.889008789 +0800
Change: 2020-10-07 09:23:55.889008789 +0800
Birth: -

2.9 複製文件和目錄

-i
-n
-r,-R
-d
cp -p(保留權限、全部者、時間戳)
cp -r
拷貝的快捷方式,目標是文件
cp -d 不復制原文件,只複製連接名
cp -a(經常使用於備份,保留全部內容,包含 r)
cp -av(v 顯示進程)
cp -f(普通用戶在本身家裏,能夠刪除 root 的文件,此處跟權限有關。先刪後拷。if an existing destination file cannot be opened, remove it and try again (this option is ignored when the -n option is also used))
cp -u(防止覆蓋新文件)
cp -b
cp -a(普通用戶拷貝別人的文件時,屬性是本身,沒有保留別人,這是合乎邏輯的)
[root@centos8 data]# cp /etc/issue ./issue.bak
[root@centos8 data]# ll !*
ll /etc/issue ./issue.bak
-rw-r--r--. 1 root root 23 Oct 7 09:23 /etc/issue
-rw-r--r--. 1 root root 23 Oct 7 10:07 ./issue.bak
[root@centos8 data]# cat /etc/issue
\S
Kernel \r on an \m

[root@centos8 data]# cat issue.bak
\S
Kernel \r on an \m

[root@centos8 data]# alias cp(root cp 是別名,別的用戶不是)
alias cp='cp -i'
[root@centos8 data]# cp --backup=numbered /etc/passwd f1.txt
[root@centos8 data]# ll
total 4
-rw-r--r--. 1 root root 2424 Oct 7 10:38 f1.txt
[root@centos8 data]# cp --backup=numbered /etc/passwd f1.txt
cp: overwrite 'f1.txt'? y
[root@centos8 data]# ll
total 8
-rw-r--r--. 1 root root 2424 Oct 7 10:38 f1.txt
-rw-r--r--. 1 root root 2424 Oct 7 10:38 f1.txt.~1~
[root@centos8 data]# cp --backup=numbered /etc/passwd f1.txt(先用過 --backup 後,-b 就用這種模式了)
cp: overwrite 'f1.txt'? y
[root@centos8 data]# ll
total 12
-rw-r--r--. 1 root root 2424 Oct 7 10:38 f1.txt
-rw-r--r--. 1 root root 2424 Oct 7 10:38 f1.txt.~1~
-rw-r--r--. 1 root root 2424 Oct 7 10:38 f1.txt.~2~
[root@centos8 data]# cp -r /etc/ /data/etcbackup
[root@centos8 data]# ll
total 12
drwxr-xr-x. 136 root root 8192 Oct 7 10:48 etcbackup
[root@centos8 data]# cp -r /etc/ /data/etcbackup
[root@centos8 data]# ll
total 12
drwxr-xr-x. 137 root root 8192 Oct 7 10:48 etcbackup
[root@centos8 data]# ls -d ./etcbackup/etc
./etcbackup/etc
[root@centos8 data]# cp -r /etc/ /data/etcbackup
cp: overwrite '/data/etcbackup/etc/xdg/menus/applications.menu'? y
[root@centos8 data]# ll /dev/zero
crw-rw-rw-. 1 root root 1, 5 Oct 6 10:17 /dev/zero
[root@centos8 data]# cp /dev/zero zero.bak
^C
[root@centos8 data]# ll !
ll /dev/zero zero.bak
crw-rw-rw-. 1 root root 1, 5 Oct 6 10:17 /dev/zero
-rw-r--r--. 1 root root 415825920 Oct 7 11:05 zero.bak
[root@centos8 data]# ll -h
total 397M
-rw-r--r--. 1 root root 397M Oct 7 11:05 zero.bak
[root@centos8 data]# hexdump -C zero.bak
00000000 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|

18c90000
[root@centos8 data]# rm -f zero.bak
[root@centos8 data]# cp -a /dev/zero zero.bak
[root@centos8 data]# ll
total 0
crw-rw-rw-. 1 root root 1, 5 Oct 6 10:17 zero.bak
[root@centos8 data]# cp -p /dev/zero zero.bak2
^C
[root@centos8 data]# ll
total 527800
crw-rw-rw-. 1 root root 1, 5 Oct 6 10:17 zero.bak
-rw-------. 1 root root 540467200 Oct 7 11:07 zero.bak2

2.10 移動和重命名文件

同一分區快
不一樣分區慢
-i
-f
-b
[root@centos8 ~]# alias mv(root 下也是別名)
alias mv='mv -i'
[root@centos8 data]# touch file{1..10}.conf
[root@centos8 data]# ll
total 0
-rw-r--r--. 1 root root 0 Oct 7 12:31 file10.conf
-rw-r--r--. 1 root root 0 Oct 7 12:31 file1.conf
-rw-r--r--. 1 root root 0 Oct 7 12:31 file2.conf
-rw-r--r--. 1 root root 0 Oct 7 12:31 file3.conf
-rw-r--r--. 1 root root 0 Oct 7 12:31 file4.conf
-rw-r--r--. 1 root root 0 Oct 7 12:31 file5.conf
-rw-r--r--. 1 root root 0 Oct 7 12:31 file6.conf
-rw-r--r--. 1 root root 0 Oct 7 12:31 file7.conf
-rw-r--r--. 1 root root 0 Oct 7 12:31 file8.conf
-rw-r--r--. 1 root root 0 Oct 7 12:31 file9.conf
[root@centos8 data]# rename conf conf.bak
[root@centos8 data]# ll
total 0
-rw-r--r--. 1 root root 0 Oct 7 12:31 file10.conf.bak
-rw-r--r--. 1 root root 0 Oct 7 12:31 file1.conf.bak
-rw-r--r--. 1 root root 0 Oct 7 12:31 file2.conf.bak
-rw-r--r--. 1 root root 0 Oct 7 12:31 file3.conf.bak
-rw-r--r--. 1 root root 0 Oct 7 12:31 file4.conf.bak
-rw-r--r--. 1 root root 0 Oct 7 12:31 file5.conf.bak
-rw-r--r--. 1 root root 0 Oct 7 12:31 file6.conf.bak
-rw-r--r--. 1 root root 0 Oct 7 12:31 file7.conf.bak
-rw-r--r--. 1 root root 0 Oct 7 12:31 file8.conf.bak
-rw-r--r--. 1 root root 0 Oct 7 12:31 file9.conf.bak
[root@centos8 data]# rename .bak ''

[root@centos8 data]# ll
total 0
-rw-r--r--. 1 root root 0 Oct 7 12:31 file10.conf
-rw-r--r--. 1 root root 0 Oct 7 12:31 file1.conf
-rw-r--r--. 1 root root 0 Oct 7 12:31 file2.conf
-rw-r--r--. 1 root root 0 Oct 7 12:31 file3.conf
-rw-r--r--. 1 root root 0 Oct 7 12:31 file4.conf
-rw-r--r--. 1 root root 0 Oct 7 12:31 file5.conf
-rw-r--r--. 1 root root 0 Oct 7 12:31 file6.conf
-rw-r--r--. 1 root root 0 Oct 7 12:31 file7.conf
-rw-r--r--. 1 root root 0 Oct 7 12:31 file8.conf
-rw-r--r--. 1 root root 0 Oct 7 12:31 file9.conf

2.11 刪除文件

shred
[root@centos8 data]# alias rm
alias rm='rm -i'
[root@centos8 data]# rm file2.conf
rm: remove regular empty file 'file2.conf'? y
[root@centos8 data]# \rm file3.conf
[root@centos8 data]# rm -f file4.conf
[root@centos8 data]# ls -a
. .. file10.conf file1.conf file5.conf file6.conf file7.conf file8.conf file9.conf .txt
[root@centos8 data]# rm -rf *
[root@centos8 data]# ls -a
. .. .txt
[root@centos8 data]# cp -av . /opt/
思考:將 rm 定義成 mv 的別名,實現 rm file = mv file /tmp

2.12 目錄操做
2.12.1 顯示目錄樹 tree

-d
-L
-P
[root@centos8 ~]# tree
.
├── anaconda-ks.cfg
├── Desktop
├── Documents
├── Downloads
├── initial-setup-ks.cfg
├── Music
├── Pictures
├── Public
├── Templates
└── Videos

8 directories, 2 files
[root@centos8 ~]# tree -d /etc/sysconfig/
/etc/sysconfig/
├── cbq
├── console
├── modules
├── network-scripts
└── rhn
├── allowed-actions
│ ├── configfiles
│ └── script
└── clientCaps.d

9 directories

2.12.2 建立目錄 mkdir

mkdir -p

2.12.3 刪除空目錄 rmdir

3 文件元數據和節點表結構

文件的元數據存放在 node(index node)表中
連接數(指向這個文件名路徑名稱個數)
通常 iNode 表會佔用文件系統磁盤空間的 1%
cp 和 inode:分配一個空閒的 inode 號,在 inode 表中生成新條目;在目錄中建立一個目錄項,將名稱與 iNode 編號關聯;拷貝數據生成新的文件
rm 和 inode:連接數遞減,從而釋放的 iNode 號能夠被重用;把數據塊放在空閒列表中;刪除目錄項;數據實際上不會立刻被刪除
mv 和 iNode:若是 mv 命令的目標和源在相同的文件系統,做爲 mv 命令,用新的文件名建立對應新的目錄項,刪除舊目錄條目對應的舊的文件名;不影響 iNode 表(除時間戳)或磁盤上的數據位置:沒有數據被移動!若是目標和源在不一樣的文件系統,mv 至關於 cp+rm
指向磁盤上文件的數據塊指針
直接指針 12 個,124K=48K
直接塊指針
間接塊指針:指向指針塊,一個指針佔 4 個字節,一個指針塊放 1024 個指針,4K
1024=4M
雙重間接塊指針:102410244K=4G
三重間接塊指針:4T
目錄:存放的文件列表和 iNode 對應關係
同一分區移動文件,文件的 iNode 號不變。移動到別的分區,文件 iNode 號變
每一個分區的節點編號是惟一的
[root@centos8 data]# stat file.txt
File: file.txt
Size: 0 Blocks: 0 IO Block: 4096 regular empty file
Device: 803h/2051d Inode: 132 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Context: unconfined_u:object_r:etc_runtime_t:s0
Access: 2020-10-07 15:34:18.780029999 +0800
Modify: 2020-10-07 15:34:18.780029999 +0800
Change: 2020-10-07 15:34:18.780029999 +0800
Birth: -
[root@centos8 data]# ls -i
132 file.txt
[root@centos8 data]# ll -i
total 0
132 -rw-r--r--. 1 root root 0 Oct 7 15:34 file.txt

3.1 inode 表結構

[root@centos8 data]# df -i
Filesystem Inodes IUsed IFree IUse% Mounted on
devtmpfs 247297 397 246900 1% /dev
tmpfs 251531 1 251530 1% /dev/shm
tmpfs 251531 681 250850 1% /run
tmpfs 251531 17 251514 1% /sys/fs/cgroup
/dev/sda2 52428800 119210 52309590 1% /
/dev/sda3 26214400 5 26214395 1% /data
/dev/sda1 65536 308 65228 1% /boot
tmpfs 251531 11 251520 1% /run/user/0

3.2 硬(hard)連接

硬連接的本質就是給文件起個新名,實質是同一文件。
建立硬連接會在對應的目錄增長額外記錄項以引用文件
每一個目錄引用相同的 iNode 號
建立時連接數遞增
不一樣分區的兩個不一樣文件,節點編號可能同樣
同一分區,兩個不一樣的文件,不能用相同的節點編號
同一個文件,不容許有多個不一樣的節點編號
[root@centos8 data]# ll
total 0
-rw-r--r--. 1 root root 0 Oct 7 15:34 file.txt
drwxr-xr-x. 2 root root 6 Oct 7 19:44 zhl
[root@centos8 data]# ln file.txt zhl/file.txt
[root@centos8 data]# ll
total 0
-rw-r--r--. 2 root root 0 Oct 7 15:34 file.txt
drwxr-xr-x. 2 root root 22 Oct 7 19:44 zhl
[root@centos8 data]# ll file.txt zhl/file.txt
-rw-r--r--. 2 root root 0 Oct 7 15:34 file.txt(連接數變爲 2)
-rw-r--r--. 2 root root 0 Oct 7 15:34 zhl/file.txt
[root@centos8 data]# ll -i file.txt zhl/file.txt
132 -rw-r--r--. 2 root root 0 Oct 7 15:34 file.txt
132 -rw-r--r--. 2 root root 0 Oct 7 15:34 zhl/file.txt
[root@centos8 data]# rm file.txt
rm: remove regular empty file 'file.txt'? y
[root@centos8 data]# ll -i file.txt zhl/file.txt
ls: cannot access 'file.txt': No such file or directory
132 -rw-r--r--. 1 root root 0 Oct 7 15:34 zhl/file.txt(文件還能夠訪問,連接數減 1,不依賴於原文件。刪文件,是指刪名)
硬連接不能誇文件系統(分區),本質是給一個文件起多個名。誇了分區,節點號有可能衝突
不容許給文件夾建立硬連接,避免存在嵌套的問題(文件夾套子文件,子文件又套自身,造成死循環)

drop 文件,就是在每一個數據塊上 mark free。drop 大文件的話,會瞬間產生大量 IO。有大量用戶正在訪問的話,就會出問題。
解決辦法
先建立個硬連接,數據有了兩個名
而後再 drop 文件,此時只是少了個名,空間還在用,就不會去 mark
系統空閒的時候,再清理文件
yum 安裝就是待兩次,第一次失敗,第二次正常

3.3 符號 symbolic(或軟 soft)連接

一個符號連接指向另外一個文件,就像 Windows 快捷方式,軟連接文件和原文件本質不是同一文件
一個符號連接的內容是它引用文件的名稱
指向的是另外一個文件的路徑;其大小爲指向的路徑字符串的長度;不增長或減小目標文件 iNode 的引用計數
軟連接若是使用相對路徑,是相對於原文件的路徑,而非相對於當前目錄
readlink
[root@centos8 zhl]# ln -s file.txt f1.txt
[root@centos8 zhl]# ll -i
total 0
134 lrwxrwxrwx. 1 root root 8 Oct 8 17:50 f1.txt -> file.txt()
132 -rw-r--r--. 1 root root 0 Oct 7 15:34 file.txt
[root@centos8 zhl]# ln -s file.txt f2.txt
[root@centos8 zhl]# ll -i
total 0
134 lrwxrwxrwx. 1 root root 8 Oct 8 17:50 f1.txt -> file.txt(大小是連接的信息內容,8 個字符數)
135 lrwxrwxrwx. 1 root root 8 Oct 8 17:52 f2.txt -> file.txt
132 -rw-r--r--. 1 root root 0 Oct 7 15:34 file.txt(文件連接數沒變,節點號不同,是不一樣的文件。刪除文件,連接做廢)
[root@centos8 zhl]#
root@centos8 data]# ln -s f1.txt dir1/f1.txt.link(此處繞,它認爲 f1.txt.link 和 f1.txt 在同一個目錄裏,現實卻不是。此時 f1.txt 的相對路徑應該是相對於軟連接 dir1/f1.txt.link 的相對路徑,而不是相對於 data 的。正確的應該是 ln -s ../f1.txt dir1/f1.txt.link。看這個「/data/dir1/f1.txt.link -> /data/f1.txt」,它是從前日後去找到你,因此你不能是相對的)
[root@centos8 data]# ll -i !*
ll -i -s f1.txt dir1/f1.txt.link
33555841 0 lrwxrwxrwx. 1 root root 6 Oct 8 18:07 dir1/f1.txt.link -> f1.txt(此時系統提示 f1.txt 不存在,閃亮。)
132 0 -rw-r--r--. 1 root root 0 Oct 8 18:06 f1.txt
[root@centos8 data]# mkdir mysql5.6.10
[root@centos8 data]# ln -s mysql5.6.10/ mysql
[root@centos8 data]# ll -i
total 0
33555840 drwxr-xr-x. 2 root root 25 Oct 8 18:07 dir1
132 -rw-r--r--. 1 root root 0 Oct 8 18:06 f1.txt
133 lrwxrwxrwx. 1 root root 12 Oct 8 18:22 mysql -> mysql5.6.10/
67161792 drwxr-xr-x. 2 root root 6 Oct 8 18:21 mysql5.6.10
[root@centos8 data]# rm -f mysql
[root@centos8 data]# mkdir mysql5.6.11
[root@centos8 data]# ln -s mysql5.6.11/ mysql
[root@centos8 data]# ll -i
total 0
33555840 drwxr-xr-x. 2 root root 25 Oct 8 18:07 dir1
132 -rw-r--r--. 1 root root 0 Oct 8 18:06 f1.txt
133 lrwxrwxrwx. 1 root root 12 Oct 8 18:23 mysql -> mysql5.6.11/(軟件升級的方式)
67161792 drwxr-xr-x. 2 root root 6 Oct 8 18:21 mysql5.6.10
100664640 drwxr-xr-x. 2 root root 6 Oct 8 18:22 mysql5.6.11
[root@centos8 data]# rm -rf mysql/(多 / 會刪文件,沒有 / 只是刪軟連接。多 / 表明進入了,場景變了)(基礎不牢,地動山搖。弄清楚區別)

3.4 硬連接和軟連接區別總結

硬連接本質是同一個文件
軟連接本質是不一樣一個文件
硬連接不支持文件夾
軟連接:原始文件的相對路徑是相對於連接文件的相對路徑
[root@centos8 data]# ll
total 0
drwxr-xr-x. 2 root root 25 Oct 8 18:07 dir1(天生就是 2,. 用的與其相同的節點編號。能不能變成 3 呢?能夠,建個子目錄,子目錄的 .. 就是它了,因此能夠是 3。以此類推)

3.5 生產案例
3.5.1 案例1:提示空間滿 No space left on device,但 df 能夠看到空間不少,爲何?

[root@centos8 testzhl]# df -i /boot
Filesystem Inodes IUsed IFree IUse% Mounted on
/dev/sda1 65536 309 65227 1% /boot
[root@centos8 testzhl]# touch file{1..65228}
touch: cannot touch 'file65228': No space left on device
[root@centos8 testzhl]# df -h /boot
Filesystem Size Used Avail Use% Mounted on
/dev/sda1 976M 125M 785M 14% /boot
[root@centos8 testzhl]#

3.5.2 案列2:提示空間快滿,使用 rm 刪除了很大的無用文件後,df 仍然看到空間不足,爲何?如何解決?

[root@centos8 testzhl]# df -h
Filesystem Size Used Avail Use% Mounted on
devtmpfs 967M 0 967M 0% /dev
tmpfs 983M 0 983M 0% /dev/shm
tmpfs 983M 9.1M 974M 1% /run
tmpfs 983M 0 983M 0% /sys/fs/cgroup
/dev/sda2 100G 4.8G 96G 5% /
/dev/sda3 50G 390M 50G 1% /data
/dev/sda1 976M 125M 785M 14% /boot
tmpfs 197M 4.0K 197M 1% /run/user/0
[root@centos8 testzhl]# dd if=/dev/zero of=/boot/testzhl/bigfile bs=1M count=700
700+0 records in
700+0 records out
734003200 bytes (734 MB, 700 MiB) copied, 2.49676 s, 294 MB/s
[root@centos8 testzhl]# df -h
Filesystem Size Used Avail Use% Mounted on
devtmpfs 967M 0 967M 0% /dev
tmpfs 983M 0 983M 0% /dev/shm
tmpfs 983M 9.1M 974M 1% /run
tmpfs 983M 0 983M 0% /sys/fs/cgroup
/dev/sda2 100G 4.8G 96G 5% /
/dev/sda3 50G 390M 50G 1% /data
/dev/sda1 976M 825M 85M 91% /boot
tmpfs 197M 4.0K 197M 1% /run/user/0
[root@centos8 testzhl]# vi /boot/testzhl/bigfile
[root@centos8 testzhl]# ll
total 716804
-rw-r--r--. 1 root root 734003200 Oct 7 18:10 bigfile
[root@centos8 testzhl]# rm bigfile
rm: remove regular file 'bigfile'? y
[root@centos8 testzhl]# du -h /boot
2.5M /boot/grub2/fonts
3.0M /boot/grub2/i386-pc
5.5M /boot/grub2
4.0K /boot/efi/EFI/centos
8.0K /boot/efi/EFI
12K /boot/efi
1.9M /boot/testzhl
16K /boot/lost+found
12K /boot/loader/entries
16K /boot/loader
122M /boot
[root@centos8 testzhl]# df -h /boot
Filesystem Size Used Avail Use% Mounted on
/dev/sda1 976M 825M 85M 91% /boot
[root@centos8 testzhl]# ls bigfile
ls: cannot access 'bigfile': No such file or directory
[root@centos8 testzhl]# lsof | grep delete | grep bigfile
vi 17008 root 5r REG 8,1 734003200 308 /boot/testzhl/bigfile (deleted)
[root@centos8 testzhl]#
退出
[root@centos8 testzhl]# df -h
Filesystem Size Used Avail Use% Mounted on
devtmpfs 967M 0 967M 0% /dev
tmpfs 983M 0 983M 0% /dev/shm
tmpfs 983M 9.1M 974M 1% /run
tmpfs 983M 0 983M 0% /sys/fs/cgroup
/dev/sda2 100G 4.8G 96G 5% /
/dev/sda3 50G 390M 50G 1% /data
/dev/sda1 976M 125M 785M 14% /boot
tmpfs 197M 4.0K 197M 1% /run/user/0
正確釋放大文件的步驟(不用 >,下面的辦法是通用辦法,> 有的 sh 不支持)
[root@centos8 testzhl]# cat /dev/null > /boot/testzhl/bigfile(先清,後刪。此法不影響應用程序,有些程序只是寫文件)
[root@centos8 testzhl]# rm -rf /boot/testzhl/bigfile
yum 安裝兩次 csh,第一次報錯,第二次成功,兩次安裝沒區別

已學:aliasbasenamebccalcat /ect/motd /etc/issuecdchownclearclockcpdatedddf -idirnamednfecho $PS1 $SHELLenableexitexportfilefreegedit 圖形化halthashhelphelphexdumphistoryhostname hostnamectliconvinfoinit 0 3 5 6lnlogoutlsblklscpulsofmanmandb mkwhatismkdir -pmvnano /etc/motdpoweroffps auxrebootrenamermrmdirrunlevelshredshutdownsleepsosreportsource = .sreenstatsudo -isystemctltmuxtouchtreettytypeunaliasuptimewhatiswhereiswhichwhoamiwho who am iyum

相關文章
相關標籤/搜索