Skip to content

Latest commit

 

History

History
238 lines (184 loc) · 9.2 KB

0917.md

File metadata and controls

238 lines (184 loc) · 9.2 KB

0917

檔案管理

# 顯示當前路徑 (print working directory)
$ pwd

# 顯示硬碟使用狀況與剩餘空間 (disk free)
$ df
-h --human-readable # 以人們較易閱讀的 GBytes, MBytes, KBytes 等格式自行顯示
-k --kilobyte # 以 KB 顯示
-m --megabytes # 以 MB 顯示

# 顯示某個目錄使用容量 (disk usage)
$ du <directory path>
-h --human-readable # 以人們較易閱讀的 GBytes, MBytes, KBytes 等格式自行顯示
-s --summarize # 將目錄內容容量加總

# 顯示當前目錄內容 (list)
$ ls
-a --all # 列出所有檔案
-i --inode # 顯示各檔案的inode
-l # 以較長的格式顯示,包含存取權限、連結數目、擁有者、大小、最後更動時間等
-n --numeric-uid-gid # 列出檔案,以 UID 和 GID 顯示

# 顯示當前目錄內容 (directory),為了相容 Windows 指令
$ dir

# 切換到當前目錄 (change directory),可以是絕對路徑或相對路徑
$ cd <directory path>

# 將檔案內容連續印出 (concatenate)
$ cat <file path>

# 將檔案內容反向印出
$ tac <file path>

# 逐頁翻動,只能向下
$ more
space 鍵 # 向下一頁
enter 鍵 # 向下一行
/<string> # 向下搜尋此字串
:f # 顯示檔名.目前行數
b # 往回翻頁 (讀檔有效,管線無效)
q # 離開

# 逐頁翻動,還能向上
$ less
space 鍵 # 向下一頁
page up 鍵 # 向上一頁
page down 鍵 # 向下一頁
/<string> # 向下搜尋此字串
?<string> # 向上搜尋此字串
n # 向下重複前一個字串搜尋
N # 向上重複前一個字串搜尋
g # 捲到第一行
G # 捲到最後一行
q # 離開

# 取出前面十行
$ head
-n <number> # 指定顯示幾行

# 取出後面十行
$ tail
-f # 持續偵測檔案,直到按下 Ctrl + C 離開
-n <number> # 指定顯示幾行

# 建立空檔和時間標記
$ touch

[練習] 檔案管理

# 內部連線
$ ssh <username>@<CentOS ip>
$ ssh [email protected]

# 切換成 root 使用者 (switch user)
$ su -

$ cat /etc/passwd
$ cat /etc/passwd | more
$ cat /etc/passwd | less

$ head -n 5 /etc/passwd
$ tail -n 5 /etc/passwd

# 觀察系統所有程序 (process status)
# 全面搜尋正規表示式 (global search regular expression)
$ ps aux | grep <process id / process name>
$ ps aux | grep vim
$ ps aux | grep firefox

# 觀看執行程序,以樹狀圖表示 | 翻頁
$ pstree | more

# 停止程序
# -2 通知程式停止執行 (Ctrl + C)
# -9 立刻強制停止程式執行
# -15 以正常的程序通知程式停止執行 (預設)
$ kill -9 <process id>

# 動態偵測程序變化
# -b 以批次的方式執行,通常會搭配資料流重導向,將批次的結果輸出成為檔案
# -n <次數> 偵測次數
$ top -b -n 1 > top.txt

# 顯示最耗效能的程式
# awk(作者三人名字開頭): 資料處理工具
$ cat top.txt | head -n 8 | tail -n 2 | awk '{print $1,$2,$12}'
# PID USER COMMAND
# <minimum pid> <username> <command>

# 顯示當前登入系統的使用者
$ w # 較詳細
#  22:04:09 up  1:43,  2 users,  load average: 0.00, 0.00, 0.00
# USER     TTY      FROM              LOGIN@   IDLE   JCPU   PCPU WHAT
# root     tty1     :0               20:20    1:43m  9.46s  9.46s /usr/bin/Xorg :
# root     pts/0    :0.0             22:03    0.00s  0.01s  0.01s w
$ who
# root     tty1         2019-09-29 20:20 (:0)
# root     pts/0        2019-09-29 22:03 (:0.0)

$ tail -n 5 /etc/passwd
$ head -n 5 /etc/passwd
$ tail -f /var/log/http/access.log

$ cat /etc/passwd | grep :0:

tty & pts

  1. tty(終端設備的統稱) >> 新增終端機分頁.視窗

teletypes, teletypewriters

原來指的是電傳打字機,是通過串行線用打印機鍵盤通過閱讀和發送信息的東西,後來這東西被鍵盤與顯示器取代,所以現在叫終端比較合適。 終端是一種字符型設備,它有多種類型,通常使用tty來簡稱各種類型的終端設備。

  1. pty(虛擬終端)

pseudo-tty

但是如果我們遠程telnet到主機或使用xterm時不也需要一個終端交互麼?是的,這就是虛擬終端pty。

  1. pts/ptmx (pts/ptmx結合使用,進而實現pty) >> Ctrl + Alt + F1 ~ F6

