歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux技術 >> 文件管理命令及相關知識

文件管理命令及相關知識

日期:2017/3/3 11:49:39   编辑:Linux技術

linux 中一切皆文件,我們所做的一切都是和文件打交道,總結下常用的文件管理相關命令

文件分為兩部分:元數據和數據元數據: 即真實數據的屬性。可用 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...

Copyright © Linux教程網 All Rights Reserved