Linux 文件管理命令
cp命令
功能
Linux 系統中cp命令是用來復制目錄/文件的。
概要
單源復制
cp [OPTION]... [-T] SOURCE DEST
-
DEST不存在
則事先創建此文件,并復制源文件的數據流至DEST中; -
DEST存在
-
DEST是非目錄文件:則覆蓋目標文件;
-
DEST是目錄文件:則先在DEST目錄下創建一個與源文件同名的文件,并復制其數據流;
多源復制
cp [OPTION]... SOURCE... DIRECTORY cp [OPTION]... -t DIRECTORY SOURCE...
-
DEST不存在
錯誤 -
DEST存在
-
DEST是非目錄文件:錯誤;
-
DEST是目錄文件:分別復制每個文件至目標目錄中,并保持原名;
選項
-
-a,–archive 保留鏈接和文件屬性,遞歸拷貝目錄,相當于下面的d、p、r三個選項組合。
-
-d 拷貝時保留鏈接。
-
-f,–force 如果目標文件無法打開則將其移除并重試(當 -n 選項 存在時則不需再選此項)。
-
-i,–interactive 覆蓋目標文件前將給出確認提示,屬交互式拷貝。
-
-p,–preserve 復制源文件內容后,還將把其修改時間和訪問權限也復制到新文件中。
-
-P,–no-dereference 不跟隨源文件中的符號鏈接
-
-r 若源文件是一目錄文件,此時cp將遞歸復制該目錄下所有的子目錄和文件。當然,目標文件必須為一個目錄名。
-
-l,–link 不作拷貝,只是鏈接文件。
-
-s 只創建符號鏈接而不復制文件。
-
-u 只在源文件文件比目標文件新,或目標文件不存在時才進行復制 。
舉例
-
單源復制
# cp /etc/fstab abc # cp /etc/fstab . # ll 總用量 8 -rw-r--r-- 1 root root 465 12月 11 16:27 abc -rw-r--r-- 1 root root 465 12月 11 16:27 fstab
-
多源復制
# cp /etc/fstab /etc/init.d/functions dasheng/ # ll dasheng/ 總用量 20 -rw-r--r-- 1 root root 465 12月 11 16:29 fstab -rw-r--r-- 1 root root 13948 12月 11 16:29 functions
mv 命令
功能
移動目錄/文件和更改目錄/文件名。
概要
mv [OPTION]... [-T] SOURCE DEST mv [OPTION]... SOURCE... DIRECTORY mv [OPTION]... -t DIRECTORY SOURCE..
選項
-
-f, –force 覆蓋前不詢問
-
-i, –interactive 覆蓋前詢問
舉例
# mv abc dasheng/ # mv fstab dasheng/fstab.dasheng # ll dasheng/ 總用量 28 -rw-r--r-- 1 root root 465 12月 11 16:27 abc -rw-r--r-- 1 root root 465 12月 11 16:29 fstab -rw-r--r-- 1 root root 465 12月 11 16:27 fstab.dasheng -rw-r--r-- 1 root root 13948 12月 11 16:29 functions
rm 命令
功能
刪除目錄或者文件。
概要
rm [OPTION]... FILE...
選項
-
-f, –force 忽略不存在的文件,從不給出提示。
-
-i, –interactive 進行交互式刪除
-
-r, -R, –recursive 指示rm將參數中列出的全部目錄和子目錄均遞歸地刪除。
舉例
# rm dasheng/abc rm:是否刪除普通文件 "dasheng/abc"?y # rm -r dasheng/ rm:是否進入目錄"dasheng/"? y rm:是否刪除普通文件 "dasheng/fstab"?y rm:是否刪除普通文件 "dasheng/functions"?y rm:是否刪除普通文件 "dasheng/fstab.dasheng"?y rm:是否刪除目錄 "dasheng/"?y
在上面的使用中如果選項不帶-f 則需要我們輸入y來確認是否刪除文件。出現這種情況是由于安裝系統后CentOS 會自動將root用戶的alias 添加alias mv='mv -i'
和alias rm='rm -i'
這兩個。而普通用戶并不會定于這兩個alias,所以我們在日常使用中如果使用了刪除的命令一定要慎重,在Linux中是沒有回收站這個東西的,如果誤刪除重要數據請立即停止該系統的數據寫入操作,找相關的人員進行恢復。在日常維護中我們可以把rm 命令改成mv 命令來自定義文件的回收站。
自定義回收站
# tail -2 ~/.bashrc myrm(){ D=/tmp/$(date +%Y%m%d); mkdir -p $D; mv "$@" $D && echo "moved to $D ok"; } alias rm='myrm' # ls fstab grub2.cfg # rm -f ./* moved to /tmp/20161211 ok # ll /tmp/20161211/ 總用量 12 -rw-r--r--. 1 root root 465 5月 1 2016 fstab -rw-r--r-- 1 root root 4265 12月 11 17:24 grub2.cfg
將配置寫入到本地用戶的.bashrc中,然后重新進入shell 進行刪除操作就可以實現自定義回收站的操作了。如果不想使用此功能則在刪除時候使用/bin/rm 進行刪除。
命令的執行狀態結果
在shell中 執行命令的狀態返回結果分為成功和失敗,根據執行的成功與否從而使返回的狀態碼分為下面兩類:
-
成功:0
-
失?。?-255
在命令執行完成之后,其狀態返回值保存于bash的特殊變量$?中;我們可以在命令執行完成以后立即使用echo $?
來查看上條命令執行的成功與否。
# date 2016年 12月 11日 星期日 18:05:46 CST # echo $? # cat /etc/abcde cat: /etc/abcde: 沒有那個文件或目錄 # echo $? 1
命令行展開
特性
-
~:自動展開為用戶的家目錄,或指定的用戶的家目錄;
-
{}:可承載一個以逗號分隔的路徑列表,并能夠將其展開為多個路徑;
舉例
# cp /etc/init.d/functions{,.bak} # ll /etc/init.d/functions* -rw-r--r--. 1 root root 13948 9月 16 2015 /etc/init.d/functions -rw-r--r-- 1 root root 13948 12月 11 18:10 /etc/init.d/functions.bak
練習
-
創建/tmp/test/目錄下的:a_c, a_d, b_c, b_d
# mkdir /tmp/test/{a,b}_{c,d} # ls /tmp/test/ a_c a_d b_c b_d
-
創建/tmp/mylinux目錄下的
mylinux/ ├── bin ├── boot │ └── grub ├── dev ├── etc │ ├── rc.d │ │ └── init.d │ └── sysconfig │ └── network-scripts ├── lib │ └── modules ├── lib64 ├── proc ├── sbin ├── sys ├── tmp ├── usr │ └── local │ ├── bin │ └── sbin └── var ├── lock ├── log └── run
使用tree 命令之前請yum 安裝tree 命令。
# mkdir -pv /tmp/mylinux/{bin,boot/grub,dev,etc/{rc.d/init.d,sysconfig/network-scripts},lib/modules,lib64,proc,sbin,sys,tmp,usr/local/{bin,sbin},var/{lock,log,run}} # tree /tmp/mylinux/ /tmp/mylinux/ ├── bin ├── boot │ └── grub ├── dev ├── etc │ ├── rc.d │ │ └── init.d │ └── sysconfig │ └── network-scripts ├── lib │ └── modules ├── lib64 ├── proc ├── sbin ├── sys ├── tmp ├── usr │ └── local │ ├── bin │ └── sbin └── var ├── lock ├── log └── run 24 directories, 0 files
Linux 文件的元數據
任何文件系統中的數據分為數據和元數據。數據是指普通文件中的實際數據,而元數據指用來描述一個文件的特征的系統數據,諸如訪問權限、文件擁有者以及文件數據塊的分布信息(inode…)等等。
通過ls 命令查文件的元數據
# ll abc -rw-r--r-- 1 root root 14 12月 7 23:07 abc
上面通過ls 命令顯示的元數據可以分為:文件的使用權限、屬主、屬組、文件大小、時間戳、文件名。如果想詳細的查看文件的元數據可以使用stat命令。
# stat abc 文件:"abc" 大?。?4 塊:8 IO 塊:4096 普通文件 設備:fd00h/64768d Inode:34907362 硬鏈接:1 權限:(0644/-rw-r--r--) Uid:( 0/ root) Gid:( 0/ root) 最近訪問:2016-12-07 23:07:19.996507082 +0800 最近更改:2016-12-07 23:07:17.934411393 +0800 最近改動:2016-12-07 23:07:17.936411487 +0800 創建時間:-
修改文件時間戳touch
選項
-
-a 只更改訪問時間
-
-c, –no-create 不創建任何文件
-
-d, –date=字符串 使用指定字符串表示時間而非當前時間
-
-m 只更改修改時間
-
-r, –reference=文件 使用指定文件的時間屬性而非當前時間
-
-t STAMP 使用[[CC]YY]MMDDhhmm[.ss] 格式的時間而非當前時間
舉例
# stat abc File: ‘abc’ Size: 14 Blocks: 8 IO Block: 4096 regular file Device: fd00h/64768d Inode: 34907362 Links: 1 Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root) Access: 2016-12-11 18:53:13.591961660 +0800 Modify: 2016-12-11 18:53:57.793059882 +0800 Change: 2016-12-11 18:53:57.793059882 +0800 Birth: - # touch -a abc # stat abc File: ‘abc’ Size: 14 Blocks: 8 IO Block: 4096 regular file Device: fd00h/64768d Inode: 34907362 Links: 1 Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root) Access: 2016-12-11 18:59:58.232381499 +0800 Modify: 2016-12-11 18:53:57.793059882 +0800 Change: 2016-12-11 18:59:58.232381499 +0800 Birth: - # touch -m abc # stat abc File: ‘abc’ Size: 14 Blocks: 8 IO Block: 4096 regular file Device: fd00h/64768d Inode: 34907362 Links: 1 Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root) Access: 2016-12-11 18:59:58.232381499 +0800 Modify: 2016-12-11 19:00:41.378414225 +0800 Change: 2016-12-11 19:00:41.378414225 +0800 Birth: -
通過上面的例子我們可以通過 -a來修改Access time或者-m修改Modify time,其文件的Change time都會改變。
命令別名和執行結果
命令別名
-
獲取所有可用別名的定義:
# alias
-
定義別名:
alias NAME='COMMAND'
-
撤銷別名:
unalias NAME
上面的別名只是在當前shell有效,如果想全局有效,請把別名寫在/etc/bashrc中,如果只想讓當前用戶有效則寫在~/.bashrc 文件中。
舉例
# alias cdnet='cd /etc/sysconfig/network-scripts/' # alias alias cdnet='cd /etc/sysconfig/network-scripts/' alias cp='cp -i' alias egrep='egrep --color=auto' alias fgrep='fgrep --color=auto' alias grep='grep --color=auto' alias l.='ls -d .* --color=auto' alias ll='ls -l --color=auto' alias ls='ls --color=auto' alias mv='mv -i' alias rm='rm -i' alias which='alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde' [root@hpf-centos7 ~]# cdnet [root@hpf-centos7 network-scripts]#
命令引用
在shell中使用命令的執行結果可以使用下面的方法:
-
$(COMMAND)
-
`COMMAND`
舉例
# rpm -qf `which tree` tree-1.6.0-10.el7.x86_64
練習題
1.顯示/var目錄下所有以l開頭,以一個小寫字母結尾,且中間至少出現一位數字(可以有其它字符)的文件或目錄。
# ls -d /var/l*[[:lower:]]
2.顯示/etc目錄下,以任意一個數字開頭,且以非數字結尾的文件或目錄。
# ls -d /etc/[[:digit:]][^[:digit:]]
3.顯示/etc目錄下,以非字母開頭,后面跟了一個字母以及其它任意長度任意字符的文件或目錄。
# ls -d /etc/[^[:alpha:]][[:alpha:]]*
4.在/tmp目錄下創建以tfile開頭,后跟當前日期和時間的文件,文件名形如:tfile-2016-05-27-09-32-22。
# touch /tmp/tfile-$(date "+%F-%H-%M-%S") # touch /tmp/tfile-$(date "+%Y-%m-%d-%H-%M-%S" )
5.復制/etc目錄下所有以p開頭,以非數字結尾的文件或目錄到/tmp/mytest1目錄中。
# mkdir /tmp/mytest1 # cp -r /etc/p[^[:digit:]] /tmp/mytest1/
6.復制/etc目錄下所有以.d結尾的文件或目錄至/tmp/mytest2目錄中。
# mkdir /tmp/mytest2 # cp -r /etc/*.d /tmp/mytest2/
7.復制/etc/目錄下所有以l或m或n開頭,以.conf結尾的文件至/tmp/mytest3目錄中。
# mkdir /tmp/mytest3 # cp /etc/[lmn]*.conf /tmp/mytest3/
原創文章,作者:profibus,如若轉載,請注明出處:http://www.www58058.com/63296
贊,自定義回收站的功能不錯~~繼續加油~