iT邦幫忙

2023 iThome 鐵人賽

DAY 4
0

檔案操作

在這個章節中,我們會開始學習指令的操作,本小節主要介紹與檔案相關的操作,當然有一些指令一樣可以用來操作目錄,在目錄操作的章節中會再次提到。

ls

ls 顧名思義就是列出的意思,該指令會列出指定標的的資訊,通常會有三個情況:

  1. 若沒有提供標的名稱,則會列出當前工作目錄的內容。
  2. 若提供的標的為檔案,則會顯示該檔案的資訊。
  3. 若提供的標的為目錄,則會顯示該目錄的內容,和第 1 點一樣。

ls 在沒有任何參數的情況之下,會把標的項目顯示出來,比如為檔名或目錄名。若搭配 -l 參數,則會把標的的資訊一併列出。

student$ ls -l /
total 24
dr-xr-xr-x.   2 root root    6 May 16  2022 afs
lrwxrwxrwx.   1 root root    7 May 16  2022 bin -> usr/bin
dr-xr-xr-x.   5 root root 4096 Feb 16  2023 boot
drwxr-xr-x.  21 root root 3320 Sep  5 01:51 dev
drwxr-xr-x.  78 root root 8192 Sep  8 23:59 etc
drwxr-xr-x.   3 root root   21 Feb 16  2023 home
lrwxrwxrwx.   1 root root    7 May 16  2022 lib -> usr/lib
lrwxrwxrwx.   1 root root    9 May 16  2022 lib64 -> usr/lib64
drwxr-xr-x.   2 root root    6 May 16  2022 media
drwxr-xr-x.   2 root root    6 May 16  2022 mnt
drwxr-xr-x.   2 root root    6 Sep  5 01:53 mydata
drwxr-xr-x.   2 root root    6 May 16  2022 opt
dr-xr-xr-x. 196 root root    0 Sep  5 01:50 proc
dr-xr-x---.   2 root root  173 May 12 01:17 root
drwxr-xr-x.  25 root root  760 Sep  5 01:51 run
lrwxrwxrwx.   1 root root    8 May 16  2022 sbin -> usr/sbin
drwxr-xr-x.   2 root root    6 May 16  2022 srv
dr-xr-xr-x.  13 root root    0 Sep  5 01:51 sys
drwxrwxrwt.  10 root root 4096 Sep  9 00:54 tmp
drwxr-xr-x.  12 root root  144 Feb 16  2023 usr
drwxr-xr-x.  19 root root 4096 Feb 16  2023 var

這些資訊包含如下項目:

  1. 權限
  2. 連結次數
  3. 物件擁有者
  4. 物件群組
  5. 大小,通常為 bytes 顯示,可以使用 -m 以 MB 顯示,或是使用 -h 自動轉換單位。
  6. 物件內容修改時間
  7. 物件名稱

cp

cp 指的是複製,在本小節中使用 cp 來複製檔案,cp 運作時必須提供 2 個項目,一是來原檔案,二是目標檔名,如果不想更改檔名,則可以使用目錄來表示要將指定的檔案複製到哪一個目錄。

操作範例如下:

  1. /etc/passwd 複製到 /tmp/

    student$ cp /etc/passwd /tmp/
    
  2. /tmp/passwd 複製成 /tmp/sample

    student$ cp /tmp/passwd /tmp/sample
    

head

head 可以顯示檔案的前幾行,預設為 10 行。配合 -n 參數可以設定行數。

操作範例如下:

  1. 顯示 /etc/passwd 的前幾行。

    student$ head /etc/passwd
    root:x:0:0:root:/root:/bin/bash
    bin:x:1:1:bin:/bin:/sbin/nologin
    daemon:x:2:2:daemon:/sbin:/sbin/nologin
    adm:x:3:4:adm:/var/adm:/sbin/nologin
    lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
    sync:x:5:0:sync:/sbin:/bin/sync
    shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
    halt:x:7:0:halt:/sbin:/sbin/halt
    mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
    operator:x:11:0:operator:/root:/sbin/nologin
    
  2. 顯示 /etc/passwd 的前 3 行。

    student$ head -n 3 /etc/passwd
    root:x:0:0:root:/root:/bin/bash
    bin:x:1:1:bin:/bin:/sbin/nologin
    daemon:x:2:2:daemon:/sbin:/sbin/nologin
    

tail

head 可以顯示檔案的最後幾行,預設為 10 行。配合 -n 參數可以設定行數。

操作範例如下:

  1. 顯示 /etc/passwd 的最後幾行。

    student$ tail /etc/passwd
    rpc:x:32:32:Rpcbind Daemon:/var/lib/rpcbind:/sbin/nologin
    qemu:x:107:107:qemu user:/:/sbin/nologin
    gluster:x:997:995:GlusterFS daemons:/run/gluster:/sbin/nologin
    radvd:x:75:75:radvd user:/:/sbin/nologin
    tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin
    saslauth:x:996:76:Saslauthd user:/run/saslauthd:/sbin/nologin
    rpcuser:x:29:29:RPC Service User:/var/lib/nfs:/sbin/nologin
    nfsnobody:x:65534:65534:Anonymous NFS User:/var/lib/nfs:/sbin/nologin
    chrony:x:995:992::/var/lib/chrony:/sbin/nologin
    powercheck:x:1000:1000::/home/powercheck:/bin/bash
    
  2. 顯示 /etc/passwd 的最後 3 行。

    student$ tail -n 3 /etc/passwd 
    nfsnobody:x:65534:65534:Anonymous NFS User:/var/lib/nfs:/sbin/nologin
    chrony:x:995:992::/var/lib/chrony:/sbin/nologin
    powercheck:x:1000:1000::/home/powercheck:/bin/bash
    

cat

