【Linux命令】《鳥哥Linux基礎》第六章 Linux文件與目錄管理

第六章 Linux文件與目錄管理

6.1 目錄操作

.  當前目錄
.. 上層目錄
-  前一個工作目錄
~  當前用戶的家目錄
~account   account用戶的家目錄
cd 絕對路徑or相對路徑   切換到這個指定路徑
cd   				 不加任何路徑,是回到當前家目錄,等於cd ~  
cd - 				 返回剛剛的上個目錄


pwd		直接就能顯示當前目錄
pwd -P  顯示鏈接文件的真身


mkdir test     				創建test文件夾,默認權限
mkdir -m 711 test2   		創建一個test2文件夾,權限爲711
mkdir -p test/test1/test2   遞歸創建子文件夾


rmdir test  				直接刪掉空文件夾,如果test有內容則無法刪除
rmdir -r test 				直接刪掉test,不管test內有無內容
rmdir -p test/test1/test2 	遞歸刪除,包括空文件夾

PATH

PATH="${PATH} : /root"   將/root文件夾加入到PATH路徑中

從安全角度考慮,本目錄(.)最好不要放到PATH中

6.2 文件與目錄管理

ls cp rm mv basename dirname

ls 顯示文件屬性

ls [-aAdfFhilnrRSt] 文件或目錄名稱      
		-a  全部文件,包括隱藏文件
		-d  僅列出目錄本身,而不是列出目錄內的文件數據
		-l  詳細信息顯示,包含文件的屬性與權限等數據

ls [--color={never,auto,always}] 文件或目錄名稱
		--color=never  不要依據文件特性給與顏色顯示
		--color=auto   你自己看着顯示
		--color=always 要依據文件特性給與顏色顯示
		
ls [--full-time] 文件或目錄名稱
		--full-time 以完整時間輸出,年月日時分
		--time={atime,ctime}  輸出access時間(atime),或改變權限屬性的時間(ctime)
cp  複製文件或目錄

cp [-adfilprsu] 源文件source  目標文件directory 
		-a  相當於-dr --preserve=all  整個數據特性完全一模一樣
		-d  若源文件爲鏈接,則複製鏈接而非文件本身
		-r  遞歸複製,用於目錄的複製
		-i  若目標文件已經存在,覆蓋時會先詢問操作的進行
		-p  連同文件的屬性(權限、用戶、時間)一起復制過去,而非使用默認屬性,備份時常用
		-l  進行硬鏈接的鏈接文件建立,而非複製文件本身
		-s  複製成符號鏈接文件,也就是快捷方式文件
		-u  當destination比source舊,才更新destination;或者destination不存在,纔會複製過來,備份常用
		--preserve=all  除了-p的權限相關參數外,還加入SELinux的屬性,links、xattr等也複製


cp [options] source1 source2 source3 ... directory   
	這裏需要注意,如果源文件有兩個以上,最後一個目標文件一定得是目錄


拷貝之前瞭解:
是否需要完整保留源文件的信息
源文件是否爲符號鏈接文件
原文件是否爲特殊文件,如FIFO、Socket
源文件是否爲目錄
rm  刪除文件或目錄

rm [-fir] 文件名或目錄名
	-f  就是force,忽略不存在的文件,不會出現警告信息
	-i  交互模式,刪除前詢問是否刪除
	-r  遞歸刪除,極其危險,慎用!
	
rm    非空文件夾    會提示說裏面有內容,刪不掉
rm -r 非空文件夾    按照提示刪除就行了

\rm -r 文件夾      命令前面加個反斜線,可以忽略掉alias的指定選項

rm ./-aaa-        刪除一個-開頭的文件,加上./表示-aaa-是本目錄下的文件
rm -- -aaa-       此法也可以刪除-aaa-
mv  移動文件或目錄,或重命名

mv [-fiu] source destination
		-f  fource強制的意思,如果目標文件已經存在,不會詢問而直接覆蓋
		-i  若目標文件已經存在,詢問是否覆蓋
		-u  若目標文件已經存在,且source比較新,纔會更新

mv 源文件a.txt 目標文件b.txt  實現將單一文件a.txt重命名爲另一文件b.txt

