在這個章節中,我們會開始學習指令的操作,本小節主要介紹與檔案相關的操作,當然有一些指令一樣可以用來操作目錄,在目錄操作的章節中會再次提到。
ls
顧名思義就是列出的意思,該指令會列出指定標的的資訊,通常會有三個情況:
第 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
這些資訊包含如下項目:
-m
以 MB 顯示,或是使用 -h
自動轉換單位。cp
指的是複製,在本小節中使用 cp
來複製檔案,cp
運作時必須提供 2 個項目,一是來原檔案,二是目標檔名,如果不想更改檔名,則可以使用目錄來表示要將指定的檔案複製到哪一個目錄。
操作範例如下:
將 /etc/passwd
複製到 /tmp/
student$ cp /etc/passwd /tmp/
將 /tmp/passwd
複製成 /tmp/sample
student$ cp /tmp/passwd /tmp/sample
head
可以顯示檔案的前幾行,預設為 10 行。配合 -n
參數可以設定行數。
操作範例如下:
顯示 /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
顯示 /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
head
可以顯示檔案的最後幾行,預設為 10 行。配合 -n
參數可以設定行數。
操作範例如下:
顯示 /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
顯示 /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
把檔案內容從第一行到最後一行輸出到畫面上。
student$ cat /etc/passwd
把檔案內容從最後一行到第一行輸出到畫面上。此指令與 cat
輸出結果相反。
student$ tac /etc/passwd
less
必須提供檔案名稱,以分頁的方式顯示到畫面上,進入 less
後常用的幾個操作如下:
less
:按下鍵盤上的 q
1G
G
hello
的行:輸入 /
,再輸入 hello
,最後按下 [Enter]
。此時再按下 n
可以跳到下一個結果。student$ less /etc/passwd
touch
指令就如同該名稱一樣,"摸" 一下指定的物件,通常會是檔案。
touch
原意為修改指定物件的檔案時間戳記,預設物件上的存取時間、內容異動時間與更新時間都會被定為執行 touch
當下的時間。若在執行 touch
的時候有提供指定的時間,那麼物件的時間會修改為指定的時間。
雖然 touch
為修改時間戳記的方法,但若指定物件不存在,則在權限足夠的情況下,就會產生新的 "空白檔案",而產生空白檔案是很常被應用的方式。
操作範例如下:
產生一個空白檔案
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
將 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
為移動的縮寫,主要可以應用 2 個情境:
操作範例如下:
先產生 myfile
檔案,然後把 myfile
移動到 /tmp/
目錄中。
student$ touch myfile
student$ mv myfile /tmp/
先產生 myfile
檔案,然後把 myfile
重新命名為 myfile2
。
student$ ls -l
此時應該沒有
myfile2
檔案
student$ touch myfile
student$ mv myfile myfile2
student$ ls -l
此時會有
myfile2
檔案
rm
指令為刪除指定的物件名稱,也可以使用 *
號來表示所有字元。搭配 -i
參數可以在實際刪除之前再次進行確認,或是使用 -f
參數強制刪除。
操作範例如下:
先產生 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
先產生 myfile
檔案,然後強制刪除不詢問。
student$ touch myfile
student$ rm -f myfile
student$ ls -l myfile
ls: cannot access myfile: No such file or directory
列出 /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
的輸出更有彈性,常用的參參數如下所示:
-n
:列出所找的字串位於檔案的第幾行。-A
:一併列出結果的前幾行。-B
:一併列出結果的後幾行。-v
:列出不符合的行。-o
:只列出符合的字串。操作範例如下:
列出 /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
列出 /etc/passwd
中,包含 ftp
字串的行,並顯示行號。
student$ grep -n ftp /etc/passwd
12:ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
列出 /etc/passwd
中,只顯示包含 ftp
字串的字串。
student$ grep -o ftp /etc/passwd
ftp
ftp