1. 程式人生 > >Linux基礎命令之文件和目錄操作(一)

Linux基礎命令之文件和目錄操作(一)

node var 慎用 con mkdir 環境 not 小數 mat

  • 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/1mkdir: created directory `test/1/2mkdir: 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基礎命令之文件和目錄操作(一)