mv [option] source1 source2 source3 ... directory  多個文件移到目錄中
獲取路徑的文件名與目錄名

basename /etc/sysconfig/network    獲取最後的文件名network

dirname /etc/sysconfig/network     獲取最開始的目錄名/etc/sysconfig/

6.3 文件內容查看

cat tac nl more less head tail od touch

cat 從第一行開始顯示文件內容

cat [-AbEnTv] 
		-A  相當於-vET,可列出一些特殊字符而不是空白而已
		-b  列出行號,僅針對非空白行做行號展示,空白行不標行號
		-E  將結尾的換行符$顯示出來
		-n  打印行號,連同空白行也會有行號,與-b不同
tac 從最後一行開始顯示,是cat倒着寫

tac 文件名
nl 顯示的時候,同時顯示行號

nl [-bnw] 文件名
		-b  指定行號指定的方式,主要有兩種
			-b a 不論是否爲空行,列出行號
			-b t 如果有空行,空的那行不要列出行號(默認值)
		-n  列出行號表示方法,主要3種
			-n ln 行號在屏幕的最左方顯示
			-n rn 行號在自己欄位的最右方顯示,且不加0
			-n rz 行號在自己欄位的最右方顯示,且加0
		-w  行號欄位佔用的字符  
			-w 3 表示默認欄位是3位
		
more 一頁一頁顯示文件內容,翻頁查看

可用按鍵:
		space: 向下翻一頁
		Enter: 向下翻一行
		/字符串:在這個顯示的內容當中,向下查找字符串這個關鍵詞
		:f    :立刻顯示出文件名以及目前顯示的行數
		q:    :立刻離開more,不再顯示該文件內容
		b或者[ctrl]-b :往回翻頁,這個操作只對文件有用,對管道無用
less 可以往前翻頁

可用按鍵:
		space:     向下翻一頁
		[pagedown]:向下翻一頁
		[pageup]:  向上翻一頁
		/字符串:    向下查找字符串這個關鍵詞
		?字符串:    向上查找字符串這個關鍵詞
		n:  重複前一個查找(與/或?命令有關)
		N:  反向重複前一個查找(與/或?命令有關)
		g:  前進到這個數據的第一行
		G:  前進到這個數據的最後一行(注意大小寫)
		q:  離開less
head 只看前面幾行

head [-n number] 文件
		-n  後面接數字,代表顯示幾行 
		-n 10 顯示前10行(默認)
		-n -100 如果數字是負數,表示後面的100行都不打印,只打印前面的所有內容
tail 只看後面幾行

tail [-n number] 文件
		-n  後面接數字,代表顯示幾行
			-n 10   只顯示後10行(默認)
			-n 20   只顯示後20行
			-n +100 從100行以後的內容全部列出
		-f  表示持續刷新顯示後面所接文件中的內容,要等到按下Ctrl+c才結束;有數據寫入時就顯示
顯示文件的第11到第20行(先取前20行,在此基礎上再取後10行)
head -n 20 filename | tail -n 10

列出正確的行號,顯示文件的第11到第20行(先給全文添加行號,取前20行,在此基礎上再取後10行)
cat -n filename | head -n 20 | tail -n 10
od 以二進制的方式讀取文件內容

od [-t TYPE] 文件
		-t a        利用默認的字符來輸出
		-t c		使用ASCII字符輸出
		-t d[size]	利用十進制(decimal)輸出數據,每個整數佔size字節
		-t f[size]	利用浮點數(floating)輸出數據,每個數佔size字節
		-t o[size]	利用八進制(octal)輸出數據,每個整數佔size字節
		-t x[size]	利用十六進制(hexadecimal)輸出數據,每個整數佔size字節

echo password | od -t oCc  自助查詢password這幾個字母對應的ASCII對照

文件3個時間:

修改時間 mtime 文件內容改變 (默認ls列出這個修改時間mtime)
狀態時間 ctime 權限和屬性改變
讀取時間 atime 被新訪問了

touch 修改文件時間或創建新文件

touch filename  創建了一個空文件


touch [-acdmt] 文件
		-a 僅自定義atime
		-c 僅修改文件的時間,若該文件不存在則不建立新文件
		-d 後面可以接欲自定義的日期而不用目前的時間,或者--data="日期或時間"
		-m 僅自定義mtime
		-t 後面可以接欲自定義的日期而不用目前的時間, 格式爲[YYYYMMDDhhmm]


