目錄與路徑
相對路徑與絕對路徑
絕對路徑:路徑的寫法【一定由根目錄 / 寫起】
/usr/share/doc 這個目錄。
相對路徑:路徑的寫法【不是由 / 寫起】
由 /usr/share/doc 要到 /usr/share/man 底下時,可以寫成: 【cd ../man】這就是相對路徑的寫法。相對路徑意指相對于當前的工作目錄
cd (切換目錄)
. 代表當前目錄
.. 代表上一層目錄
– 代表前一個工作目錄
~ 代表【目前用戶身份】所在的自家目錄
~account 代表 account 這個用戶的自家家目錄
我們通過實例來看一下這些特殊命令的使用方法:
[root@yangxu ~]# cd /home
[root@yangxu home]# cd .
[root@yangxu home]# cd ..
[root@yangxu /]# cd ~
[root@yangxu ~]# cd ~yangxu
~account表示 account 這個用戶的自家家目錄 ,我如果想進入 yangxu 這個用戶的主目錄,輸入 cd ~yangxu即可
[root@yangxu yangxu]# cd –
/root
pwd (顯示當前所在的目錄)
[root@yangxu ~]# pwd [-P]
參數:
-P :顯示出確實的路徑,而非使用鏈接 (link) 路徑。(P是大寫)
范例:
[root@yangxu ~]# pwd
/root <== 顯示出當前所在的目錄
[root@yangxu ~]# cd /var/mail
[root@yangxu mail]# pwd
/var/mail
[root@yangxu mail]# pwd -P
/var/spool/mail <== 怎么回事?有沒有加 -P 差很多
[root@yangxu mail]# ls -l /var/mail
lrwxrwxrwx. 1 root root 10 3月 30 10:37 mail -> spool/mail
看到這里應該知道為啥了吧?因為 /var/mail 是連結文件,連結到 /var/spool/mail
加上 pwd -P 的參數后,會不以連結文件的數據顯示,而是顯示正確的完整路徑!
mkdir (建立新目錄)
[root@yangxu ~]# mkdir [-mp] 目錄名稱
參數:
-m :配置文件目錄的權限!我們可以自己設定自己想要的權限,而不需要使用umask定義的默認權限
-p :幫助你直接將所需要的目錄遞歸建立起來!
范例:
[root@yangxu ~]# cd /home
[root@yangxu home]# mkdir test <== 建立一名為 test 的新目錄
[root@yangxu home]# mkdir test1/test2/test3/test4
mkdir: 無法創建目錄"test1/test2/test3/test4": 沒有那個文件或目錄
[root@linux tmp]# mkdir -p test1/test2/test3/test4
加了這個 -p 的參數,可以自行幫我們建立多層目錄!
[root@yangxu home]# mkdir -p test1/test2/test3/test4
[root@yangxu home]# mkdir -m 711 test2
[root@yangxu home]# ls -l
drwxr-xr-x. 2 root root 4096 4月 21 13:08 test
drwxr-xr-x. 3 root root 4096 4月 21 13:10 test1
drwx–x–x. 2 root root 4096 4月 21 13:11 test2
-m 來強制設定屬性,否則系統會使用默認屬性。
rmdir (刪除"空"目錄)
[root@yangxu ~]# rmdir [-p] 目錄名稱
參數:
-p :連同上層『空的』目錄也一起刪除
范例:
[root@yangxu home]# ls -l
drwxr-xr-x. 2 root root 4096 4月 21 13:08 test
drwxr-xr-x. 3 root root 4096 4月 21 13:10 test1
drwx–x–x. 2 root root 4096 4月 21 13:11 test2
[root@yangxu home]# rmdir test
[root@yangxu home]# rmdir test1
rmdir: 刪除 "test1" 失敗: 目錄非空
[root@yangxu home]# rmdir -p test1/test2/test3/test4/
[root@yangxu home]# ls -l
drwx–x–x. 2 root root 4096 4月 21 13:11 test2
利用 -p 這個參數,立刻就可以將 test1/test2/test3/test4 一次刪除~
不過要注意的是,這個 rmdir 僅能【刪除空的目錄】!
管理文件與目錄
ls (查看文件和目錄)
[root@yangxu ~]# ls [-aAdfFhilRS] 目錄名稱
[root@yangxu ~]# ls [–color={none,auto,always}] 目錄名稱
[root@yangxu ~]# ls [–full-time] 目錄名稱
參數:
-a :全部的文件,連同隱藏文件( 開頭為 . 的目錄) 一起列出來~
-A :全部的文件,連同隱藏文件,但不包括 . 與 .. 這兩個目錄,一起列出來~
-d :僅列出目錄本身,而不是列出目錄內的文件數據
-f :直接列出結果,而不進行排序 (ls 預設會以文件名排序!)
-F :根據文件、目錄等信息,給予附加數據結構,例如:
*:代表可執行文件; /:代表目錄; =:代表 socket 檔案; |:代表 FIFO 文件;
-h :列出文件的打小(例如GB、KB等等)
-i :列出 inode 位置,而非列出文件屬性;
-l :長數據串行出,包含文件的屬性等等數據;
-n :列出 UID 與 GID 而非使用者與群組的名稱 (UID與GID會在賬號管理提到!)
-r :將排序結果反向輸出,例如:原本文件名由小到大,反向則為由大到?。?/p>
-R :連同子目錄內容一起列出來;
-S :以文件容量大小排序!
-t :依時間排序
–color=never :不要依據文件特性給予顏色顯示;
–color=always :顯示顏色
–color=auto :讓系統自行依據設定來判斷是否給予顏色
–full-time :以完整時間模式 (包含年、月、日、時、分) 輸出
–time={atime,ctime} :輸出 access 時間或 改變權限屬性時間 (ctime)
cp (復制命令)
[root@yangxu ~]# cp [-adfilprsu] 源文件(source) 目的文件(destination)
[root@yangxu ~]# cp [options] source1 source2 source3 …. directory
參數:
-a :相當于 -pdr 的意思;
-d :若來源文件為鏈接文件的屬性(link file),則復制鏈接文件屬性而非檔案本身;
-f :為強制 (force) 的意思,若有重復或其他疑問時,不會詢問使用者,而強制復制;
-i :若目的文件(destination)已經存在時,在覆蓋時會先詢問是否真的動作!
-l :進行硬式連結 (hard link) 的連結文件建立,而非復制文件本身;
-p :連同文件的屬性一起復制過去,而非使用默認屬性;
-r :遞歸持續復制,用于目錄的復制行為;
-s :復制成為符號鏈接文件 (symbolic link),亦即『快捷方式』文件;
-u :若 destination 比 source 舊才更新 destination
rm (刪除文件或目錄)
[root@yangxu ~]# rm [-fir] 文件或目錄
參數:
-f :就是 force 的意思,強制移除;
-i :互動模式,在刪除前會詢問使用者是否動作
-r :遞歸刪除!最常用在目錄的刪除了
[root@yangxu tmp]# rm bashrc
rm:是否刪除普通文件 "bashrc"?y
[root@yangxu tmp]# rm wtmp wtmp2
rm:是否刪除普通文件 "wtmp"?y
rm:是否刪除普通文件 "wtmp2"?y
mv (移動文件與目錄、文件重命名)
[root@yangxu ~]# mv [-fiu] source destination
[root@yangxu ~]# mv [options] source1 source2 source3 …. directory
參數:
-f :force 強制的意思,強制直接移動而不詢問;
-i :若目標文件 (destination) 已經存在時,就會詢問是否覆蓋!
-u :若目標文件已經存在,且 source 比較新,才會更新 (update)
查看文件內容
cat (concatenate)
[root@yangxu~]# cat [-AEnTv]
參數:
-A :相當于 -vET 的整合參數,可列出一些特殊字符~
-E :將結尾的斷行字符 $ 顯示出來;
-n :打印出行號;
-T :將 [tab] 按鍵以 ^I 顯示出來;
-v :列出一些看不出來的特殊字符
我們通過實例來看一下cat命令的常用使用方法:
[root@yangxu ~]# cat /etc/sysconfig/network
NETWORKING=yes
HOSTNAME=yangxu
[root@yangxu ~]# cat -n /etc/sysconfig/network
1 NETWORKING=yes
2 HOSTNAME=yangxu
[root@yangxu ~]# cat -A /etc/sysconfig/network
NETWORKING=yes$
HOSTNAME=yangxu$
tac (反向顯示)
[root@yangxu ~]# tac /etc/sysconfig/network
HOSTNAME=yangxu
NETWORKING=yes
tac是將cat反寫,所以它的功能就與cat相反
nl (顯示時添加行號)
[root@yangxu ~]# nl [-bnw] 文件
參數:
-b :指定行號指定的方式,主要有兩種:
-b a :表示不論是否為空行,也同樣列出行號;
-b t :如果有空行,空的那一行不要列出行號;
-n :列出行號表示的方法,主要有三種:
-n ln :行號在屏幕的最左方顯示;
-n rn :行號在自己字段的最右方顯示,且不加 0 ;
-n rz :行號在自己字段的最右方顯示,且加 0 ;
-w :行號字段的占用的位數。
[root@yangxu ~]# nl /etc/issue
1 CentOS release 6.4 (Final)
2 Kernel \r on an \m
[root@yangxu ~]# nl -b a /etc/issue
1 CentOS release 6.4 (Final)
2 Kernel \r on an \m
3
[root@yangxu ~]# nl -b a -n rz /etc/issue
000001 CentOS release 6.4 (Final)
000002 Kernel \r on an \m
000003
自動在自己字段的地方補上 0 了 預設字段是六位數,如果想要改成 3 位數 可以加上 -w 這個參數
[root@yangxu ~]# nl -b a -n rz -w 3 /etc/issue
001 CentOS release 6.4 (Final)
002 Kernel \r on an \m
003
head (取出前幾行)
[root@yangxu ~]# head [-n number] 文件
參數:
-n :后面接數字,代表顯示幾行的意思
[root@yangxu ~]# head /etc/man.config
默認顯示前面十行
[root@yangxu ~]# head -n 20 /etc/man.config
顯示前 20 行
tail (取出后面幾行)
[root@yangxu ~]# tail [-n number] 文件
參數:
-n :后面接數字,代表顯示幾行的意思
范例:
[root@yangxu ~]#tail /etc/man.config
默認顯示最后的十行
[root@yangxu ~]# tail -n 20 /etc/man.config
顯示最后的 20 行
修改文件時間與創建新文件
每個文件在Linux下面都會記錄3個主要的修改時間:
modification time (mtime): 當該文件的 內容數據變更時
status time (ctime): 當該文件的 狀態改變時
access time (atime): 當 該文件的內容被修改 時
[root@yangxu ~]# ls -l /etc/passwd
[root@yangxu ~]# ls -l –time=atime /etc/passwd
[root@yangxu ~]# ls -l –time=ctime /etc/passwd
touch 命令 (修改文件時間與創建新文件)
[root@yangxu ~]# touch [-acdmt] 文件
選項與參數:
-a :僅修訂 access time;
-c :僅修改文件的時間,若該文件不存在則不創建新文件;
-d :后面可以接欲修訂的日期而不用目前的日期,也可以使用 –date="日期或時間"
-m : 僅修改 mtime ;
-t : 后面可以接欲修訂的時間而不用目前的時間,格式為[YYMMDDhhmm]
接下來我們通過一些實例來看一下touch命令的這幾個參數的使用方法:
新建一個空的文件
[root@yangxu ~]# cd /home/
[root@yangxu home]# touch test.txt
[root@yangxu home]# ls -l test.txt
-rw-r–r–. 1 root root 0 4月 25 22:07 test.txt
注意,這個文件的大小是 0 !在默認的狀態下,如果 touch 后面有接文件,
則該文件的三個時間 (atime/ctime/mtime) 都會更新為目前的時間。若該文件不存在,
則會主動的創建一個新的空的文件??!
文件與目錄的默認權限與隱藏權限
umask (文件默認權限)
umask就是指定 "目前使用者在創建文件或目錄時候的權限默認值"
[root@yangxu home]# umask
0022
[root@yangxu home]# umask -S
u=rwx,g=rx,o=rx
查看方式有兩種,一種可以直接輸入 umask ,
一種則是加入 -S (Symbolic) 這個選項會以符號顯示出權限
搜索文件
which (尋找"執行文件")
[root@yangxu ~]# which [-a] command
參數:
-a :將所有可以找到的指令均列出,而不止第一個被找到的指令名稱
[root@yangxu ~]# which passwd –>> 列出第一個找到的可執行文件
/usr/bin/passwd
[root@yangxu ~]# which -a tracepath –>> 列出所有找到的同名可執行文件
/bin/tracepath
/usr/sbin/tracepath
whereis (尋找特定文件)
[root@yangxu ~]# whereis [-bmsu] 文件名或目錄名
參數:
-b :只找 binary 的文件
-m :只找在說明文件 manual 路徑下的文件
-s :只找 source 來源文件
-u :沒有說明文件的文件!
[root@yangxu ~]# whereis passwd
passwd: /usr/bin/passwd /etc/passwd /usr/share/man/man1/passwd.1.gz /usr/share/man/man5/passwd.5.gz
任何與 passwd 有關的文件名都會被列出來
[root@yangxu ~]# whereis -b passwd
passwd: /usr/bin/passwd /etc/passwd
[root@yangxu ~]# whereis -m passwd
passwd: /usr/share/man/man1/passwd.1.gz /usr/share/man/man5/passwd.5.gz
locate (尋找特定文件)
[root@yangxu ~]# locate filename
[root@yangxu ~]# locate passwd
/etc/passwd
/etc/passwd-
/etc/dovecot/conf.d/auth-passwdfile.conf.ext
/etc/pam.d/passwd
/etc/samba/smbpasswd
/etc/security/opasswd
/etc/sysconfig/ha/web/secure/passwd.php
/lib64/security/pam_passwdqc.so
/lib64/security/pam_unix_passwd.so
/usr/bin/RSA_SecurID_getpasswd
find
[root@yangxu ~]# find [PATH] [option] [action]
參數:
與時間有關的參數:
-atime n :n 為數字,意義為在 n 天之前的『一天之內』被 access 過的文件;
-ctime n :n 為數字,意義為在 n 天之前的『一天之內』被 change 過狀態的文件;
-mtime n :n 為數字,意義為在 n 天之前的『一天之內』被 modification 過的文件;
-newer file :file 為一個存在的文件,意思是說,只要檔案比 file 還要新,
就會被搜索出來2. 與使用者或組名有關的參數:
-uid n :n 為數字,這個數字是用戶的賬號 ID,亦即 UID ,這個 UID 是記錄在
/etc/passwd 里面與賬號名稱對應的數字。這方面我們會在第四篇介紹。
-gid n :n 為數字,這個數字是組名的 ID,亦即 GID,這個 GID 記錄在
/etc/group,
-user name :name 為使用者賬號名稱!例如 dmtsai
-group name:name 為組名,例如 users ;
-nouser :尋找檔案的擁有者不存在 /etc/passwd 的人!
-nogroup :尋找檔案的擁有群組不存在于 /etc/group 的文件!
當您自行安裝軟件時,很可能該軟件的屬性當中并沒有文件擁有者,
這是可能的!在這個時候,就可以使用 -nouser 與 -nogroup 搜尋。
與文件權限及名稱有關的參數:
-name filename:搜尋文件名為 filename 的文件;
-size [+-]SIZE:搜尋比 SIZE 還要大(+)或小(-)的文件。這個 SIZE 的規格有:
c: 代表 byte, k: 代表 1024bytes。所以,要找比 50KB
還要大的文件,就是『 -size +50k 』
-type TYPE :搜尋文件的類型為 TYPE 的,類型主要有:一般正規文件 (f),
裝置文件 (b, c), 目錄 (d), 連結文件 (l), socket (s),
及 FIFO (p) 等屬性。
-perm mode :搜尋文件屬性『剛好等于』 mode 的檔案,這個 mode 為類似 chmod
的屬性值,舉例來說, -rwsr-xr-x 的屬性為 4755 !
-perm -mode :搜尋文件屬性【必須要全部囊括 mode 的屬性】的文件,舉例來說,
我們要搜尋 -rwxr–r– ,亦即 0744 的文件,使用 -perm -0744,
當一個檔案的屬性為 -rwsr-xr-x ,亦即 4755 時,也會被列出來,
因為 -rwsr-xr-x 的屬性已經囊括了 -rwxr–r– 的屬性了。
-perm +mode :搜尋文件屬性【包含任一 mode 的屬性】的檔案,舉例來說,我們搜尋
-rwxr-xr-x ,亦即 -perm +755 時,但一個文件屬性為 -rw——-
也會被列出來,因為他有 -rw…. 的屬性存在!
額外可進行的動作:
-exec command :command 為其他指令,-exec 后面可再接額外的指令來處理搜尋到
的結果。
-print :將結果打印到屏幕上,這個動作是預設動作!
將過去系統上面 24 小時內有改變過內容 (mtime) 的文件列出
[root@yangxu ~]# find / -mtime 0
那個 0 是重點!0 代表目前的時間,所以,從現在開始到 24 小時前,
有變動過內容的檔案都會被列出來!那如果是三天前的 24 小時內?
find / -mtime 3 ,意思是說今天之前的 3*24 ~ 4*24 小時之間
有變動過的檔案都被列出的意思!同時 -atime 與 -ctime 的用法相同。
我們現在知道 atime, ctime 不 mtime 的意義,如果你想要找出一天內被更改過的癿文件名, 可以使用上述實例一的作法。但如果我想要找出 (4 天內被更改過的文件名)呢?那
可以使用【find /var -mtime -4 】。那如果是【4 天前的那一天】就用【 find /var -mtime 4 】。有沒有加上【+, -】差別非常的大!我們可以用簡單的圖來表示一下:
圖中最右邊為目前的時間,越往左邊則代表越早之前的時間軸。由圖 我們可以清楚的知道:
尋找 /etc 底下的文件,如果文件日期比 /etc/passwd 新就列出
[root@xialuo ~]# find /etc -newer /etc/passwd
-newer 用在分辨兩個文件之間的新舊關系是很有用的!
搜尋 /home 底下屬于 yangxu 的文件
[root@yangxu ~]# find /home -user yangxu
當我們要找出任何一個用戶在系統當中的所有文件時,
就可以利用這個指令將屬于某個使用者的所有文件都找出來!
搜尋系統中不屬于任何人的文件
[root@yangxu ~]# find / -nouser
通過這個命令,可以輕易的就找出那些不太正常的文件。
找出文件名為 passwd 這個文件
[root@yangxu ~]# find / -name passwd
利用這個 -name 可以搜尋文件名!
搜尋文件屬性為 f (一般文件) 的文件
[root@yangxu ~]# find /home -type f
這個 -type 的屬性也很有用!尤其是要找出那些怪異的文件,
例如 socket 與 FIFO 文件,可以用 find /var -type p 或 -type s 來找!
搜尋文件當中含有 SGID/SUID/SBIT 的屬性
[root@yangxu ~]# find / -perm +7000
所謂的 7000 就是 —s–s–t ,那么只要含有 s 或 t 的就列出,
所以當然要使用 +7000 ,使用 -7000 表示要含有 —s–s–t 的所有三個權限,
將上個范例找到的文件使用 ls -l 列出來
[root@yangxu ~]# find / -perm +7000 -exec ls -l {} \;
注意到,那個 -exec 后面的 ls -l 就是額外的指令,
而那個 {} 代表的是【由 find 找到的內容】的意思~所以, -exec ls -l {}
就是將前面找到的那些檔案以 ls -l 列出長的數據!至于 \; 則是表示
-exec 的指令到此為止的意思。 意思是說,整個指令其實只有在
-exec (里面就是指令下達) \;
也就是說,-exec 最后一定要以 \; 結束才行!
找出系統中,大于 1MB 的文件
[root@yangxu ~]# find / -size +1000k
原創文章,作者:N24_yangxu,如若轉載,請注明出處:http://www.www58058.com/57913