1. 程式人生 > >Linux文件和目錄操作命令

Linux文件和目錄操作命令

依然 -- -i 選項說明 total 安全模式 oot 入口 The

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命令不在當前指定的命令中查找
-print 將匹配到的文件輸出到標準輸出
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文件和目錄操作命令