Man Page: 如何使用以及小貼士

這是什麼

Man Page ( Manual Page ) 是 Unix 系統標配的在線系統手冊, 主要用來查詢命令. 在使用包管理器安裝程序的時候基本總是可以看到 configurating man-db... 的輸出, 是程序將自己的手冊加入到系統手冊當中.

儘管 Man Page 聲稱是在線手冊 ( 其本身也支持在線查詢 ), 但是大多數手冊都以 troff 格式存儲在本地.

包含的章節

章節描述
1命令
2System calls (Linux 內核函數)
3庫函數. (收錄了部分 C 語言函數)
4特殊檔案 (比方說 /dev 下的文件) 和驅動
5檔案格式與協定 (e.g /etc/passwd )
6遊戲和屏保
7雜項
8管理員指令

在手冊的開頭和結尾都可以看到 名稱(數字) 形式的字串, 括弧中的數字就是說明這個條目隸屬的章節. 一個條目可以隸屬于多個章節, 比如 passwd 是一個命令的同時也是一個檔案, 所以它同時隸屬于第一和第五章.

閱讀全文 Man Page: 如何使用以及小貼士

Linux 將運行中的任務轉後台並在會話關閉後繼續運行

假如我想要在服務器上把文件從一個硬盤考到另一個硬盤, 就要用到 cp/dd/rsync 命令對吧, 我想要讓服務器去運行這個命令, 我可以直接把終端關掉, 這時候第一個想起來就是 nohup [命令] &. nohup 意思是讓終端掛掉時進程不結束, & 的意思讓進程在後台執行.

但是如果我在拷貝之前沒想這麼多, 開始了之後才發現要運行好久, 這個時候應當怎麼辦呢? 我在中文互聯網上並沒有找到相關的問題/答案. 反倒是在 Stack Overflow 上找到了.

原問題及回答:

https://stackoverflow.com/questions/625409/how-do-i-put-an-already-running-process-under-nohup

  1. 按 Ctrl + Z 暫停程序
  2. 輸入 bg 讓暫停的程序在後台執行
  3. 輸入 jobs 查看程序 id (如果之前沒有執行類似操作過就是 1)
  4. 輸入 disown -h [id] 從 shell 的作業列表移除指令

Thumbnail: Sea Shell by Shyam B
If using the image violates your rights, or there’s anything related to copyright laws, please contact me at [email protected], I will deal with them immediately.

文件夾開放權限給用戶組

當訪問一個文件夾遇到 AccessDenied的時候:

chmod777 解決一切問題

但是內心總有一絲絲的不安:這好嗎?

這不好。

chmod + 數字的具體解釋

從上圖可以看到,chmod777其實給予了所有用戶對這個文件夾的完全權限,如果是PC還好,是Server的話,給/www來個chmod777,後果簡直不堪設想。

解決方案

我的臨時解決方案是,對於所有管理員賬戶(就是可以用sudo的)開放權限:

chgrp sudo folder
chmod 770 folder

權限命令

和權限有關的常用命令:

  • chmod [參數] [文件/目錄]: 修改某一個文件/目錄的權限
  • chgrp [組名] [文件/目錄]: 修改某一個文件/目錄的所有組
  • chown [用戶] [文件/目錄]: 修改某一個文件/目錄的所有者
  • ll: 類似於ls,但是列出了詳細信息,包括權限

Aptitude 命令

OS: Debian based systems

Wiki: aptitude-debianWiki

使用場景

這個玩意是一個 ncurses based 圖形界面包管理器(同時也可以命令行交互)

  • 可以使用鼠標和鍵盤操作(很方便)
  • 無論是gui還是tui都提供完整中文支持
  • 支持類正則方式匹配軟件包
  • 將軟件包分類,比如「自動安裝和手動安裝」,支持修改狀態爲自動安裝或手動安裝
  • 提供離線和在線的手冊(不要這麼友好啊啊啊),支持多語種
  • 这个软件包还内置掃雷 (悄悄说)

可以分析軟件包的依賴關係,找出沒有卸載徹底的軟件,沒有任何依賴關係的軟件,離線安裝的軟件(無source)等等。

安裝方式

可以使用apt 安裝

sudo apt update -y
sudo apt install aptitude -y

常用方法

清理廢棄包

常常是source不存在的包

# 查看 (以下2个等价)
aptitude search "~o"
aptitude search ?obsolete
# 清除
sudo aptitude purge "~o"

警告,一般來說這種包很少,有的如單個deb安裝的包(如wps),不要亂刪。

清理rc包

卸載不徹底,還殘留這配置文件的包

一般來說rc包的特征是卸载的时候会提示要卸载 0B,(就是只移除配置文件)

# 查看
aptitude search "~c"
# 清除
sudo aptitude purge "~c"

Apt-file 命令

OS: Debian based systems
Wiki: apt-file-debianWiki

使用場景

當遇到“某某某命令是在那個包裏的”,或者“我要找某某命令應當下載那個軟件包”的時候可以用到這個命令。

比如說,我想要啓動qt配套的 qt-designer 和 qt-assistant,然後命令行給我報錯,提示:

➜ assistant 
assistant: could not exec '/usr/lib/qt5/bin/assistant': No such file or directory
➜ designer
designer: could not exec '/usr/lib/qt5/bin/designer': No such file or directory

碰到這種情況,我可以使用 apt-file 命令來查找這個二進制文件在哪個包裏面出現,比方說:

➜  apt-file search bin/assistant
qt5-assistant: /usr/lib/qt5/bin/assistant 
qt5-assistant: /usr/lib/x86_64-linux-gnu/qt5/bin/assistant
qtchooser: /usr/bin/assistant

(qtchooser只是一個wrapper,用於啓動sdk中的幫助,而剩下的是真正的二進制程序)

(其實sdk裏面已經包括了designer和assistant, 有qt creator的同學不用費勁去下載這兩個了)

安裝方式

可以使用apt 安裝

sudo apt update -y
sudo apt install apt-file -y

安裝完畢之後還需要通過apt-file更新一下數據庫,讓apt-file有對apt數據庫的訪問權限。(建議每次使用前都更新一下)

sudo apt-file update

其他用法

根據 wiki , apt-file還存在一個被動模式,可以被dpkg調用(好像是), 使用 dpkg -S 加上 文件名 來查詢。

➜  dpkg -S libmp3lame.so.0
libmp3lame0:amd64: /usr/lib/x86_64-linux-gnu/libmp3lame.so.0

官網提示:dpkg -S 的方案只能查詢本地 package , 而 apt-file 可以聯網查詢所有安裝和未安裝的 package.

Apt-get 歷史紀錄查詢

# 查看apt-get 手动安装的记录
zcat /var/log/apt/history.log.*.gz | cat - /var/log/apt/history.log | grep -Po '^Commandline: apt-get install (?!.*--reinstall)\K.*'

# 查看apt 手动安装的历史记录
zcat /var/log/apt/history.log.*.gz | cat - /var/log/apt/history.log | grep -Po '^Commandline: apt install (?!.*--reinstall)\K.*'

使用 SSH 命令代理上網

沒有SSH伺服器?你可以試着在某些公開SSH平台上永久獲得一台。
猛擊右側鏈接永久獲得SSH伺服器: 點擊前往SDF.org

SSR突然用不起來?你的路由器掛掉了?唯一的解決辦法不在牆內?
你需要一個方便而快速的方式直接使用你的伺服器作爲代理,而不通過一些複雜的諸如SSR/V2RAY的上網協議。
請敲入如下命令以使用 SSH 代理:

ssh -qTfnN -D 1080 [email protected]

這個命令會爲你在 后台 開放 1080 端口, 使用加密的 ssh 連接到 服務器,將其用作代理。
你接下來可以配合 swichyOmega 等瀏覽器插件 或者 直接在系統配置代理端口爲 1080/socks5 愉快的上網了!

Edit: 不用嘗試 ssh [email protected], 這個域名只映射了 web 服務.

Sudo 命令免輸入密碼

在網上搜了一下 sudo 免除密碼,發現幾個沒講清楚的地方。

於是我把這些誤區彙總一下,方便以後查看。

正確的 sudo 姿勢 ✔

爲了避免留下錯誤的第一印象,先提出來正確的sudo姿勢。

首先,在你的終端敲入如下指令:

sudo visudo # 用vi編輯 /etc/sudoers

在彈出的窗口中按 G 定位到 最後一行 ,按 o 另起一行,輸入:(複製然後 shift+insert 粘貼)

# Extra users can run sudo without password
# 請將 username 替換爲你的用戶名
username  ALL=(ALL:ALL) NOPASSWD: ALL

Esc , 輸入 :wq 保存退出。

註銷再登錄,sudo su 發現問題解決了!

錯誤的 SUDO 害死人 ✗

錯誤死法一:命令糊塗

糊里糊塗就別寫“ps”啦!

真的如他所說四行任意一條都可以嗎?

首先先不說前兩條屬於離題萬里 是添加到sudo 組而不是免密運行,第三行我實測過就是不行的。

因爲如果你沒有寫在 文件尾部 而是像文章所述寫在 root 下面的話你的用戶設置會被 %admin 組設置給覆蓋掉!最終什麼都不會發生!

糊塗寫法正確率 1/4, 25%。

錯誤死法二:修改 sudoers 權限

你知道怎麼切換到 root, 好棒棒喔

我且不說這個縫合怪明明已經是 root 了爲什麼還要添加寫權限,這個例子還算是安全的。網上有些教程直接讓你把 sudoers 的權限給予當前用戶,真是嚇得我一跳。系統文件的權限你也是可以隨便交付的,一旦交付這個賬戶就成爲單點故障,一個泄漏全盤泄漏。而且這種認爲 bug 被添加上去之後還不好查,畢竟沒人天天注意各個文件的權限。

錯誤死法三:使用自動應答

C某DN 上的一種普遍方法

這個… 何止是有隱患, 把它用在生產環境簡直就是報復社會。很明顯可以看到這個命令將 /tmp/pass 作爲緩衝區明文保存密碼, 用完連刪都懶得刪…

/tmp 目錄作爲一個權限開放的目錄,別人完全可以監控這個目錄的文件變化。所以就算是 pass 文件刪掉也是不安全的啦!

而且就算就算他直接將 echo 的內容定向到 sudo 裏面,也是不安全的。任何明文儲存的密碼都存在隱患(何況是存在環境變量裏!) sudo 之所以要密碼當然不是爲了來防管理員,如果有人有與你的電腦 “親密接觸” 的機會 , 他可以在很短的時間裏面將你的 管理員密碼 都搞到. ( 不過不要給別人這個機會就是了! )