touch -d "2 days ago" filename   將atime和mtime改成2天前,ctime未變

touch -t 202005251629 filename  將atime和mtime改成指定時間,ctime未變

6.4 文件與目錄的默認權限與隱藏權限

將root的~/.bashrc文件複製給dj:
cp     ~/.bashrc  ~dj/bashrc    複製文件
chown  dj:dj      ~dj/bashrc    修改屬性


建立一個目錄,所有人都可以訪問目錄中的文件,但是隻有dj用戶可以修改這些文件:
應該建立的文件夾權限:drwxr-xr-x  755
mkdir  /tmp/dirname            建立目錄
chown  -R  dj:dj  /tmp/dirname 修改屬性
chmod  -R  755  /tmp/dirname   修改權限
umask 負責制定當前用戶在建立文件或目錄時候的默認權限

umask  得到0022,與普通權限相關的是後三個數字022,拿掉0,2,2
umask -S  得到以符號形式顯示的權限:u=rwx,g=rx,o=rx

umask 002 只將組外人拿掉一個寫權限
chattr 在ext2 ext3 ext4的linux傳統文件系統上面可以生效,xfs文件系統對其支持不全[Aadis]

chattr [+-=] [ASacdistu] 文件或目錄名稱
			a  這個文件只能追加數據,不能刪除也不能修改,
			   只有root能設置該屬性
 			i  可以讓一個文件不能被刪除、改名,設置鏈接,也無法寫入或
 			   新增數據,有利於系統安全,只有root能修改該屬性
 			s  如果改文件被刪除,就會完全從硬盤刪除,誤刪完全無法恢復
 			u  與s相反,如果文件被刪除,數據內容還存在磁盤中,可以用來恢復該文件
lsattr [-adR] 文件或目錄
			-a 將隱藏文件的屬性也顯示出來
			-d 如果接的是目錄,僅列出目錄本身的屬性,而非目錄內的文件名
			-R 連同子目錄一同列出來

chattr +aiS attrtest  	使用chattr設置屬性
lsattr attrtest  		使用lsattr查看屬性

特殊權限介紹:

SUID 不可針對目錄
		僅對二進制程序有效,不可用在shell腳本上,
		執行者對於該程序需要有x的可執行權限,
		本權限只在執行程序過程中有效,
		執行者將具有該程序擁有者的權限
	例如:一般用戶可以修改自己的密碼
		只有root用戶可以讀取保存密碼的/etc/shadow文件內容,並強制寫入數據
		又因/usr/bin/passwd命令的權限是-rwsr-xr-x,文件所有者權限有s
		dj用戶可以調用passwd命令,執行過程中擁有root所有權限,
		成功向/etc/shadow文件寫入數據
		
		cat 命令沒有這個s,因此無法在調用cat過程中享有root的權限,
		因此無法使用cat查看/etc/shadow文件內容
		

SGID 既可以針對文件,又可針對目錄
	 對於文件來說:
		對二進制程序有用
		程序執行着對於該程序來說,需要具備x的權限
		執行者在執行過程中獲得該程序用戶組的支持
	 例如:
	 	當文件mlocate.db文件的屬性:-rw-r-----,
	 	按理說組外人無法查看內容
	 	
	 	而普通用戶dj,可以調用/usr/bin/locate命令查找這個理論上
	 	根本無法查看的mlocate.db
	 	
	 	因爲locate命令的屬性:-rwx--s--x,在文件所屬組中的x上是個s,
	 	也就是,即使非本組人員執行這個命令,
	 	那麼恭喜你,你就具有這個命令所屬組的權限,
	 	
	 	這個命令所屬的組是root,root組用戶可以查看mlocate.db文件,
	 	因此查詢成功


	  對於目錄來說:
	  	若用戶對於此目錄具有r或x權限時,該用戶能夠進入該目錄
	  	用戶在此目錄下的有效用戶組,將會變成該目錄的用戶組
	  	用途:若用戶在此目錄下具有w的權限(可以新建文件),
	  		 該文件的用戶組與此目錄的用戶組相同

		

