1、Linux上的文件管理類命令都有哪些,其常用的使用方法及其相關示例演示。
cp即copy的簡寫,我們可以用它來復制一些文件即將,源文件的數據流復制到目的文件中。和下面要講的rm,mv,一樣都是一些非?;A的命令。關于這個命令,我們有個小竅門,那就是根據 ls file這個命令是否執行成功來判斷file文件是否存在。
關于cp,我們有一些要點要注意:
cp SRC DEST #此時SRC只有一個,且為文件
如果DEST是文件,且存在,則將源文件的內容覆蓋至DEST。如果此時為root用戶,那么默認alias cp=cp -i,
所以會出現詢問是否覆蓋文件的提醒,而此時如果是其他用戶,則默認覆蓋,不會提醒,所以得謹慎使用。如果不存在,那就簡單了,系統直接創建一個文件,然后
將源文件數據流覆蓋至DEST中。就這么簡單。
如果DEST是目錄,且存在那么就在指定目錄下創建與源文件同名的文件,并將數據流填充至新文件中。若目錄不存在,則直接報錯。
如果SRC是目錄,那么DEST必須為目錄,且必須必須使用 -r 選項。即遞歸選項,因為目錄里面也會有目錄,必須要使用遞歸選項才能正確的將SRC及其子目錄復制到DEST。注意SRC目錄是什么結構,那么在DEST中就是什么結構。
cp SRC… DEST #SRC有多個文件。且必須文件。
DEST必須是目錄,且要存在,若不存在,則直接報錯。
關于cp已經說了很多廢話,但是還是要繼續介紹一些關于cp短選項,希望各位客官不要厭煩。
-r: 遞歸,將該目錄下的所有子目錄一起復制,上面說過這事SRC為目錄是必須使用的選項
-i: 交互式命令,也已經說過了,就是當要覆蓋一個已存在文件時,出現提醒,并讓你確認。
-a: 歸檔,相當于 -dR –preserve=all
-d: –no-deference –preserve=links
–preserve[=ATTR_LIST] 保存文件元數據屬性
mode: 權限
ownership: 屬主屬組
timestamp: 時間戳
links; 鏈接
。。。
all: 所有元數據屬性
-p: –preserve=mode, ownership, timestamp
-f: force 強制復制,若已存在一個同名文件,但該文件的權限不允許復制,則刪除該文件,然后重新創建一個同名的文件。
cp講的差不多了,那么就來講講rm嗎,它是文件移動命令。它和cp很相似。以下是mv的三種形式。
mv [OPTION]… [-T] SOURCE DEST
mv [OPTION]… SOURCE… DIRECTORY
mv [OPTION]… -t DIRECTORY SOURCE…
mv也有一些有趣的短選項:
-i: 交互式: 在覆蓋文件時,發出提醒,并等待用戶響應。
-f: 強制性: 在覆蓋前,不發出提示,直接覆蓋。
下面就是rm,rm的作用是刪除文件或目錄。很簡單,只要文件存在就可以了,介紹一些簡單的選項吧。
-i: 交互式,每刪除一個文件都詢問一次,并等待回答。
-f: 強制執行,即不詢問就執行
-r: 遞歸刪除,即刪除文件,目錄即目錄中所有的內容。
2、bash的工作特性之命令執行狀態返回值和命令行展開所涉及的內容及其示例演示。
關于命令行展開的用法,主要是以下三點:
1. ~: 展開為當前用戶家目錄;
2, ~USERNAME:展開為指定用戶的家目錄;
3, /tmp/a/{x,y}: 展開為/tmp/a/x 和/tmp/a/y
[root@promote ~]# cd ~ [root@promote ~]# cd ~test [root@promote test]# mkdir -pv /tmp/a/{x,y} mkdir: created directory ‘/tmp/a’ mkdir: created directory ‘/tmp/a/x’ mkdir: created directory ‘/tmp/a/y’
命令執行狀態返回值只有兩種情況:
成功:0
失?。?1-255
$? 為上一條命令的執行狀態返回值,我們要與執行返回值相區分。
[root@promote test]# mkdir -pv /tmp/b mkdir: created directory ‘/tmp/b’ [root@promote test]# echo $? 0 [root@promote test]# mkdir -v /tmp/b mkdir: cannot create directory ‘/tmp/b’: File exists [root@promote test]# echo $? 1
3、請使用命令行展開功能來完成以下練習:
(1)、創建/tmp目錄下的:a_c, a_d, b_c, b_d
touch /tmp/{a,b}_{c,d}
(2)、創建/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
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,bin},var/{lock,log,run}}
4、文件的元數據信息有哪些,分別表示什么含義,如何查看?如何修改文件的時間戳信息。
文件的元數據信息有:屬主,屬組,時間戳
ls -l
可查看文件的元數據信息
屬主指創建該文件時的用戶
屬組至創建該文件的用戶組
時間戳分為三種,即訪問時間,修改時間,改變時間。
訪問時間 : access time (atime)
是指最后一次訪問文件的時間,修改時間: modify time(mtime). 是指最后一次修改文件內 容的時間,改變時間: change
time(ctime)是指最后一次修改文件屬性的時間。我們要重點注意一點,那就是只要訪問時間或修改時間改變了,改變時間也一定改變。
我們可以用stat目錄來查看時間戳,這個命令本意是查看的是文件的屬性,而時間戳就是文件的屬性。關于它我們還有另一個很神奇的命令,那就是touch,它可以用來改變文件的時間戳,將其變為當前時間。
touch -a FILENAME
touch -m FILENAME
當然我們也可以使用-t選項指定時間。注意-t選項一定要與時間相連。
[root@ ~] # touch -a -t 201606130101.01 /tmp/fstab
[root@ ~]# stat /tmp/fstab
File: `/tmp/fstab'
Size: 595 Blocks: 8 IO Block: 4096 regular file
Device: ca01h/51713d Inode: 396687 Links: 1
Access: (0600/-rw——-) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2016-06-13 01:01:01.000000000 +0800
Modify: 2016-06-13 01:01:01.000000000 +0800
Change: 2016-06-30 10:23:01.113221976 +0800
再強調一點,只要atime或mtime 改變了,則ctime必改變。因為時間戳也是文件的屬性。
神奇的地方來了,雖然touch是用來改變時間戳的,但它卻可以用來創建文件。好玩吧! touch FILENAME
如果不想創建文件,加個-c選項就可以了。
5、如何定義一個命令的別名,如何在命令中引用另一個命令的執行結果?
定義別名:
alias cd="cd /root"
引用另一個變量:
[root@promote ~]# echo `date` > time.out [root@promote ~]# cat time.out Thu Jul 7 00:32:54 CST 2016
6、顯示/var目錄下所有以l開頭,以一個小寫字母結尾,且中間至少出現一位數字(可以有其它字符)的文件或目錄。
ls /var/l*[[:digit:]]*[[:lower:]]
7、顯示/etc目錄下,以任意一個數字開頭,且以非數字結尾的文件或目錄。
ls /etc/[[:digit:]]*[^[:digit:]]
8、顯示/etc目錄下,以非字母開頭,后面跟了一個字母以及其它任意長度任意字符的文件或目錄。
ls /etc/[^[:alpha:]][[:alpha:]]*
9、在/tmp目錄下創建以tfile開頭,后跟當前日期和時間的文件,文件名形如:tfile-2016-05-27-09-32-22。
[root@promote tmp]# touch tfile-`date +%F-%H-%M-%S` [root@promote tmp]# ls tfile* tfile-2016-07-07 tfile-2016-07-07-10-58-08
10、復制/etc目錄下所有以p開頭,以非數字結尾的文件或目錄到/tmp/mytest1目錄中。
[root@promote tmp]# \cp -r /etc/p*[^[:digit:]] ./mytest1/
11、復制/etc目錄下所有以.d結尾的文件或目錄至/tmp/mytest2目錄中。
[root@promote tmp]# \cp -r /etc/*.d ./mytest2/ [root@promote tmp]# ls ./mytest2/ auto.master.d dracut.conf.d logrotate.d profile.d rc.d sysctl.d bash_completion.d exports.d modprobe.d rc0.d request-key.d tmpfiles.d binfmt.d gdbinit.d modules-load.d rc1.d rsyslog.d usb_modeswitch.d cgconfig.d grub.d my.cnf.d rc2.d rwtab.d xinetd.d chkconfig.d init.d oddjobd.conf.d rc3.d sane.d yum.repos.d cron.d ipsec.d pam.d rc4.d setuptool.d depmod.d ld.so.conf.d popt.d rc5.d statetab.d dnsmasq.d libibverbs.d prelink.conf.d rc6.d sudoers.d
12、復制/etc/目錄下所有以l或m或n開頭,以.conf結尾的文件至/tmp/mytest3目錄中
[root@promote tmp]# \cp -r /[lmn]* ./mytest3/ [root@promote tmp]# ls ./mytest3/ lib lib64 media mnt
原創文章,作者:21期-揚州-藍,如若轉載,請注明出處:http://www.www58058.com/21926
寫的很好,排版也很棒,加油