pseudo-terminal slave

pts 是 pty 的實現方法,與 ptmx(pseudo-terminal master) 配合使用實現 pty。

使用者相關設定

/etc/passwd 使用者帳號設定檔

login_name: password: user_id: group_id: user_information: directory: shell

root: x: 0: 0: root: /root: /bin/bash

欄位 中文 說明
login_name 帳號
password 密碼 這個欄位應該都是『x』,這是經過加密過的,表示使用 Shadow Security Suite 保護,安全性較高,而真正的密碼存放在 shadow 檔案中。
user_id 使用者id 這個欄位是數字,每當我們使用 useradd 增加一個使用者時,這個欄位就會自動加一。我們登入系統時雖然是使用『帳號』登入,但是,實際上是使用 user_id 來判斷使用者權限的。
group_id 群組id 這個欄位也是數字,和 user_id 欄位一樣,每當我們使用 useradd 增加一個使用者時,這個欄位就會自動加一,而這裡的數字可以對照到『/etc/group』檔案,就可以知道這個群組的名稱,預設的群組名稱和使用者名稱相同。
user_information 其他資訊
directory 主(家)目錄 也是使用者登入後的目錄,例如 ntcbimd 的家目錄就是『/home/ntcbimd』。
shell 登入後使用的 shell 預設是用 bash shell,所以這個欄位應該都是『/bin/bash』,可是,你一定會發現在passwd檔案之中有一些設定是『/bin/nologin』,實際上在系統中是沒有這個 shell 的,這樣設定的目的是不讓這個使用者登入到系統之中。

/etc/shadow 使用者密碼設定檔

login_name: password: change: short_change: long_change: alert: stop: limit:

root: <encrypted_password>: 17596: 0: 99999: 7: : :

欄位 中文 說明
login_name 帳號
password 加密過的密碼 由於這裡的密碼都是經過加密過的,所以我們不能在這裡直接更改密碼。
change 密碼變動時間 上次變更密碼時間是距離 1970/01/01 的多少天。
short_change 最短變更時間 密碼變更後,距離下次變更時間,至少需要經過多少天,才能再變更。預設值是 0,表示隨時都可以變更密碼,若設為 5 的話,就表示這次變更密碼的話,得再經過5天之後才能再做密碼變更的動作。
long_change 最長變更時間 距離上次變更密碼時間,在到達多少天之後,必須再變更一次。預設值是 99999,這樣的日期已經不知道是幾千年後的事,我們是等不到的,所以密碼是不會過期的。若設定 100,那麼,每隔 100 天我們就必須重設一個新的密碼。
alert 警告時間 離下次變更密碼到期時間,在幾天之前會提出警告,預設值是 7 天,會在『最長變更時間』到期的前 7 天開始發出警告訊息。
stop 停權時間 如果超過『最長變更時間』多少天,還是沒有變更密碼的話,就將該帳號停權,無法登入系統。
limit 有效期限 帳號的有效期限可以使用到什麼時候,計算方式是從 1970/01/01 開始,以天數計算,當時間一過,這個帳號就被停止使用了。

/etc/group 群組設定檔

group_name: password: group_id: username

root: x: 0:

欄位 中文 說明
group_name 群組名稱 一般而言,使用 useradd 指令建立使用者時,會同時產生一個新的群組,而新的群組名稱會和使用者名稱相同。
password 密碼 不會用到。
group_id 群組id 在 passwd 檔案中的 group_id 就是指到這裡,再透過這個 group_id 而對應到群組名稱的。
username 該群組所包含的使用者

useradd 新增使用者

useradd <a_login_name>

useradd ntcbimd

  • 系統在新增一位新的使用者同時,會在/home 目錄產生一個目錄給新的使用者,增加的目錄是 『/home/ntcbimd』,增加的檔案是 『/var/spool/mail/ntcbimd』。
    • 使用者帳號/密碼相關參數:/etc/passwd, /etc/shadow
    • 使用者群組相關參數:/etc/group, /etc/gshadow
    • 使用者個人檔案資料: /home/username, /var/spool/mail/username ...
  • 使用者建立之後,還需要做設定密碼的動作。尚未設定密碼是無法登錄到系統。
  • 修改細項請改用 usermod

passwd 變更密碼

passwd <login_name>

$ passwd <login_name>
Changing password for user <login_name>.
New password: # 輸入密碼
BAD PASSWORD: it is based on a dictionary word
BAD PASSWORD: is too simple
Retype new password: # 輸入確認密碼
passwd: all authentication tokens updated successfully.

# 修改目前登入帳號的密碼
$ passwd

# 上鎖,會將 /etc/shadow 第二欄最前面加上 ! 使密碼失效 (lock)
$ passwd –l <your_login_name>

# 解鎖,與 -l 相對 (unlock)
$ passwd –u <your_login_name>
  • 在輸入密碼時,畫面上看不到任何字元,這是正常的。
  • 修改細項請改用 chage

userdel 刪除使用者

userdel <login_name>

userdel

-r 連同家目錄 /home/ntcbimd & 電子郵件 /var/spool/mail/ntcbimd 一起刪除

  • 需要系統管理員 root 權限