把檔案內容從第一行到最後一行輸出到畫面上。

student$ cat /etc/passwd

tac

把檔案內容從最後一行到第一行輸出到畫面上。此指令與 cat 輸出結果相反。

student$ tac /etc/passwd

less

less 必須提供檔案名稱,以分頁的方式顯示到畫面上,進入 less 後常用的幾個操作如下:

  1. 離開 less:按下鍵盤上的 q
  2. 跳到第 1 行:按下鍵盤上的 1G
  3. 跳到最後行:按下鍵盤上的 G
  4. 尋找含有 hello 的行:輸入 /,再輸入 hello,最後按下 [Enter]。此時再按下 n 可以跳到下一個結果。
student$ less /etc/passwd

touch

touch 指令就如同該名稱一樣,"摸" 一下指定的物件,通常會是檔案。

touch 原意為修改指定物件的檔案時間戳記,預設物件上的存取時間、內容異動時間與更新時間都會被定為執行 touch 當下的時間。若在執行 touch 的時候有提供指定的時間,那麼物件的時間會修改為指定的時間。

雖然 touch 為修改時間戳記的方法,但若指定物件不存在,則在權限足夠的情況下,就會產生新的 "空白檔案",而產生空白檔案是很常被應用的方式。

操作範例如下:

  1. 產生一個空白檔案

    student$ ls -l myfile
    ls: cannot access myfile: No such file or directory
    
    student$ touch myfile
    
    student$ ls -l myfile
    -rw-r--r--. 1 student student 0 Jan 19 09:36 myfile
    
  2. myfile 時間戳記修改為 2021-01-01 01:00:00

    student$ls -l myfile
    -rw-r--r--. 1 student student 0 Jan 19 09:33 myfile
    
    student$ touch -d "2021-01-01 01:00:00" myfile
    
    student$ ls -l myfile
    -rw-r--r--. 1 student student 0 Jan  1  2021 myfile
    

mv

mv 為移動的縮寫,主要可以應用 2 個情境:

  1. 將目標物件移動到新的位置。
  2. 將目標物件重新命名。

操作範例如下:

  1. 先產生 myfile 檔案,然後把 myfile 移動到 /tmp/ 目錄中。

    student$ touch myfile
    student$ mv myfile /tmp/
    
  2. 先產生 myfile 檔案,然後把 myfile 重新命名為 myfile2

    student$ ls -l
    

    此時應該沒有 myfile2 檔案

    student$ touch myfile
    student$ mv myfile myfile2
    
    student$ ls -l
    

    此時會有 myfile2 檔案

rm

rm 指令為刪除指定的物件名稱,也可以使用 * 號來表示所有字元。搭配 -i 參數可以在實際刪除之前再次進行確認,或是使用 -f 參數強制刪除。

操作範例如下:

  1. 先產生 myflie 檔案,然後在刪除前詢問是否確定執行。

    student$ touch myfile
    
    student$ rm -i myfile 
    rm: remove regular empty file ‘myfile’? y
    
    student$ ls -l myfile
    ls: cannot access myfile: No such file or directory
    
  2. 先產生 myfile 檔案,然後強制刪除不詢問。

    student$ touch myfile
    
    student$ rm -f myfile
    
    student$ ls -l myfile
    ls: cannot access myfile: No such file or directory
    
  3. 列出 /etc/ 中,所有以 .conf 為副檔名的項目。

    student$ ls /etc/*.conf
    /etc/asound.conf    /etc/libaudit.conf     /etc/resolv.conf
    /etc/chrony.conf    /etc/libuser.conf      /etc/rsyncd.conf
    /etc/dnsmasq.conf   /etc/locale.conf       /etc/rsyslog.conf
    /etc/dracut.conf    /etc/logrotate.conf    /etc/sensors3.conf
    /etc/e2fsck.conf    /etc/man_db.conf       /etc/sestatus.conf
    /etc/GeoIP.conf     /etc/mke2fs.conf       /etc/sudo.conf
    /etc/host.conf      /etc/nfs.conf          /etc/sudo-ldap.conf
    /etc/idmapd.conf    /etc/nfsmount.conf     /etc/sysctl.conf
    /etc/kdump.conf     /etc/nsswitch.conf     /etc/tcsd.conf
    /etc/krb5.conf      /etc/numad.conf        /etc/vconsole.conf
    /etc/ksmtuned.conf  /etc/radvd.conf        /etc/yum.conf
    /etc/ld.so.conf     /etc/request-key.conf
    

grep

grep 可以從指定的檔案裡過濾出要尋找的字串,並顯示在螢幕上,搭配多種參數可以讓 grep 的輸出更有彈性,常用的參參數如下所示:

  • -n:列出所找的字串位於檔案的第幾行。
  • -A:一併列出結果的前幾行。
  • -B:一併列出結果的後幾行。
  • -v:列出不符合的行。
  • -o:只列出符合的字串。

操作範例如下:

  1. 列出 /etc/passwd 中,包含 ftp 字串的行,並列出該行的前 1 行與後 2 行。

    student$ grep -B 1 -A 2 ftp /etc/passwd
    games:x:12:100:games:/usr/games:/sbin/nologin
    ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
    nobody:x:99:99:Nobody:/:/sbin/nologin
    systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
    
  2. 列出 /etc/passwd 中,包含 ftp 字串的行,並顯示行號。

    student$ grep -n ftp /etc/passwd
    12:ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
    
  3. 列出 /etc/passwd 中,只顯示包含 ftp 字串的字串。

    student$ grep -o ftp /etc/passwd
    ftp
    ftp
    

上一篇
Day 3: 系統操作環境
下一篇
Day 5: 目錄操作 與 文件搜尋
系列文
Linux 升華:初學者的探索到專家的洞察30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言