close

下午繼續講 command line 指令。



變更語系 (locale):
英文:
$ export LC_ALL=C
繁體中文:
$ export LC_ALL=zh_TW.UTF8


輸出入導向 (I/O redirection):

stdin (fileno.: 0) default = keyboard
stdout (fileno.: 1) default = monitor
stderr (fileno.: 2) default = monitor

預設的 stdout 與 stderr 輸出是將結果列印在螢幕上,不過也可以把資料輸出至檔案。
$ ls / > 123.txt

也可以把結果附加至既有的檔尾。
$ ls / >> 123.txt

stdout 與 stderr 的內容如果要附加在同一個檔案裡,不可以直街寫成以下的寫法:
$ ls / wgwgwgwgwg 2> stdout.txt > stdout.txt
如果要讓 stderr 附加在 stdout 之後,可以寫成這樣:
$ ls / > 123.txt wgwgwgwgwgwg 2>&1

檔案讀入再輸出到其他檔案,例如把 123.txt 輸出到 abc.txt
$ cat < 123.txt > abc.txt

不可以同時輸出入同一個檔案,例如:
cat < passwd > passwd
檔案內容會被清空。

sort 可以排序資料;亦有反序排序的功能,加上 -r 參數即可達成。利用管線 (pipe, |)可以組合多個指令的特性,可由以下指令取出檔案 test 中的末五筆資料(降冪輸出)。
cat test |sort -r| head -n 5

sort 時,預設會以文字的方式來比較排序資料,因此排序 1~10 時,排序的順序會變成:1, 10, 2, 3, 4, 5...,與我們一般認知認為 10 應該出現在最末不相同。如果想以數字的方式排序比較,可以加上 -n 參數:
sort -n list

也可以利用 cut 取出檔案中的特定內容。
cat /etc/passwd | cut -d: -f2

即使不寫程式以可以藉由指令列出現在使用者的家目錄,以下兩個指令意義相同:
ls /home/`whoami`
ls /home/$(whoami)

grep 是篩選特定字串,例如以下,即是在 passwd 中找出含有 willie 的那行:
cat /etc/passwd | grep willie
或者也可以這樣用:
grep testuser /etc/passwd
(grep 後先接要查詢的關鍵字,再來才是要搜詢的標的)

也可以結合 cut,從 passwd 檔案中取得使用者 willie 的 group id,再到 group 檔案中取得其群組名稱:
cat /etc/group | grep `cat /etc/passwd | grep willie | cut -d: -f4` | cut -d: -f1
(我的版本)
grep `cat /etc/passwd | grep willie | cut -d: -f 4` /etc/group | cut -d: -f1
(吳老師的版本)



【中場時間:快快樂樂學VIM】

在 Linux 下,直接在 command line 輸入 "vi" 或 "vi [檔名]" 就可以進入 VIM 編輯器內。

VIM 有三種模式: normal mode, insert mode, command mode
可以使用 esc 與 i 切換於 normal mode 與 insert mode 間,
或是使用 esc 與 : 切換於 normal mode 與 command mode 間。

離開時可以選擇:
q: 直接離開
wq: 存檔後離開
q!: 有修改內容時,不存檔強制離開



帳號管理 (account management)
- /etc/passwd
- 帳號名稱 (acc)
- password
- user id (uid)
- group id (gid)
- description
- 家目錄位址 (home directory)
- shell
- /etc/group
- 群組名稱
- 群組密碼
- group id (gid)
- optional user

對 UNIX 而言,權限是認 uid 不認帳號名的,所以若將 passwd 中任意帳號名稱的 uid 改成 0,下次登入時這個帳號就會有 root 權限。Linux 中預設 shell 是 /bin/bash。

相對於帳號的 /etc/passwd 與 /etc/shadow,群組也有兩個檔案 /etc/group 與 /etc/gshadow。群組也有密碼,不過幾乎不用到。

機器多的時候可能就會運用 LDAP 等集中式帳號密碼管理。

指令 addgroup 可以新增群組(gid 會自動分配):
$ addgroup groupname
adduser 則是新增使用者(gid 要先查好,在指令中自己配進去):
$ adduser --gid 1008 username

對應的指令則是 deluser 和 delgroup。



檔案權限 (permission)
- r: read (4), 檔案列表的權限。
- w: write (2), 新增修改刪除的設定權限。(刪除權限僅對資料夾而言,檔案若設定不可修改仍可被移除)
- x: excute (1), 進入目錄的權限。

檔案和資料夾均有 r, w, x 三種權限設定。

假設沒有 umask 的話,預設檔案權限是 666、資料夾權限是 777。一般使用者的 umask 的檔案權限預設是 0022 (Fedora 預設是 0002),新建檔案權限則是 666。umask 運算的規則為:umask 為 1 時則結果為 0,其他則為 1。

例如,若 umask 是 0002,則檔案權限為 664:
110110110 (666)
000000010 (0002)
--------- (轉換)
110110100 (664)

若 umask 是 0022,則檔案權限為 644:
110110110
000010010
---------
110100100

若要僅有使用者可讀寫,其他人皆不可讀寫,則 umask 可設為 0077,檔案權限則為 600:
110110110
000111111
---------
110000000


chmod: 變更檔案或資料夾權限
chown: 變更所有者
chgrp: 變更群組

chmod/chown/chgrp 都可以使用 -R 參數,將目錄之下的所有子目錄設定為相同權限。
chmod 777 -R /home/

777 也可以寫成語意型態:
chmod u=rwx, g=rwx, o=rwx filename
表示該檔案使用者、群組、所有者都可讀寫且可視。

chgrp/chown 只有 root 可以使用。
chown root:system filename





arrow
arrow
    全站熱搜
    創作者介紹
    創作者 小攻城師 的頭像
    小攻城師

    小攻城師的戰場筆記

    小攻城師 發表在 痞客邦 留言(1) 人氣()