SBIT 不可針對文件
		如果用戶對此目錄具有w、x的權限,即具有寫入權限
		當用戶在該目錄下建立文件或目錄時,僅有自己與root纔有權利刪除該文件
	 例如:
	  	用戶dj對於A目錄具有用戶組或其他人的身份,並擁有目錄w權限,
	  	這表示dj用戶對A目錄內任何人建立的目錄或文件具有刪除、改名、移動等操作
	  	但是,如果把A目錄權限加上了SBIT權限,
	  	則dj用戶只能對自己建立的文件刪除、改名、移動等,無法刪除他人文件

	 例如: 
		/tmp目錄的權限是:drwxrwxrwt,最後組外人的權限中有個t
		任何人都可以在/tmp文件夾下新增修改文件,
		但僅有該文件/目錄建立者和root能刪除自己的目錄或文件

特殊權限設置:

4  SUID
2  SGID
1  SBIT
chmod 4755 filename    將一個文件權限改爲-rwsr-xr-x   SUID
chmod 6755 filename    將一個文件權限改爲-rwsr-sr-x   SUID+SGID
chmod 1755 filename    將權限改爲-rwxr-xr-t          SBIT
chmod 7666 filename    將權限改爲-rwSrwSrwT    根本不具備w,都是空
file  查看文件類型:
		屬於ASCII文件、數據文件、二進制文件
		有沒有用到動態鏈接庫等信息,可以利用file來看
file filename

6.5 命令與文件查找

腳本文件的查找:

which  查找執行文件

which [-a] commod  
		-a  將所有由PATH目錄中可以找到的命令均列出,
			而不止第一個被找到的命令名稱

which config
which which 
which history   找不到,因爲which是查找【path】這個環境變量所規定的路徑
				而history是bash內置的命令,得通過type找

文件查找:

whereis  只查找特定目錄下的文件

whereis [-bmsu] 文件或目錄名
			-l  可以列出whereis會去查詢的幾個主要目錄
			-b  只找binary格式的文件,二進制文件
			-m  只找在說明文件manual路徑下的文件
			-s  只找source源文件
			-u  查找不在上述三個項目中的其他特殊文件

whereis ifconfig  列出與ifconfig有關的文件名
whereis passwd
whereis -m passwd


whereis -l  可以列出whereis命令到底查詢了哪些文件夾
			主要在/bin、/sbin目錄和/usr/share/man目錄裏查找
locate  只查找已建立的數據庫/var/lib/mlocate
locate [-irclS] keyword  關鍵字檢索
			-i 忽略大小寫的差異
			-c 不輸出文件名,僅計算找到的文件數量
			-l 僅輸出幾行,若-l 5 則只輸出前5行
			-S 輸出locate所用的數據庫文件的相關信息,包括該數據庫記錄的文件目錄數量等
			-r 後面可接正則表達式的顯示方式

locate -l 5 passwd
locate -S



locate查詢基於建立的數據庫,
但數據庫每天才更新一次,如果新建了一個文件,這個文件自然一時半會不在數據庫內,
需要手動更新數據庫,否則會提示找不到數據

updatedb     這個命令是用來更新數據庫,根據 /etc/updatedb.conf的設置
			 去查找系統硬盤內的文件,
			 並更新/var/lib/mlocate內的數據庫文件
			 
			 由於要去硬盤裏查找文件名,最後更新整個數據庫,要等數分鐘
find  
1、
find [PATH] [option] [action]
	與時間有關的選項:-atime,-ctime,-mtime
		-mtime  n:  n是數字,在n天之前的【一天之內】被修改過內容的文件
					 [n-1,n]
					 
		-mtime +n:  列出在n天之前(不含n天本身)被修改過內容的文件
					 (負無窮,n-1]
					 
		-mtime -n:  列出在n天之內(含n天本身)被修改過內容的文件
					 [n,現在]
					 
		-newer file:file爲一個存在的文件,列出比file還要新的文件


find / -mtime 0    列出過去系統上面24h內修改過內容的文件,
				   0表示當前,從現在開始往前推24h
find / -mtime 3    列出3天之前那一天的24小時內修改過內容的文件

