Linux文件和目錄操作命令
pwd:打印當前所在的路徑
pwd是"print working directory"的縮寫,功能是打印當前工作目錄的絕對路徑。通常情況下,使用pwd命令不需要帶任何參數。
參數選項 | 功能描述 |
---|---|
-L | logical的縮寫,表示顯示邏輯路徑(忽略鏈接文件),取PWD系統環境變量的值,不常用 |
-P | physical的縮寫,表示顯示物理路徑時如果當前目錄路徑是軟鏈接文件,則會顯示軟鏈接文件對應的源文件,不常用 |
tree:以樹形結構顯示目錄下的內容
功能是以樹形結構列出指定目錄下的所有內容,包括所有文件、子目錄及子目錄裏的目錄和文件。
語法格式:tree [選項] [目錄]
參數選項和說明:
參數選項 | 功能描述 |
---|---|
-a | 顯示所有文件,包括隱藏文件(以.開頭的文件) |
-d | 只顯示目錄 |
-f | 顯示每個文件的全路徑 |
-i | 不顯示樹枝,經常與-f參數配合使用 |
-L | 遍歷目錄的最大層數 |
-F | 對於不同類型的文件,在結尾加上不同的標識,類似ls的-F選項 |
mkdir:創建目錄
語法格式:mkdir [選項] [目錄]
參數選項和說明:
參數選項 | 功能描述 |
---|---|
-p | 遞歸創建目錄 |
-m | 設置新創建目錄的默認目錄對應的權限 |
-v | 顯示創建目錄的過程 |
[root@liujianfan 19:07:31 /test]# mkdir -m 333 /test/hhzz [root@liujianfan 19:07:59 /test]# ls -ld /test/hhzz d-wx-wx-wx. 2 root root 4096 Nov 10 19:07 /test/hhzz [root@liujianfan 19:08:09 /test]#
創建多級目錄的技巧:
在/hai目錄下創建兩個目錄:dir1和dir2,並且dir1、dir2目錄下都有dir11、dir22:
[root@liujianfan 19:11:44 ~]# mkdir -p /hai/{dir1,dir2}/{dir11,dir22} [root@liujianfan 19:20:35 ~]# tree /hai /hai ├── dir1 │?? ├── dir11 │?? └── dir22 └── dir2 ├── dir11 └── dir22 6 directories, 0 files [root@liujianfan 19:20:39 ~]#
在/hello目錄下創建dir1old~dir6old,比起它們的目錄下都有目錄a~i:
[root@liujianfan 19:20:39 ~]# mkdir -p /hello/dir{1..6}old/{a..i}
[root@liujianfan 19:22:59 ~]# tree /hello
/hello
├── dir1old
│?? ├── a
│?? ├── b
│?? ├── c
│?? ├── d
│?? ├── e
│?? ├── f
│?? ├── g
│?? ├── h
│?? └── i
├── dir2old
│?? ├── a
│?? ├── b
│?? ├── c
│?? ├── d
│?? ├── e
│?? ├── f
│?? ├── g
│?? ├── h
│?? └── i
├── dir3old
│?? ├── a
│?? ├── b
│?? ├── c
│?? ├── d
│?? ├── e
│?? ├── f
│?? ├── g
│?? ├── h
│?? └── i
├── dir4old
│?? ├── a
│?? ├── b
│?? ├── c
│?? ├── d
│?? ├── e
│?? ├── f
│?? ├── g
│?? ├── h
│?? └── i
├── dir5old
│?? ├── a
│?? ├── b
│?? ├── c
│?? ├── d
│?? ├── e
│?? ├── f
│?? ├── g
│?? ├── h
│?? └── i
└── dir6old
├── a
├── b
├── c
├── d
├── e
├── f
├── g
├── h
└── i
60 directories, 0 files
[root@liujianfan 19:23:07 ~]#
touch:創建空文件和改變文件和目錄的時間戳
語法格式:touch [選項] [文件]
參數選項 | 功能描述 |
---|---|
-a | 只更改指定文件的最後訪問時間 |
-d STRING | 使用字符串STRING代表的時間作為模板設置指定文件的時間屬性 |
-m | 只更改指定文件的最後修改時間 |
-r file | 將指定文件的時間屬性設置為與模板文件file的時間屬性相同 |
-t STAMP | 使用[[CC]YY]MMDDhhmm[.ss]格式的時間設置文件的時間屬性。格式的含義從左到右依次為:世紀、年、月、日、時、分、秒 |
*使用stat命令可以查看文件的時間戳屬性
[root@liujianfan 01:34:00 ~]# touch new
[root@liujianfan 01:34:41 ~]# stat new
File: ‘new’
Size: 0 Blocks: 0 IO Block: 4096 regular empty file
Device: fd00h/64768d Inode: 77463376 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2019-03-03 01:34:41.667556384 +0800
Modify: 2019-03-03 01:34:41.667556384 +0800
Change: 2019-03-03 01:34:41.667556384 +0800
Birth: -
[root@liujianfan 01:34:48 ~]#
文件的時間戳屬性分為訪問時間、修改時間、狀態改變時間。
修改最後訪問時間:
[root@liujianfan 01:34:48 ~]# touch -a new
[root@liujianfan 01:35:29 ~]# stat new
File: ‘new’
Size: 0 Blocks: 0 IO Block: 4096 regular empty file
Device: fd00h/64768d Inode: 77463376 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2019-03-03 01:35:29.616560085 +0800
Modify: 2019-03-03 01:34:41.667556384 +0800
Change: 2019-03-03 01:35:29.616560085 +0800
Birth: -
[root@liujianfan 01:35:32 ~]#
修改最後修改的時間:
[root@liujianfan 01:35:32 ~]# touch -m new
[root@liujianfan 01:36:06 ~]# stat new
File: ‘new’
Size: 0 Blocks: 0 IO Block: 4096 regular empty file
Device: fd00h/64768d Inode: 77463376 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2019-03-03 01:35:29.616560085 +0800
Modify: 2019-03-03 01:36:06.113562902 +0800
Change: 2019-03-03 01:36:06.113562902 +0800
Birth: -
[root@liujianfan 01:36:08 ~]#
指定時間屬性修改/創建文件:
[root@liujianfan 01:36:08 ~]# touch -d 20201111 new2
[root@liujianfan 01:37:37 ~]# ls -l new2
-rw-r--r-- 1 root root 0 Nov 11 2020 new2
ls:顯示目錄下的內容及其相關屬性信息
語法格式:ls [選項] [文件或目錄]
參數選項 | 功能描述 |
---|---|
-l | 使用長格式列出文件及目錄信息 |
-a | 顯示目錄下的所有文件 |
-t | 根據最後修改時間(mtime)排序,默認是以文件名排序 |
-r | 依相反次序排序 |
-F | 在條目後面加上文件類型的指示符號 |
-p | 只在目錄後面加上"/" |
-i | 顯示inode節點信息 |
-d | 當遇到目錄時,列出目錄本身而非目錄內的文件,並且不跟隨符號鏈接 |
-h | 以符合人類可讀的形式顯示文件或者目錄的大小,如1KB、22MB等 |
-A | 列出所有文件,但是不包括"."和".."這兩個目錄 |
-S | 根據文件大小排序 |
-R | 遞歸列出所有子目錄 |
-x | 逐行列出項目而不是逐欄列出 |
-X | 根據擴展名排序 |
-c | 根據狀態改變時間排序 |
-u | 根據最後訪問時間排序 |
--color={never,always,auto} | 不同的文件類型顯示不同的參數顏色,never表示不顯示,always表示總是顯示,auto表示自動顯示 |
--full-time | 以完整的時間格式輸出 |
--time-style={full-iso,long-iso,iso,locate} | 以不同的時間格式輸出,long-iso效果最好 |
--time={atime,ctime} | 按不同的時間屬性輸出,不加此參數默認以最後修改時間輸出 |
顯示完整的時間屬性:
[root@liujianfan 02:21:57 ~]# ls -al --time-style=long-iso
total 736696
dr-xr-x---. 9 root root 4096 2019-03-03 01:46 .
dr-xr-xr-x. 26 root root 4096 2019-01-16 19:49 ..
-rw-r--r--. 1 root root 0 2018-10-23 04:38 04:38:10.tex
-rw-r--r--. 1 root root 0 2018-10-24 08:41 1
drwxr-xr-x. 3 root root 16 2018-10-24 08:38 122
drwxr-xr-x. 5 root root 32 2018-10-24 08:39 156
ls -F命令的輸出:
1.目錄的結尾會加上"/"
2.普通文件結尾會加上"*"
3.套接字文件結尾會加上"="
4.FIFOs文件會加上"|"
5.符號鏈接文件會加上"@"
cp:復制文件或目錄
語法格式:cp [選項] [源文件] [目標文件]
參數說明:
參數選項 | 功能描述 |
---|---|
-p | 復制文件時保持源文件的所有者、權限信息及時間屬性 |
-d | 如果復制的源文件是符號鏈接,那麽僅復制符號鏈接本身,而且保留符號鏈接所指向的目標文件或目錄 |
-r | 遞歸復制目錄 |
-a | 等同於上面的p、d、r這三個選項功能的總和 |
-i | 覆蓋已有文件前提示用戶確認 |
-t | 默認情況下命令格式是"cp 源文件 目標文件",使用該參數可以顛倒源目文件的順序:cp 目標文件 源文件 |
mv:移動或重命名文件
語法格式:mv [選項] [目標文件]
參數選項說明:
參數選項 | 功能描述 |
---|---|
-f | 若目標文件已經存在,則不會詢問而是直接覆蓋 |
-i | 若目標文件已經存在,則會詢問是否覆蓋 |
-n | 不覆蓋已存在的文件 |
-t | 指定mv的目標目錄,適用於移動多個源文件到一個目錄的情況,此時目標目錄在前,源文件在後。 |
-u | 在源文件比目標文件新,或目標文件不存在時才進行移動 |
rm:刪除文件或目錄
語法格式:rm [選項] [文件或目錄]
參數選項 | 功能描述 |
---|---|
-f | 強制刪除。忽略不存在的文件,不提示確認 |
-i | 在刪除前需要確認 |
-I | 在刪除超過三個文件或者遞歸刪除前需要確認 |
-r | 遞歸刪除目錄 |
ln:硬鏈接與軟鏈接
語法格式:ln [選項] [源文件或目錄] [目標文件或目錄]
參數選項 | 功能描述 |
---|---|
無參數 | 創建硬鏈接 |
-s | 創建軟鏈接(符號鏈接) |
硬鏈接和軟鏈接:
硬鏈接:硬鏈接生成的是普通文件(-字符),相當於文件的另外一個入口。具有相同的inode節點號的多個文件互為硬鏈接文件。刪除硬鏈接文件或者源文件的任何一個,文件實體沒有被真正刪除。
軟鏈接:目標文件不能事先存在,軟鏈接生成的是符號鏈接文件(l類型),類似於windows的快捷方式,裏面存放的是源文件的路徑,指向源文件實體。即使刪除了源文件,軟鏈接文件依然存在,但是無法訪問源文件。軟鏈接和源文件是不同類型的文件,inode號也不同。
註意:對於目錄,不可以創建硬鏈接,但是可以創建軟鏈接。需要註意的是,目錄是可以跨文件系統的。
find:查找目錄下的文件
語法格式:find [選項] [路徑] [操作語句]
find命令的詳細語法:
find [選項] [路徑] [expression]
[expression包含options、tests、actions三個模塊 ]
Options參數說明:
參數選項 | 功能描述 |
---|---|
-depth | 從指定目錄下最深層的子目錄開始查找 |
-maxdepth levels | 查找的最大目錄級數,levels為自然數 |
-regextype type | 改變正則表達式的模式,默認為emacs |
Tests模塊參數說明:
參數選項 | 功能描述 |
---|---|
-mtime [-n,n,+n] | 按照文件的修改時間來查找文件,-n表示文件修改時間距離現在n天之內,+n表示距離現在n天以前 |
-atime | 按照文件的訪問時間來查找文件 |
-ctime | 按照文件的改變時間來查找文件 |
-amin | 按照文件的訪問時間來查找文件,單位為分鐘 |
-cmin | 按照文件的改變時間來查找文件,單位為分鐘 |
-mmin | 按照文件的修改時間來查找文件,單位為分鐘 |
-group | 按照文件所屬的組來查找文件 |
-name | 按照文件名稱來查找文件,只支持*、?、[]等等通配符 |
-newer | 查找更改時間比指定文件新的文件 |
-nogroup | 查找沒有有效用戶組的文件,該文件所屬的組在/etc/groups中不存在 |
-nouser | 查找沒有有效屬主的文件,該文件的屬主在/etc/passwd中不存在 |
-path | 指定路徑樣式,配合-prune參數排除指定目錄 |
-perm | 按照文件權限來查找文件 |
-regex | 接正則表達式 |
-iregex | 接正則表達式,不區分大小寫 |
-size n[cwbkMG] | 查找文件長度為n塊的文件,帶有cwbkMG時表示文件長度以字節計 |
-user | 按照文件屬主來查找文件 |
-type | 查找某一類型的文件:b、c、d、p(管道文件)、l、f、s、D |
Actions模塊參數說明:
參數選項 | 功能描述 |
---|---|
-delete | 將查找出的文件刪除 |
-exec | 對匹配的文件執行該參數所給出的shell命令 |
-ok | 和-exec作用相同,但是會讓用戶先確定是否執行 |
-prune | 使用這一選項可以使find命令不在當前指定的命令中查找 |
將匹配到的文件輸出到標準輸出 | |
OPERATORS | find支持邏輯運算符 |
! | 取反 |
-a | 取交集,全拼為and |
-o | 取並集,全拼為or |
例子:
1.查找當前目錄下,兩天內受到訪問的文件:
[root@liujianfan 20:15:26 ~]# find . -atime -2
2.查找/var/log/下6天以前以".log"結尾的被修改的文件:
[root@liujianfan 20:23:07 ~]# find /var/log/ -mtime +6 -name "*.log"
3.查找當前目錄下的所有目錄:
[root@liujianfan 20:23:26 ~]# find . -type d
4.查找當前目錄下不是目錄的文件:
[root@liujianfan 21:33:23 ~]# find . ! -type d
5.按照目錄或者文件的權限來查找文件:
[root@liujianfan 21:34:29 ~]# find . -perm 666
6.查找當前目錄下大小是100字節的文件文件:
[root@liujianfan 21:35:27 ~]# find . -size 100c
7.在當前目錄下查找更改時間比文件file.txt新的文件:
[root@liujianfan 21:37:50 ~]# find . -newer file.txt
8.查找當前目錄下更改時間在14天以前的文件,並且在-exec選項中使用rm命令刪除:
[root@liujianfan 21:43:20 ~]# find . -type f -mtime +14 -exec rm {} \;
9.使用-exec選項的安全模式-ok:
[root@liujianfan 21:43:20 ~]# find . -type f -mtime +14 -ok rm {} \;
xargs:將標準輸入轉換為命令行參數
語法格式:xargs [選項]
參數說明:
參數選項 | 功能描述 |
---|---|
-n | 指定每行的最大參數量n,可以將標準輸入的文本劃分為多行,每行n個參數,默認空格分隔 |
-d | 自定義分隔符 |
-i | 以{}替代前面的結果 |
-I | 指定一個符號替代前面的結果,而不用-i參數默認的{} |
-p | 提示讓用戶確認是否執行後面的命令 |
-0 | 用null代替空格作為分隔符 |
多行文本輸入變單行:
[root@liujianfan 22:01:58 /text]# cat tt.txt
1 2 3 4 5 6
7 8 9
10 11
[root@liujianfan 22:02:49 /text]# xargs <tt.txt
1 2 3 4 5 6 7 8 9 10 11
通過-n參數指定每行的輸出個數:
[root@liujianfan 22:04:14 /text]# xargs -n 3 < tt.txt
1 2 3
4 5 6
7 8 9
10 11
使用-d選項自定義分隔符:
[root@liujianfan 06:20:54 /]# echo hzdXhzdXhzdXhzdX | xargs -d X -n 2
hzd hzd
hzd hzd
rename:重命名文件
語法格式:rename from to file
from:代表需要替代或者需要處理的字符(一般是文件名的一部分)
to:把前面的from代表的內容替換為to代表的內容
file:需要處理的文件。
[root@liujianfan 06:24:47 /test]# ls
access_www_2018-10-01.log access_www_2018-10-08.log access_www_2018-10-15.log access_www_2018-10-22.log
access_www_2018-10-02.log access_www_2018-10-09.log access_www_2018-10-16.log access_www_2018-10-23.log
access_www_2018-10-03.log access_www_2018-10-10.log access_www_2018-10-17.log access_www_2018-10-24.log
access_www_2018-10-04.log access_www_2018-10-11.log access_www_2018-10-18.log access_www_2018-10-25.log
access_www_2018-10-05.log access_www_2018-10-12.log access_www_2018-10-19.log
access_www_2018-10-06.log access_www_2018-10-13.log access_www_2018-10-20.log
access_www_2018-10-07.log access_www_2018-10-14.log access_www_2018-10-21.log
[root@liujianfan 06:24:48 /test]# rename .log .jpg *
[root@liujianfan 06:25:14 /test]# ls
access_www_2018-10-01.jpg access_www_2018-10-08.jpg access_www_2018-10-15.jpg access_www_2018-10-22.jpg
access_www_2018-10-02.jpg access_www_2018-10-09.jpg access_www_2018-10-16.jpg access_www_2018-10-23.jpg
access_www_2018-10-03.jpg access_www_2018-10-10.jpg access_www_2018-10-17.jpg access_www_2018-10-24.jpg
access_www_2018-10-04.jpg access_www_2018-10-11.jpg access_www_2018-10-18.jpg access_www_2018-10-25.jpg
access_www_2018-10-05.jpg access_www_2018-10-12.jpg access_www_2018-10-19.jpg
access_www_2018-10-06.jpg access_www_2018-10-13.jpg access_www_2018-10-20.jpg
access_www_2018-10-07.jpg access_www_2018-10-14.jpg access_www_2018-10-21.jpg
chattr:改變文件的擴展屬性
語法格式:chattr [選項] [模式] [文件或者目錄]
選項參數說明:
參數選項 | 功能描述 |
---|---|
-R | 遞歸更改目錄屬性 |
-V | 顯示命令執行過程 |
模式參數說明:
參數選項 | 功能描述 |
---|---|
+ | 增加參數 |
- | 移除參數 |
= | 更新為指定的參數 |
A | 告訴系統不要修改這個文件的最後訪問時間 |
a | 只能向文件中添加數據,而不能刪除,多用於服務器日誌文件 |
i | 設定文件不能刪除、改名、寫入或者增加內容 |
設置只能往文件裏面追加內容,但是不能刪除文件:
[root@liujianfan 07:13:09 ~/test2]# chattr +a chattr.txt
[root@liujianfan 07:13:24 ~/test2]# lsattr chattr.txt
-----a---------- chattr.txt
[root@liujianfan 07:13:28 ~/test2]#
root用戶也無法刪除,只能追加內容:
[root@liujianfan 07:13:28 ~/test2]# rm -f chattr.txt
rm: cannot remove ‘chattr.txt’: Operation not permitted
[root@liujianfan 07:14:28 ~/test2]# echo hello >> chattr.txt
[root@liujianfan 07:14:49 ~/test2]# cat chattr.txt
hello
[root@liujianfan 07:14:53 ~/test2]#
給文件加鎖,設置為只讀:
[root@liujianfan 07:16:34 ~/test2]# touch chattr2.txt
[root@liujianfan 07:17:00 ~/test2]# chattr +i chattr2.txt
[root@liujianfan 07:17:09 ~/test2]# rm -f chattr2.txt
rm: cannot remove ‘chattr2.txt’: Operation not permitted
[root@liujianfan 07:17:23 ~/test2]# echo hi >> chattr2.txt
-bash: chattr2.txt: Permission denied
[root@liujianfan 07:17:34 ~/test2]#
Linux文件和目錄操作命令