linux 中一切皆文件,我們所做的一切都是和文件打交道。
文件分為兩部分:元數據和數據
元數據: 即真實數據的屬性??捎?strong> stat 命令查看
stat [option]… FILE…
[root@black ~]# stat /etc/passwd
File: ‘/etc/passwd’
Size: 2302 Blocks: 8 IO Block: 4096 regular file
Device: 803h/2051d Inode: 10244448 Links: 1
Access: (0644/-rw-r–r–) Uid: ( 0/ root) Gid: ( 0/ root)
Context: system_u:object_r:passwd_file_t:s0
Access: 2016-06-18 19:52:01.243237019 -0400
Modify: 2016-04-23 09:47:20.643714195 -0400
Change: 2016-04-23 09:47:20.650714195 -0400
Birth: –
以上信息包括了文件大小,所占的塊數 ,所占塊大小, 文件類型, 權限, 所屬屬主,屬組,context值
文件訪問時間,文件內容修改時間,文件改變的時間。
其中access,modify, change 為文件的時間戳,可以用touch 命令來修改
touch -a FILE 只是修改文件的atime
touch -m FILE 只是修改文件的mtime
注: 當atime或mtime 其中之一任意改變,ctime都會改變。
touch 命令同時還可以創建文件
用法:touch FILE
如果名字后面想跟上創建文件時的時間,可以引用date命令來實現。
e.g. 在/tmp目錄下創建已tfile開頭,后面接當前日期的文件,格式如tfile-2015-5-27-09-22-33
touch tfile-$(date +%F-%H-%M-%S)
當我們每次需要創建該類型的文件時,都得輸入這么長的命令,為了方便,我們可以把上面那條命令定義一個別名,以后可以直接輸入別名就可以達到該效果。
定義命令別名 tfile
當前shell生效 :
alias tfile=‘touch tfile-$(date +%F-%H-%M-%S)’
如果對所有用戶生效,可以編輯/etc/bashrc ,在最后一行加上如上命令。
當我們管理文件時,首先要知道自己所處的位置,然后開始工作
pwd : 顯示當前的在哪個目錄下,默認登錄進系統,都處于登錄用戶的家目錄下。
mkdir: 創建目錄,目錄也是文件。
用法 mkdir [option]… FILE…
rmdir: 只能刪除空目錄。一般刪除目錄和文件用rm命令。
例子:
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 -p /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}}
當我們執行完命令后,我們可以查看命令執行狀態返回值來查看命令是否成功。
echo $?
當值是0時,表示命令執行成功,
當值是1-255時,表示命令執行失敗。
通配符與正則表達式
當我們需要查看目錄中某些特定需求的文件時,此時就需要通過glob(通配符)或者正則表達式的幫助來完成。
我們可以通過幾個列子來總結下。
例子:
1、顯示/var目錄下所有以1開頭,以一個小寫字母結尾,且中間至少出現一位數字(可以有其它字符)的文件或目錄。
解:
ls -R /var | grep "^1.*[0-9].*[a-z]$"
2、顯示/etc目錄下,以任意一個數字開頭,且以非數字結尾的文件或目錄。
解:
ls -R /etc | grep "^[[:digit:]].*[^[:digit:]]$"
3、顯示/etc目錄下,以非字母開頭,后面跟了一個字母以及其它任意長度任意字符的文件或目錄。
解:
ls -R /etc/ | grep "^[^[:alpha:]][[:alpha:]].*" | grep -v "^\ /.*"
一般來說,如果是在一個目錄下面查找特定需求的文件,只要用到通配符就好,但是上面題目中所要求要查找出所有的文件和目錄,這里只能是用到正則表達式了,也許是有別的方法,以后再研究,這里總結下通配符和正則表達式。
通配符:即shell中為了實現文件名的匹配,查找類似的文件,即打牌中的賴子。
* : 匹配任意長度的任意字符。
? : 匹配任意一個字符。
[] : 匹配指定范圍的一個字符。
[^] : 匹配范圍外的字符。
專用的字符合集:
[:alnum:] : 數字或字母
[:alpha:] : 字母
[:digit:] : 數字
[:lower:] : 小寫字母
[:graph:] : 除了空格和控制字符外的所有字符
[:punct:] : 標點符號
[:upper:] : 大寫字母
正則表達式主要是對文本的匹配,像上面的幾道題都是先顯示出來目錄下的所有文件,相當于把結果放到了一個文本中,再通過正則表達式來匹配結果。
字符匹配: . 表示任意單個字符 ; [] [^] 字符合集與通配符一樣。
次數匹配:
* 匹配前面的字符任意次數 .* 表示任意長度的任意字符
\? 匹配前面字符0次或1次
\+ 匹配前面字符至少1次
\{m\} 匹配前面字符m次
\{m,n\} 匹配前面字符至少m次,至多n次。
位置匹配:
^ :表示以什么開頭
$ : 表示以什么結尾
\< :匹配單詞詞首
\> : 匹配單詞詞尾。
文件的復制移動刪除
cp 復制文件和文件夾
語法 : cp [option]… SOURCE DEST (復制單個源到目標)
cp [option]… SOURCE… DEST (復制多個源到目標)
注: … 表示可以存在多個
例子:
1. 復制/etc目錄下所有以p開頭,以非數字結尾的文件或目錄到/tmp/mytest1目錄中。
解:此時就需要通過通配符來完成該操作了。
mkdir /tmp/mytest{1,2,3} cp -r /etc/p*[^[:digit:]] /tmp/mytest1
2 . 復制/etc目錄下所有以.d結尾的文件或目錄至/tmp/mytest2目錄中。
解:
cp -r /etc/*.d /tmp/mytest2
3. 復制/etc/目錄下所有以l或m或n開頭,以.conf結尾的文件至/tmp/mytest3目錄中。
解:
cp -r /etc/[l,m,n]*.conf /tmp/mytest3
cp的常用選項:
-r ,-R: 遞歸復制,復制目錄下所有目錄和文件
-i : 交互式
-a : 歸檔,保留元數據屬性,相當于-dR -preserv=all
-d : 不復制真實的文件,還是保持該文件為鏈接文件
-L : 復制文件真實內容,文件不存為鏈接文件
-p : 保留 屬主,屬組,時間戳
mv 移動文件夾(用于改文件名)
語法 : mv [option]… SOURCE DEST (移動單個源到目標)
mv [option]… SOURCE… DEST (移動多個源到目標)
rm 刪除文件或文件夾
語法: rm [option]… FILE…
原創文章,作者:Cache,如若轉載,請注明出處:http://www.www58058.com/18781
寫的很棒,但是是不是沒寫完啊?在多關注一些排版方面的技巧