find /etc -newer /etc/passwd  列出/etc下面的文件,如果文件日期比/etc/passwd新就列出




2、
find /home -user dj  找出dj用戶的在系統中的所有數據
find / -nouser       找出不太正常的文件,
					 列出這些不屬於系統任何用戶的文件,以源代碼自行編譯軟件時會出現這種情況;
					 刪除了一個用戶,這個用戶曾在系統留下很多文件時也會出現這種情況


3、
find -name filename  查找文件名爲filename的文件
find -size [+-]SIZE  查找比SIZE還要大(+)或小(-)的文件,
					 SIZE規格:c:Bytes;k:1024Bytes;
find -size +50k      找到大於50kb的文件
find -type TYPE      查找文件類型是TYPE的,類型主要有:
					 一般正規文件 f
					 設備文件  b,c
					 目錄    d
					 鏈接文件 l
					 socket  s
					 FIFO    p
find -perm mode      查找權限==mode的文件
find -perm -mode     列出的文件權限必然要能囊括這個mode
find -perm /mode     查找文件權限中包含任一mode的權限的文件

find / -name passwd  找出文件名爲passwd的文件
find / -name "*passwd*"  find只能查找完整文件名,若查找關鍵字,用正則
find /run -type s    找出socket文件,-type有利於找出類型怪異的文件
find / -perm /7000   所謂7000:---s--s--t,只要含有s或t就列出
find / -perm -7000   必須同時含有s或t,---s--s--t,才列出
find /usr/bin /usr/sbin -perm /6000  這兩個文件夾中只要有SUID或SGID就列出

find會遞歸查找子目錄


4、
find [PATH] [option] [action] 這個action
-exec commod  接額外別的命令處理找到的結果
-print 將結果打印輸出到屏幕(默認)

find /usr/bin /usr/sbin -perm /7000 -exec ls -l {} \;
此處只能用命令本名ls -l,不可用命令別名ll

find / -size +1M   找出系統中大於1MB的文章

find /etc -name '*http*'   找出/etc下面的文件名包含http的文件 

不要有事沒事用find,它很消耗硬盤資源,可以用whereis和locate

6.6 權限與命令的關係

什麼命令 在什麼權限下才能夠運行

1、
讓用戶能進入某目錄並查看目錄中有哪些文件的基本權限: 
cd 目錄
用戶首先要能進入這個目錄,對這個目錄要有x權限
額外,如果要在這個目錄內ls查看文件名,則要求用戶對這個目錄還需要r權限

2、
用戶在某個目錄內,讀取一個文件的基本權限:
catmoreless 等
用戶首先要能進入這個目錄,對這個目錄要有x權限
用戶想讀這個文件內容,對這個文件要有r權限

3、
讓用戶可以修改一個文件的基本權限:
用 nano 或 gedit 或 vi 等
用戶首先要能進入這個目錄,對這個目錄要有x權限
用戶想要修改這個文件,要能看到文件內容(r),要能修改內容(w)

4、
讓用戶可以建立一個文件的基本權限:
用戶在該目錄要具有w和x的權限,
首先要能進去目錄(x),
然後要能新建文件,就是修改目錄中的內容(w)

5、
讓用戶能執行 cp /dir1/file1 /dir2 的基本權限:
用戶首先要能讀取源文件,並寫入目標文件
dir1   用戶至少要能進到dir1中(x)
file1  用戶要能看到file1的內容(r)
dir2   用戶要能往dir2裏寫入內容(w、x)

課後習題中的部分:

8.嘗試用find找出目前Linux系統中所有具有SUID的文件有哪些?

find / -perm /4000 -print

9.找出/etc下面,文件大小介於50KB到60KB之間的文件,並且將權限完整地列出(ls-l)

find /etc -size +50k -a -size -60k -exec ls -l {} \;

注意到 -a ,那個 -a 是 and 的意思,爲符合兩者纔算成功

10.找出/etc下面,文件容量大於50KB且文件所有者不是root的文件名,且將權限完整地列出(ls-l)

find /etc -size +50k -a ! -user root -exec ls -ld {} \;

11.找出/etc下面,容量大於1500KB以及容量等於0的文件

find /etc -size +1500k -o -size 0

那個 -o 就是或 (or) 的意思

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章