1、Linux發(fā)行版系統(tǒng)目錄名稱命名規(guī)則以及用途
| 目錄 | 描述 |
|---|---|
| /bin | 所有用戶可用的基本命令程序文件; |
| /sbin | 供系統(tǒng)管理使用的工具程序; |
| /boot | 引導(dǎo)加載器必須用到的各靜態(tài)文件:kernel, initramfs(initrd), grub等; |
| /dev | 存儲(chǔ)特殊文件或設(shè)備文件; 設(shè)備有兩種類型:字符設(shè)備(線性設(shè)備)、塊設(shè)備(隨機(jī)設(shè)備); |
| /etc: | 系統(tǒng)程序的配置文件,只能為靜態(tài); |
| /home | 普通的家目錄的集中位置;一般每個(gè)普通用戶的家目錄默認(rèn)為此目錄下與用戶名同名的子目錄,/home/USERNAME; |
| /root | 管理員的家目錄;可選; |
| /lib | 為系統(tǒng)啟動(dòng)或根文件系統(tǒng)上的應(yīng)用程序(/bin, /sbin等)提供共享庫,以及為內(nèi)核提供內(nèi)核模塊; |
| /lib64 | 64位系統(tǒng)特有的存放64位共享庫的路徑; |
| /media | 便攜式設(shè)備掛載點(diǎn),cdrom, floppy等; |
| /mnt | 其它文件系統(tǒng)的臨時(shí)掛載點(diǎn); |
| /opt | 附加應(yīng)用程序的安裝位置;可選路徑; |
| /srv | 當(dāng)前主機(jī)為服務(wù)提供的數(shù)據(jù); |
| /tmp | 為那些會(huì)產(chǎn)生臨時(shí)文件的程序提供的用于存儲(chǔ)臨時(shí)文件的目錄;可供所用戶執(zhí)行寫入操作;有特殊權(quán)限; |
| /usr | 全局共享的只讀數(shù)據(jù)路徑; |
| /usr/local | 讓系統(tǒng)管理員安裝本地應(yīng)用程序;也通常用于安裝第三方程序; |
| /var | 存儲(chǔ)常發(fā)生變化的數(shù)據(jù)的目錄; |
| /proc | 基于內(nèi)存的虛擬文件系統(tǒng),用于為內(nèi)核及進(jìn)程存儲(chǔ)其相關(guān)信息;它們多為內(nèi)核參數(shù),例如net.ipv4.ip_forward, 虛擬為net/ipv4/ip_forward, 存儲(chǔ)于/proc/sys/, 因此其完整路徑為/proc/sys/net/ipv4/ip_forward; |
| /sys | sysfs虛擬文件系統(tǒng)提供了一種比proc更為理想的訪問內(nèi)核數(shù)據(jù)的途徑;其主要作用在于為管理Linux設(shè)備提供一種統(tǒng)一模型的的接口; |
2、stat 命令查看文件的元數(shù)據(jù)信息
$ stat test.txt
File: test.txt
Size: 5 Blocks: 8 IO Block: 4096 regular file
Device: fd00h/64768d Inode: 917656 Links: 1
Access: (0664/-rw-rw-r--) Uid: ( 1000/ hx) Gid: ( 1000/ hx)
Access: 2019-12-03 17:58:12.144463726 +0800
Modify: 2019-12-03 17:58:40.491315603 +0800
Change: 2019-12-03 17:58:40.491315603 +0800
Birth: -
簡(jiǎn)單的介紹一下stat命令顯示出來的文件其他信息:
- File:顯示文件名
- Size:顯示文件大小
- Blocks:文件使用的數(shù)據(jù)塊總數(shù)
- IO Block:IO塊大小
- regular file:文件類型(常規(guī)文件)
- Device:設(shè)備編號(hào)
- Inode:Inode號(hào)
- Links:鏈接數(shù)
- Access:文件的權(quán)限
- Gid、Uid:文件所有權(quán)的Gid和Uid。
Linux下的三個(gè)時(shí)間:
- Access Time:簡(jiǎn)寫為atime,表示文件的訪問時(shí)間。當(dāng)文件內(nèi)容被訪問時(shí),更新這個(gè)時(shí)間
- Modify Time:簡(jiǎn)寫為mtime,表示文件內(nèi)容的修改時(shí)間,當(dāng)文件的數(shù)據(jù)內(nèi)容被修改時(shí),更新這個(gè)時(shí)間。
- Change Time:簡(jiǎn)寫為ctime,表示文件的狀態(tài)時(shí)間,當(dāng)文件的狀態(tài)被修改時(shí),更新這個(gè)時(shí)間,例如文件的鏈接數(shù),大小,權(quán)限,Blocks數(shù)。
3、軟鏈接和硬鏈接區(qū)別
- 硬鏈接: 與普通文件沒什么不同,
inode都指向同一個(gè)文件在硬盤中的區(qū)塊; - 軟鏈接: 軟鏈接又叫符號(hào)鏈接,它實(shí)際上是一個(gè)特殊的文件,有點(diǎn)類似于 Windows 的快捷方式。這個(gè)文件包含了另一個(gè)文件的路徑名??梢允侨我馕募蚰夸?可以鏈接不同文件系統(tǒng)的文件。
# 創(chuàng)建硬鏈接: ln TARGET LINK_NAME
$ ln test.txt hlink_test.txt
# 創(chuàng)建軟鏈接: ln -s TARGET LINK_NAME
$ ln -s test.txt slink_test.txt
$ ll
total 8
-rw-rw-r-- 2 hx hx 7 Dec 3 18:12 hlink_test.txt
lrwxrwxrwx 1 hx hx 8 Dec 3 18:15 slink_test.txt -> test.txt
-rw-rw-r-- 2 hx hx 7 Dec 3 18:12 test.txt
軟鏈接的特點(diǎn):
要建立鏈接時(shí),
LINK_NAME必須是存在的;而當(dāng)TARGET不存在時(shí)建立的連接是一個(gè)空鏈接,相當(dāng)于空指針??真溄游募部梢圆僮?,而且如果對(duì)空鏈接進(jìn)行操作,比如emptyFile是空鏈接,進(jìn)行vi emptyFile輸入一些字符后保存,那么系統(tǒng)會(huì)自動(dòng)生成一個(gè)對(duì)應(yīng)emptyFile的TARGET空鏈接會(huì)變成一個(gè)軟鏈接;LINK_NAME指向TARGET,當(dāng)TARGET的內(nèi)容改變時(shí),LINK_NAME的內(nèi)容也會(huì)改變,反過來也是一樣,當(dāng)LINK_NAME改變也會(huì)導(dǎo)致TARGET改變;當(dāng)刪除
LINK_NAME時(shí),不會(huì)對(duì)TARGET產(chǎn)生影響。而刪除TARGET時(shí),LINK_NAME會(huì)變成一個(gè)空鏈接,見第1條后半段。如果此時(shí)再創(chuàng)建一個(gè)與之前TARGET同名的文件,就會(huì)重新建立鏈接。但此時(shí)TARGET和LINK_NAME的內(nèi)容都為空。
硬鏈接的特點(diǎn):
-
TARGET文件必須存在; -
TARGET和LINK_NAME相互影響,同步執(zhí)行,創(chuàng)建了硬鏈接相當(dāng)于文件實(shí)體多了入口; - 建立硬鏈接后,
TARGET和LINK_NAME的鏈接數(shù)都為2,當(dāng)刪除TARGET后,LINK_NAME的內(nèi)容不受影響,但其鏈接數(shù)減少一,從鏈接文件變成一個(gè)普通文件。
對(duì)文件鏈接:
- 文件可以創(chuàng)建硬鏈接,增加了文件的入口,但是創(chuàng)建硬鏈接不能跨分區(qū)
- 其實(shí)文件名本身就是個(gè)硬鏈接,也是文件入口
對(duì)于目錄鏈接
- 目錄不能創(chuàng)建硬鏈接,目錄可以創(chuàng)建軟鏈接
- 每個(gè)目錄下都會(huì)有兩個(gè)硬鏈接,
.當(dāng)前目錄,..上級(jí)目錄
4、Linux上的常用文件管理類命令
cp 命令:復(fù)制文件
$ man cp
NAME
cp - copy files and directories
SYNOPSIS
cp [OPTION]... [-T] SOURCE DEST # 復(fù)制單個(gè)文件
cp [OPTION]... SOURCE... DIRECTORY # 復(fù)制多個(gè)文件
cp [OPTION]... -t DIRECTORY SOURCE... # 復(fù)制多個(gè)文件
# 常用選項(xiàng):
-i:交互式復(fù)制,即覆蓋之前提醒用戶確認(rèn);
-f:強(qiáng)制覆蓋目標(biāo)文件;
-r, -R:遞歸復(fù)制目錄;
-d:復(fù)制符號(hào)鏈接文件本身,而非其指向的源文件;
-a:-dR --preserve=all, archive,用于實(shí)現(xiàn)歸檔;
--preserv=
mode:權(quán)限
ownership:屬主和屬組
timestamps: 時(shí)間戳
context:安全標(biāo)簽
xattr:擴(kuò)展屬性
links:符號(hào)鏈接
all:上述所有屬性
$ touch demo-{1..5}.txt
$ ll
total 12
-rw-rw-r-- 1 hx hx 0 Dec 4 13:49 demo-1.txt
-rw-rw-r-- 1 hx hx 0 Dec 4 13:49 demo-2.txt
-rw-rw-r-- 1 hx hx 0 Dec 4 13:49 demo-3.txt
-rw-rw-r-- 1 hx hx 0 Dec 4 13:49 demo-4.txt
-rw-rw-r-- 1 hx hx 0 Dec 4 13:49 demo-5.txt
$ cp demo-1.txt /tmp/
$ cp demo-1.txt demo-2.txt demo-3.txt /tmp
$ cp -t /tmp/ demo-4.txt demo-5.txt
$ ll /tmp/
total 0
-rw-rw-r-- 1 hx hx 0 Dec 4 13:51 demo-1.txt
-rw-rw-r-- 1 hx hx 0 Dec 4 13:51 demo-2.txt
-rw-rw-r-- 1 hx hx 0 Dec 4 13:51 demo-3.txt
-rw-rw-r-- 1 hx hx 0 Dec 4 13:51 demo-4.txt
-rw-rw-r-- 1 hx hx 0 Dec 4 13:51 demo-5.txt
mv 命令:移動(dòng)文件
mv [OPTION]... [-T] SOURCE DEST
mv [OPTION]... SOURCE... DIRECTORY
mv [OPTION]... -t DIRECTORY SOURCE..
常用選項(xiàng):
-i:交互式;
-f:force
$ mv demo-1.txt /tmp/
$ mv demo-2.txt demo-3.txt /tmp/
$ mv -t /tmp/ demo-4.txt demo-5.txt
# 目標(biāo)文件存在是,交互式確認(rèn)
$ mv -i demo-1.txt /tmp/
mv: overwrite '/tmp/demo-1.txt'?
# 目標(biāo)文件存在是,強(qiáng)制覆蓋
$ mv -f demo-1.txt /tmp/
rm命令:刪除文件
rm [OPTION]... FILE...
常用選項(xiàng):
-i:interactive
-f:force
-r: recursive
$ rm -i demo-2.txt
rm: remove regular empty file 'demo-2.txt'?
# 強(qiáng)制遞歸刪除,謹(jǐn)慎使用
$ rm -rf demo-2.txt
5、vi 文本查找替換
在末行模式下:
語法: [range]s/s1/s2/ [option]
[range] 表示檢索范圍,省略時(shí)表示當(dāng)前行
1,10表示從第 1 行到 10 行
%表示整個(gè)文件,同1,$
.,$表示從當(dāng)前行到文件尾
s 為替換命令
s1 要被替換的串,s2 為替換的串
[option] 表示選項(xiàng):
/g表示在全局文件中進(jìn)行替換。
/c表示在每次替換之前需要用戶進(jìn)行確認(rèn)。
省略時(shí)僅對(duì)每行第一個(gè)匹配串進(jìn)行替換。
1. :s/old/new/ 把當(dāng)前行第一個(gè)出現(xiàn)的old替換成new,后面加g就是替換當(dāng)前行所有
2. :1,5 s/old/new 把1到5行的第一個(gè)old替換成new,可以加g表示所有
3. :3,$s/old/new/ 把從3行開始到最后一行的第一個(gè)出現(xiàn)的old替換成new,后面加g替換當(dāng)前行所有,3用.表示就是當(dāng)前行
4. :%s/old/new/ 把所有行的第一個(gè)old替換成new,后面加g表示替換當(dāng)前行所有
用查找替換命令刪除/tmp/profile文件中的 行首的空白字符
$ cp /etc/profile /tmp/
$ vi /tmp/profile

vi-1575440956160.png
6、在vim中設(shè)置tab縮進(jìn)
# 設(shè)置tab縮進(jìn)為4個(gè)字符寬度
set tabstop=4 或 set ts=4
# TAB替換為空格
:set ts=4
:set expandtab
:%retab!
# 空格替換為TAB
:set ts=4
:set noexpandtab
:%retab!