Linux基礎命令之文件和目錄操作(一)
-
pwd
print working directory的縮寫,作用是顯示當前工作目錄的絕對路徑,一般進行頻繁切換路徑時使用。
-L 顯示邏輯路徑(或略軟鏈接文件),不常用。
-P 顯示物理路徑,不常用。
環境變量:PWD 功能等價於 pwd -L
[[email protected]141 etc]# cd /root
[[email protected]-141 ~]# echo $PWD
/root
-
cd
change directory的縮寫,作用是進行目錄之間的切換。
- (我是減號) 會調用環境變量OLDPWD的值,作用是切換到上一次所在的目錄路徑。
~(我是波浪線) 會調用環境標量HOME的值,用戶家目錄。作用是切換到用戶家目錄。
.. (我是兩個小數點) 作用是切換到當前目錄的上一級目錄
示例如下:
[[email protected]141 ~]# pwd # 當前路徑為家目錄
/root
[[email protected]-141 ~]# cd /server/ # 切換到/server/目錄下
[[email protected] -141 server]# pwd
/server
[[email protected]-141 server]# cd ~ # 切換回家目錄
[[email protected]-141 ~]# pwd
/root
[[email protected]-141 ~]# cd - # 切換到最近一次操作的文件路徑
/server
[[email protected]-141 server]# pwd
/server
[[email protected]-141 server]# cd .. # 切換到上一級目錄,還一種是上N級目錄,如cd ../../../../../..N/
[[email protected] -141 /]# pwd
/
[[email protected]-141 /]# echo $HOME # 輸出環境變量家目錄的路徑
/root
[[email protected]-141 /]# echo $OLDPWD # 輸出環境變量最近一次操作的文件路徑
/server
相對路徑:不是從根目錄開始的路徑,如,data/,tools/等。
絕對路徑:從根目錄開始的文件路徑,如,/root,/etc等,另,這個符號 " / "表示根。
PS:這個命令熟悉了之後,可以在任意目錄之間穿梭。
-
tree
以樹形結構列出指定目錄下所有文件,子目錄和子目錄中的文件。
-a # all顯示所有文件,包括隱藏文件(以“.”開頭的文件)。
-d # directory,只顯示目錄。
-L level # 顯示目錄的最大層數,level為大於0的正整數。
-f # 顯示文件的全路徑。統計系統內軟件包,可能會用到。
-i # 不顯示樹枝,常與-f參數配合使用。
# 先確認系統是否已經安裝了此命令
[[email protected]141 ~]# rpm -qa tree # 查詢tree命令是否安裝 tree-1.5.3-3.el6.x86_64
[[email protected] ~]# yum -y install tree # 如果上一條沒有結果顯示,使用此條命令進行安裝
# 字符集亂碼問題解決
1.命令行操作
LANG=en_US.UTF-8
2.編輯字符集文件
vim /etc/sysconfig/i18n
[[email protected] ~]# cd ~ # 切換到家目錄下
[[email protected] ~]# tree # 不加參數情況下,會列出當前目錄下的所有文件(除了隱藏文件)
├── anaconda-ks.cfg
├── install.log ├── install.log.syslog └── youhua.sh 0 directories, 4 files
[[email protected]-141 ~]# tree -a # 列出所有目錄和文件,包括隱藏文件 . ├── anaconda-ks.cfg ├── .bash_history ├── .bash_logout ├── .bash_profile ....省略好幾行... ├── .viminfo └── youhua.sh 2 directories, 12 files
[[email protected]-141 ~]# tree -L 1 / # 在根目錄下的一級子目錄 / ├── application ├── backup ...省略好幾行... ├── usr └── var 24 directories, 0 files
[[email protected]-141 ~]# tree -d /etc/ # /etc/目錄下所有子目錄 /etc/ ├── dbus-1 │ ├── session.d │ └── system.d ├── default ├── hal │ └── fdi │ ├── information │ ├── policy │ └── preprobe
...省略好幾行... │ ├── ca-trust │ │ ├── extracted │ │ │ ├── java │ │ │ ├── openssl │ │ │ └── pem │ │ └── source │ │ ├── anchors │ │ └── blacklist └── yum.repos.d 191 directories
[[email protected]-141 ~]# tree -L 1 -f /boot/ # 顯示內容的完整路徑 /boot ├── /boot/config-2.6.32-696.el6.x86_64 ├── /boot/efi ├── /boot/grub ├── /boot/initramfs-2.6.32-696.el6.x86_64.img ├── /boot/lost+found ├── /boot/symvers-2.6.32-696.el6.x86_64.gz ├── /boot/System.map-2.6.32-696.el6.x86_64 └── /boot/vmlinuz-2.6.32-696.el6.x86_64 3 directories, 5 files
[[email protected]-141 ~]# tree -L 1 -fi /boot/ # 不顯示枝桿信息 /boot /boot/config-2.6.32-696.el6.x86_64 /boot/efi /boot/grub /boot/initramfs-2.6.32-696.el6.x86_64.img /boot/lost+found /boot/symvers-2.6.32-696.el6.x86_64.gz /boot/System.map-2.6.32-696.el6.x86_64 /boot/vmlinuz-2.6.32-696.el6.x86_64 3 directories, 5 files
-
mkdir
make directory的縮寫,作用是創建目錄,若要創建的目錄已經存在,則會提示,不會繼續創建。同時還可以創建多級目錄。
-p # 遞歸創建目錄,就是一級一級的去創建需要的目錄。如果目錄已經存在了,也不會進行告知。比較常用
-m # 設置新創建目錄的默認目錄對應的權限。
-v # 顯示創建目錄的過程
[[email protected]141 ~]# ls anaconda-ks.cfg install.log install.log.syslog youhua.sh [[email protected]-141 ~]# mkdir data # 此時目錄已經創建 [[email protected]-141 ~]# mkdir data # 重新執行一遍,在不加參數p的情況下會報錯 mkdir: cannot create directory `data‘: File exists
[
[email protected]-141 ~]# mkdir oldboy/1/2/3 # 不加參數p的情況下,創建多級目錄會報錯 mkdir: cannot create directory `oldboy/1/2/3‘: No such file or directory [[email protected]141 ~]# mkdir oldboy/1/2/3 -p # 創建多級目錄 [[email protected]-141 ~]# tree oldboy/ # 查看下目錄結構 oldboy/ └── 1 └── 2 └── 3 3 directories, 0 files
[[email protected]-141 ~]# mkdir -pv test # 顯示目錄文件創建過程 mkdir: created directory `test‘ [[email protected]141 ~]# mkdir -pv test/1/2/3 # 顯示多級目錄創建過程,你會發現,目錄是一級一級向下創建的 mkdir: created directory `test/1‘ mkdir: created directory `test/1/2‘ mkdir: created directory `test/1/2/3‘
[[email protected]-141 ~]# mkdir lipeng # 創建一個目錄 [[email protected]-141 ~]# ll drwxr-xr-x 2 root root 4096 Apr 2 11:40 lipeng # 目錄權限為755
[[email protected]-141 ~]# mkdir -m 333 lipeng2 # 重新創建一個新目錄,並制定目錄權限為333 [[email protected]-141 ~]# ll drwxr-xr-x 2 root root 4096 Apr 2 11:40 lipeng d-wx-wx-wx 2 root root 4096 Apr 2 11:41 lipeng2 #創建出來的目錄是333
[[email protected] ~]# mkdir /test/{A,B,C}/{1,2,3} -pv # 創建多個目錄,及其子目錄。創建規則想象下數學中的乘法【 a*(1,2),a*( ,3) 】
mkdir: created directory `/test‘
mkdir: created directory `/test/A‘
mkdir: created directory `/test/A/1‘
mkdir: created directory `/test/A/2‘
mkdir: created directory `/test/A/3‘
mkdir: created directory `/test/B‘
mkdir: created directory `/test/B/1‘
mkdir: created directory `/test/B/2‘
mkdir: created directory `/test/B/3‘
mkdir: created directory `/test/C‘
mkdir: created directory `/test/C/1‘
mkdir: created directory `/test/C/2‘
mkdir: created directory `/test/C/3‘
[[email protected] ~]# tree /test/
/test/
├── A
│ ├── 1
│ ├── 2
│ └── 3
├── B
│ ├── 1
│ ├── 2
│ └── 3
└── C
├── 1
├── 2
# 如果我們需要克隆上面的多級目錄,假設一個測試環境,目錄層級比上面的更多,該如何操作呢?
[[email protected] tmp]# cd / # 切換到根目錄下,使用相對路徑
[[email protected] /]# tree -fid --noreport test>/tmp/test_directory.txt # 將tree命令得到的內容重定向到臨時文件/tmp/test_directory.txt中
[[email protected] /]# cat /tmp/test_directory.txt # 查看文件內容
test
test/A
test/A/1
...省略好幾行...
test/C/3
[[email protected] /]# cd tmp/ # 切換到臨時目錄下
[[email protected] tmp]# mkdir -p `cat test_directory.txt` # 將文件中的內容交給mkdir -p 這個命令來執行
[[email protected] tmp]# tree test # 查看執行結果 ,原來還可以這麽玩。。
test
├── A
│ ├── 1
│ ├── 2
│ └── 3
├── B
│ ├── 1
│ ├── 2
│ └── 3
└── C
├── 1
├── 2
└── 3
-
touch
主要有兩個功能:
一:創建新的內容為空的文件
二:改變已有文件的時間戳屬性
-a # 更改指定文件的最後訪問時間
-m # 更改指定文件的最後修改時間
-r file # 將指定文件的時間屬性設置為與模板文件file的時間屬性相同
-t STAMP # 使用特定格式的時間設置文件的時間屬性
【[CC]YY】MMDDhhmm[.ss],世紀,年,月,日,時,分,秒
[[email protected] test]# touch stu{01..05}
[[email protected]-141 test]# ll total 0 -rw-r--r-- 1 root root 0 Apr 2 20:52 stu01 -rw-r--r-- 1 root root 0 Apr 2 20:52 stu02 -rw-r--r-- 1 root root 0 Apr 2 20:52 stu03 -rw-r--r-- 1 root root 0 Apr 2 20:52 stu04 -rw-r--r-- 1 root root 0 Apr 2 20:52 stu05 [[email protected]-141 test]# stat stu01 # stat命令用於查看文件狀態信息 File: `stu01‘ Size: 0 Blocks: 0 IO Block: 4096 regular empty file Device: 803h/2051d Inode: 262164 Links: 1 Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root) Access: 2019-04-02 20:52:02.334941194 +0800 Modify: 2019-04-02 20:52:02.334941194 +0800 Change: 2019-04-02 20:52:02.334941194 +0800
[[email protected]-141 test]# touch -a stu01 # 修改用戶訪問時間,註意“ACCESS”行的時間變化
[[email protected]-141 test]# stat stu01 File: `stu01‘ Size: 0 Blocks: 0 IO Block: 4096 regular empty file Device: 803h/2051d Inode: 262164 Links: 1 Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root) Access: 2019-04-02 20:53:14.349937753 +0800 Modify: 2019-04-02 20:52:02.334941194 +0800 Change: 2019-04-02 20:53:14.349937753 +0800
[[email protected]-141 test]# touch -m stu01 # 更改最後修改的時間,註意“modify”行的時間變化 [[email protected]-141 test]# stat stu01 File: `stu01‘ Size: 0 Blocks: 0 IO Block: 4096 regular empty file Device: 803h/2051d Inode: 262164 Links: 1 Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root) Access: 2019-04-02 20:53:14.349937753 +0800 Modify: 2019-04-02 20:53:53.427947885 +0800 Change: 2019-04-02 20:53:53.427947885 +0800 [[email protected]-141 test]# ls -lh stu01 -rw-r--r-- 1 root root 0 Apr 2 20:53 stu01 [[email protected]-141 test]# touch -d 20200101 stu01 # 更改文件被創建的時間 [[email protected]-141 test]# ls -lh stu01 -rw-r--r-- 1 root root 0 Jan 1 2020 stu01
[[email protected]141 test]# touch -r stu02 stu01 # 使得stu01的時間屬性與stu02保持一致 [[email protected]-141 test]# ll total 0 -rw-r--r-- 1 root root 0 Apr 2 20:52 stu01 -rw-r--r-- 1 root root 0 Apr 2 20:52 stu02
PS:Linux中三種時間戳類型
Acess # 最後訪問文件的時間 atime 查看文件內容時悔改屬性
Modify # 最後修改文件的時間 mtime 編輯文件內容時會改變屬性
Change # 最後改變文件狀態的時間 ctime 編輯文件,移動文件,改變文件屬性
-
ls
list directory contents,作用是列出目錄或者文件的屬性信息。與DOS系統和Linux系統中的dir命令類似。
-l # 長格式列出文件目錄信息
-a # 顯示目錄下的所有文件,包括隱藏文件
-t # 根據最後修改時間mtime排序,默認是以文件名排序
-r # 倒序排列
-d # 列出目錄本身,遇到符號鏈接,只顯示目錄
-h # 列出的信息可讀性高
-i # 顯示inode節點信息
-A # 列出除了隱藏文件.和.. 這兩個目錄之外的所有文件
-F # 查看文件結尾信息 / 目錄結尾 @ 鏈接文件結尾 * 命令結尾,可執行的普通文件 = 套接字文件
ps:通過ls命令可以查看文件的屬性及權限,這裏不進行一一列舉,可以自行了解每一列的含義
-
cp
copy縮寫,作用是復制或覆蓋文件或目錄
-a # 等同於pdr這三個參數功能的總和
-r # 遞歸復制目錄
-p # 復制文件時保持源文件的屬性信息不變
-d # 若復制的源文件是符號鏈接,那僅復制符號鏈接本身,並保留指向的目標文件或目錄
-i # 覆蓋已有文件前提示用戶確認
-t # 復制格式為 “cp 源文件 目標文件”,加上此參數後,“cp -t 目標文件,源文件”,此種用法,一般結合find命令+管道使用
ps:針對cp命令的系統別名問題,可在命令行中開頭采用轉譯符號(\),來屏蔽系統別名。或者直接unalias取消別名功能
快速備份備件: cp a.txt{,.bak}
# 此類命令慎用
-
mv
move縮寫,移動或重命名文件
-f # 若目標文件已存在,直接覆蓋
-i # 若目標文件已存在,詢問是否覆蓋
-n # 不覆蓋已經存在的文件
-t # 與cp命令功能一致
# 此類命令慎用
-
rename
-
rm
remove縮寫,刪除文件或目錄
-f # 強制刪除
-i # 刪除前需要確認
-r # 遞歸刪除目錄及內容
-I # 在刪除超過3個文件或者遞歸刪除前要求確認請求
ps:此條命令也是有別名的,並且是危險命令。盡量使用mv代替rm,不著急刪除,先移動到/tmp目錄下。
刪庫命令:rm -rf /.* 或者 rm -rf /etc/* # 請忘掉此命令。。盡量不用通配符。
文件被刪除後,也會有恢復工具,前提是要學會未雨綢繆。
-
rmdir
remove empty directory縮寫,刪除空目錄,不為空時,命令不起作用。工作中用的極少
-p # 遞歸刪除空目錄
-v # 查看執行過程
-
ln
make links between files,作用是創建文件的軟硬連接
格式:
ln 選項 源文件或目錄 目標文件或目錄
-s # 創建軟連接
軟硬連接的區別及含義可自行了解。一般在發版時會采用符號連接進行秒級切換
例如:
ln -s /etc/hosts soft_link # 為/etc/hosts創建soft_link.註意,soft_link這個文件不能事先存在。
Linux基礎命令之文件和目錄操作(一)