-
-
- Linux文件查看和管理類命令
- 1. cp命令
- 2. mv命令
- 3. rm命令
- 4. install命令
- 5. stat命令
- 6. touch命令
- Linux文件查看和管理類命令
-
1. cp命令
cp – copy files and directories
cp [OPTION]… [-T] SOURCE DEST
cp [OPTION]… SOURCE… DIRECTORY
cp [OPTION]… -t DIRECTORY SOURCE…
- 命令使用描述
copy操作分為單源復制和多源復制兩種。- 單源復制
cp [OPTION]… [-T] SOURCE DEST
兩種情況:- 如果DEST不存在,則實現創建此文件,并復制源文件的數據流至DEST中;
- 如果DEST存在:
1) DEST是目錄文件:則現在目錄下創建一個源文件同名文件,并復制其數據流至目標文件。非目錄文件:則覆蓋目標文件;
2) DEST是非目錄文件:則覆蓋目標文件。
- 多源復制(目標必須為目錄)
cp [OPTION]… SOURCE… DIRECTORY
cp [OPTION]… -t DIRECTORY SOURCE…
兩種情況:- 如果DEST不存在:無法執行
- 如果DEST存在:
1) DEST是目錄文件:分別復制每個文件至目標目錄中,并保持原名
1) DEST是非目錄文件:無法執行
- 單源復制
- 常用選項
-i:–interactive:交互式復制,覆蓋前提醒用戶確認;
-f:–force:強制覆蓋目標文件;
-r,-R:–recursive:遞歸復制目錄;
-d:復制符號鏈接文件本身,而非其指向的源文件;
-a:=-dR,=–preserve=all,archive,用于實現歸檔(完全復制);
–preserve=mode:權限
ownership:屬主和屬組
timestamp:時間戳
context:安全標簽
xattr:擴展屬性
links:符號鏈接
all:上述所有屬性
- 舉例
- 復制/tmp/cpdir/cptest到/tmp下,并保留其所有屬性
使用-a或–preserve=all- cp -a /tmp/cpdir/cptest /tmp/
[root@localhost ~]# ll /tmp/cpdir/cptest
-rw-rw-r--. 1 test1 test1 0 Mar 11 17:00 /tmp/cpdir/cptest
[root@localhost ~]# cp -a /tmp/cpdir/cptest /tmp
[root@localhost ~]# ll /tmp/cptest
-rw-rw-r--. 1 test1 test1 0 Mar 11 17:00 /tmp/cptest - cp –preserve=all /tmp/cpdir/cptest /tmp/
[root@localhost ~]# cp --preserve=all /tmp/cpdir/cptest /tmp/
[root@localhost ~]# ll /tmp/cptest
-rw-rw-r--. 1 test1 test1 0 Mar 11 17:00 /tmp/cptest
- cp -a /tmp/cpdir/cptest /tmp/
- 復制/tmp/cptest.lnk鏈接文件本身(而非源文件)至/tmp/cpdir/
使用-d或–preserve=links- cp -d /tmp/cptest.lnk /tmp/cpdir/
[root@localhost tmp]# ll cptest.lnk
lrwxrwxrwx. 1 root root 6 Mar 11 17:06 cptest.lnk -> cptest
[root@localhost tmp]# cp -d /tmp/cptest.lnk /tmp/cpdir/
[root@localhost tmp]# ll /tmp/cpdir/cptest.lnk
lrwxrwxrwx. 1 root root 6 Mar 11 17:07 /tmp/cpdir/cptest.lnk -> cptest - cp –preserve=links /tmp/cptest.lnk /tmp/cpdir/
[root@localhost tmp]# cp --preserve=links /tmp/cptest.lnk /tmp/cpdir/
[root@localhost tmp]# ll cpdir/cptest.lnk
-rw-r--r--. 1 root root 0 Mar 11 17:11 cpdir/cptest.lnk
這個命令執行了,但是cptest.lnk顯示是普通文件,而不是鏈接文件,不得其解。
- cp -d /tmp/cptest.lnk /tmp/cpdir/
- 復制/tmp/cpdir/cptest到/tmp下,并保留其所有屬性
2. mv命令
mv [OPTION]… [-T] SOURCE DEST
mv [OPTION]… SOURCE… DIRECTORY
mv [OPTION]… -t DIRECTORY SOURCE…
- 常用選項
-i:交互
-f:force強制
- 舉例
- 更改/tmp/mvtest文件名為mvtest1,要求使用交互方式。
使用-i選項- mv -i /tmp/mvtest /tmp/mvtest1
[root@localhost tmp]# mv -i /tmp/mvtest /tmp/mvtest1
[root@localhost tmp]# ls mvtest1
mvtest1
因為目標文件不存在,所以沒有詢問。
再次創建一個文件mvtest,將它更名為mvtest1,因為這時mvtest1已經存在,所以出現詢問:
[root@localhost tmp]# touch mvtest
[root@localhost tmp]# mv /tmp/mvtest /tmp/mvtest1
mv: overwrite ‘/tmp/mvtest1’? y
mv本身是mv -i的alias,所以不用加-i也同樣會詢問。
[root@localhost tmp]# alias mv
alias mv='mv -i'
- mv -i /tmp/mvtest /tmp/mvtest1
- 用/tmp/mvtest2強制覆蓋/tmp/mvtest1。
使用-f選項- mv -f /tmp/mvtest2 /tmp/mvtest1
[root@localhost tmp]# cat mvtest1 mvtest2
I am mvtest1
I am mvtest2
[root@localhost tmp]# mv -f mvtest2 mvtest1
[root@localhost tmp]# ls mvtest*
mvtest1
[root@localhost tmp]# cat mvtest1
I am mvtest2
- mv -f /tmp/mvtest2 /tmp/mvtest1
- 更改/tmp/mvtest文件名為mvtest1,要求使用交互方式。
3. rm命令
rm [OPTION]… FILE…
- 常用選項
-i:interactive
-f:force
-r:recursive
- 舉例
- 強制刪除/tmp/rmdir下的所有文件和子目錄
使用選項-r(遞歸)和-f(強制)- rm -rf /tmp/rmdir
[root@localhost /]# ls rmdir
passwd pcp.conf pcp.sh php.ini printcap protocols
passwd- pcp.env pear.conf pinforc profile
[root@localhost /]# rm -rf rmdir
[root@localhost /]# ls rmdir
ls: cannot access rmdir: No such file or directory
- rm -rf /tmp/rmdir
- rm在bash中是rm -i的alias
[root@localhost /]# alias rm
alias rm='rm -i'
-i選項的使用都一樣,不做示例。
- 強制刪除/tmp/rmdir下的所有文件和子目錄
4. install命令
install – copy files and set attributes
單源復制:
install [OPTION]… [-T] SOURCE DEST
多源復制:
install [OPTION]… SOURCE… DIRECTORY
install [OPTION]… -t DIRECTORY SOURCE…
創建目錄:
install [OPTION]… -d DIRECTORY…
- 命令使用描述
install命令類似于cp,但可以復制文件的同時設置目標文件的屬性。 - 常用選項
-m:–mode=MODE:設定目標文件權限(默認為755)
-o:–owner=OWNER:設定目標文件屬主
-g, –group=GROUP:設定目標文件屬組
- 舉例
- 比如現在復制/etc/vimrc到/tmp/installtest/路徑下,并設置文件的權限為屬主可讀寫可執行、屬組可讀可執行、其他只讀,設置文件屬主為user2,屬組為test1
- install -m 754 -o user2 -g test1 /etc/vimrc /tmp/installtest
[root@localhost tmp]# install -m 754 -o user2 -g test1 /etc/vimrc /tmp/installtest
[root@localhost tmp]# ll installtest/vimrc
-rwxr-xr--. 1 user2 test1 1982 Mar 17 20:54 installtest/vimrc
如果不指定-m參數,默認設置文件權限為755:
[root@localhost installtest]# install -o user2 -g test1 /etc/vimrc /tmp/installtest
[root@localhost installtest]# ll
total 4
-rwxr-xr-x. 1 user2 test1 1982 Mar 17 20:57 vimrc
- install -m 754 -o user2 -g test1 /etc/vimrc /tmp/installtest
- 比如現在復制/etc/vimrc到/tmp/installtest/路徑下,并設置文件的權限為屬主可讀寫可執行、屬組可讀可執行、其他只讀,設置文件屬主為user2,屬組為test1
- Tips
- install命令不能復制目錄。
5. stat命令
stat – display file or file system status
stat [OPTION]… FILE…
- 命令使用描述
每一個文件都有兩類數據:元數據和數據本身- 元數據
metadata,使用stat
看到的就是元數據。
元數據描述文件的屬性,如訪問權限、文件擁有者、文件數據塊的分布信息(inode)、時間戳等。
文件的時間戳信息由三種:- atime:access time:訪問時間
- mtime:modify time:更改時間(數據本身改變)
- ctime:change time:改動時間(元數據改變),不能手動修改
- 數據
data,使用cat
等命令查看的是數據。
- 元數據
- 舉例
- 使用stat命令查看/tmp/stattest文件的元數據
- stat /tmp/stattest
[root@localhost tmp]# stat stattest
File: ‘stattest’
Size: 0 Blocks: 0 IO Block: 4096 regular empty file
Device: 801h/2049d Inode: 1166347 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Context: unconfined_u:object_r:user_tmp_t:s0
Access: 2018-03-17 20:13:40.790174621 +0800
Modify: 2018-03-17 20:13:40.790174621 +0800
Change: 2018-03-17 20:13:40.790174621 +0800
Birth: -
Access、Modify、Change分別是訪問時間、更改時間和改動時間,因為文件時剛創建的,沒有被訪問、更改和改動,三個時間是一樣的。
- stat /tmp/stattest
- 使用stat命令查看/tmp/stattest文件的元數據
6. touch命令
touch
touch – change file timestamps
touch [OPTION]… FILE…
可以改變文件的atime和mtime,無法改變ctime
- 命令使用描述
touch命令用來創建文件、修改目錄或文件的時間戳信息。 - 常用選項
-c:指定的文件路徑不存在時,不予創建;
-a:只更改access time;
-m:只更改modify time;
-t STAMP:更改為指定時間,而不是當前時間use [[CC]YY]MMDDhhmm[.ss] instead of current time
- 舉例
- 在/tmp下創建一個空文件touchtest
- touch /tmp/touchtest
[root@localhost tmp]# touch /tmp/touchtest
[root@localhost tmp]# ll /tmp/touchtest
-rw-r--r--. 1 root root 0 Mar 17 20:25 /tmp/touchtest
- touch /tmp/touchtest
- 分別修改/tmp/touchtest的訪問時間和修改時間為當前時間
- touch -a /tmp/touchtest
- touch -m /tmp/touchtest
[root@localhost tmp]# touch -a touchtest
[root@localhost tmp]# stat touchtest
File: ‘touchtest’
Size: 0 Blocks: 0 IO Block: 4096 regular empty file
Device: 801h/2049d Inode: 1166348 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Context: unconfined_u:object_r:user_tmp_t:s0
Access: 2018-03-17 20:26:29.480238254 +0800
Modify: 2018-03-17 20:25:02.158231025 +0800
Change: 2018-03-17 20:26:29.480238254 +0800
Birth: -
可以看到訪問時間已被更改,而且,因為修改了訪問時間,相當于對文件做了改動,所以改動時間也隨之更改。
- 修改/tmp/touchtest的訪問時間和修改時間為2018-3-10-08:08:08
- touch -mat 201803100808.08 /tmp/touchtest
[root@localhost tmp]# touch -mat 201803100808.08 /tmp/touchtest
[root@localhost tmp]# stat touchtest
File: ‘touchtest’
Size: 0 Blocks: 0 IO Block: 4096 regular empty file
Device: 801h/2049d Inode: 1166348 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Context: unconfined_u:object_r:user_tmp_t:s0
Access: 2018-03-10 08:08:08.000000000 +0800
Modify: 2018-03-10 08:08:08.000000000 +0800
Change: 2018-03-17 20:30:59.678260621 +0800
Birth: -
- touch -mat 201803100808.08 /tmp/touchtest
- 在/tmp下創建一個空文件touchtest
本文來自投稿,不代表Linux運維部落立場,如若轉載,請注明出處:http://www.www58058.com/92595