Linux-文件管理
http://www.pathname.com/fhs
http://www.pathname.com/fhs/pub/fhs-2.3.pdf
包括
boot bin sbin etc lib64 tmp usr mnt media dev var home net misc srv proc sys root opt selinux
ldd /bin/ls 查看ls命令需要的依賴庫,一般在/lib64下
/misc目錄,CentOS 6自動有,cd /misc然後cd cd/可自動掛載光盤,不用登管理員帳戶
/proc 目錄裏的東西根本不在硬盤中,而是在內存中,所以ll查看文件大小為0
是個虛擬目錄,映射到內存
echo '- - -' > /sys/class/scsi_host/host2/scan 不重啟電腦的情況下識別新硬盤
ext4文件系統大小寫敏感,U盤的FAT32等文件系統大小寫不敏感
.開頭的是隱藏文件
文件有兩類數據:
元數據:metadata(ll看到的信息)
數據:data
各種文件的類型, vim /etc/DIR_COLORS可定制顏色
-:普通文件 白色
d: 目錄文件
b: 塊設備 ×××
c: 字符設備 ×××
l: 符號鏈接文件 淺藍色
p: 管道文件pipe 深×××
s: 套接字文件socket 紫色
可執行文件 綠色
壓縮包 紅色
某些文件名帶空格、橫杠等字符,要刪的話帶上路徑
如rm /root/-a
b塊設備,如/dev/sda
c字符設備,如/dev/zero
dd if=/dev/zero of=/data/bigfile bs=1M count=1024
ll -d /bin/ /usr/bin
ll -d /lib64 /usr/lib64
pwd -P 若進入鏈接目錄時顯示真實路徑
帶根/的是絕對路徑,不帶根/的是相對路徑
basename 文件本身的名稱,不帶目錄
cd ~ 進入當前用戶的家目錄
cd 進入當前用戶的家目錄
cd ~qjy 進某個人的家目錄
cd - 進入上一次目錄路徑,內在機制:echo $OLDPWD,OLDPWD變量存儲了上一個目錄
echo $PWD 或pwd,查看當前目錄
環境變量 PS1,PATH,PWD,OLDPWD,HISTSIZE,SHELL
ls
ls -ld 等於ll -d,顯示文件夾本身的信息
目錄後邊有沒有/有區別麽?大部分時候沒區別,除了目錄是軟連接的情況。
例如:ll /bin和ll /bin/,不加/顯示的是軟鏈接本身,加/顯示的是/bin/下的文件。
ls -a 包含隱藏文件
ls -l 顯示額外的信息
ls -R 目錄遞歸通過
ls -ld 目錄和符號鏈接信息
ls -1 文件分行顯示
ls -S 按從大到小排序
ls -t 按mtime排序
ls -u 配合-t選項,顯示並按atime從新到舊排序
ls -U 按目錄存放順序顯示
ls -X 按文件後綴排序
ll --time=atime /data/A 訪問時間
ll --time=ctime /data/A 元數據發生變化的時間
ll --time=mtime /data/A 修改時間(默認)
stat /data/A 可以看到3個時間
元數據存放在文件系統中,不是具體文件
有時可以不讓更新讀時間atime,減少硬盤負擔
文件通配符
*匹配零個或多個字符
?匹配任何單個字符
~ 當前用戶家目錄
~mage 用戶mage家目錄
~+ 當前工作目錄
~-前一個工作目錄
[0-9]匹配數字範圍
[a-z]:字母
[A-Z]:字母
[qjy]匹配列表中的任何的一個字符
[^qjy]匹配列表中的所有字符以外的字符
預定義的字符類:man 7 glob
[:digit:]:任意數字,相當於0-9
[:lower:]:任意小寫字母
[:upper:]: 任意大寫字母
[:alpha:]: 任意大小寫字母
[:alnum:]:任意數字或字母
[:blank:]:水平空白字符
[:space:]:水平或垂直空白字符
[:punct:]:標點符號
[:print:]:可打印字符
[:cntrl:]:控制(非打印)字符
[:graph:]:圖形字符
[:xdigit:]:十六進制字符
通配符只通配文件名稱,不管內容
[root@centos7 data]#touch f{A..Z}
[root@centos7 data]#touch f{a..z}
[root@centos7 data]#ls f[A-D]
fA fb fB fc fC fd fD
[root@centos7 data]#ls f[[:upper:]]
fA fC fE fG fI fK fM fO fQ fS fU fW fY
fB fD fF fH fJ fL fN fP fR fT fV fX fZ
man 7 glob
touch 創建空文件或刷新時間
touch [OPTION]... FILE...
-a僅改變atime和ctime
-m 僅改變mtime和ctime
-t [[CC]YY]MMDDhhmm[.ss]
指定atime和mtime的時間戳
-c如果文件不存在,則不予創建
cp
cp -a 可以作為備份手段,把數據的所有信息都復制
cp -av 備份同時顯示過程,使用-v要小心,文件太大的話終端容易死
cp -u 更新,只復制源比目標更新文件或不存在文件
cp --backup=numbered 可定義到別名裏
[root@centos7 data]#ls
file1.conf file2.conf file3.conf file4.conf file5.conf
[root@centos7 data]#rename "conf" "conf.bak" file*
[root@centos7 data]#ls
file1.conf.bak file3.conf.bak file5.conf.bak
file2.conf.bak file4.conf.bak
練習
1、定義別名命令baketc,每天將/etc/目錄下所有文件,備份到/data獨立的子目錄下,並要求子目錄格式為backupYYYY-mm-dd,備份過程可見
[root@centos7 data]alias baketc="cp -av /etc /data/backup`date +%F`"
2、創建/data/rootdir目錄,並復制/root下所有文件到該目錄內,要求保留原有權限
[root@centos7 ~]cp -a /root/ /data/rootdir/
rm
rm -rf /被禁,但rm -rf /*或者 rm -rf /data /*能執行!
強烈建議把rm改名或者定義成別名mv
alias rm='mv -t /data/'
有別人正在使用某文件時釋放不了空間,用lsof | grep deleted可查看被刪除但未釋放空間的文件,方法一是kill掉進程,但不建議,因為有些進程不能kill,方法二是> file先清空,釋放空間,再rm刪掉。
> bigfile
rm -f bigfile
目錄操作
tree
tree /boot
tree -L 1 /boot 只顯示當前目錄下的第一層
tree -d /boot 只顯示文件夾
tree -P 可跟正則表達式
mkdir 創建空目錄
mkdir -p /data/dir1/dir2/dir3/dir4 能創建比較深的空目錄
mkdir -v /data/dir1/dir2/dir3/dir4 顯示詳細信息
rmdir [-p] 刪除空文件夾
練習:
(1) 如何創建/testdir/dir1/x, /testdir/dir1/y, /testdir/dir1/x/a, /testdir/dir1/x/b, /testdir/dir1/y/a, /testdir/dir1/y/b
[root@centos7 ~]#mkdir -p /testdir/dir1/{x,y}/{a,b}
(2) 如何創建/testdir/dir2/x,/testdir/dir2/y,/testdir/dir2/x/a,/testdir/dir2/x/b
[root@centos7 ~]# mkdir -p /testdir/dir2/{x/{a,b},y}
(3) 如何創建/testdir/dir3, /testdir/dir4, /testdir/dir5, /testdir/dir5/dir6, /testdir/dir5/dir7
[root@centos7 ~]# mkdir -p /testdir/dir{3,4,5/{6,7}}
備份小技巧
cp /etc/hosts{,.bak}
索引節點
inode
inode table 節點表
inode在每個分區中唯一
直接指針有12個,每個block是4K,最多直接指向48K的數據
間接指針 4M
二重間接指針 4G
三重間接指針 4T
df -i df的inode形式
shred -zvu -n 6 /data/hosts 擦除文件,-z最後以0覆蓋,-v顯示過程,-u刪除文件,-n 6覆寫6次(默認3次)
硬鏈接
創建硬鏈接會增加額外的記錄項以引用文件
對應於同一文件系統上一個物理文件
每個目錄引用相同的inode號
創建時鏈接數遞增
刪除文件時:
?rm命令遞減計數的鏈接
?文件要存在,至少有一個鏈接數
?當鏈接數為零時,該文件被刪除
不能跨越驅動器或分區
語法:
ln filename [linkname]
任何文件夾最少有2個鏈接數,本身和. ,如果還有子文件夾的話,子文件夾的.. 也是他的名字,就有3個以上的鏈接數
軟連接(符號鏈接)
一個符號鏈接指向另一個文件
ls -l的顯示鏈接的名稱和引用的文件
一個符號鏈接的內容是它引用文件的名稱
可以對目錄進行
可以跨分區
指向的是另一個文件的路徑;其大小為指向的路徑字符串的長度;不增加或減少目標文件inode的引用計數;
語法:
ln -s filename [linkname]
軟連接的文件大小是源文件的文件名大小
軟連接ln -s f1 f1_link,如果f1和f1_link在不同目錄,要用相對目錄的話是相對於f1_link的目錄,不是相對於f1的目錄
readlink /etc/grub2.cfg可直接讀到源文件的路徑
軟,硬鏈接區別:
本質
硬鏈接:同一個文件多個名字
軟鏈接:一個文件對應快捷方式,不同文件
1、鏈接數
2、跨分區
3、目錄
4、原始和鏈接文件關系
5、刪除
確定文件內容
file file1
檢查文件的類型,然後確定適當的打開命令或應用程序使用
文件的頭部,又稱魔數magic number
hexdump -C file -n 100 顯示一個文件的前100個字節
Linux-文件管理