日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > linux >内容正文

linux

如何学习(记住)linux命令(常用选项)

發(fā)布時間:2023/12/10 linux 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 如何学习(记住)linux命令(常用选项) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

作者:林果皞
鏈接:https://www.zhihu.com/question/21690166/answer/66721478
來源:知乎
著作權(quán)歸作者所有。商業(yè)轉(zhuǎn)載請聯(lián)系作者獲得授權(quán),非商業(yè)轉(zhuǎn)載請注明出處。
?

Unix & Linux 命令行特別之處在于,一些選項的設(shè)計是遵循傳統(tǒng)的, 只需認(rèn)識一個就能在其它命令使用相似的功能。選項通常都是相關(guān)功能的英文縮寫,并非毫無意義的英文字。

1. -h 通常意指 'h' + uman, 也就是 human-readable,能讓人類方便讀的格式輸出, 比如 1.3 GB 格式, 而不是 1300000000 bytes, 代表者有: ls -lth, sort -h

2. -v (小寫) 通常意指 'v' erbose, 代表者有: curl -v, ssh -v, python -v

  • 2.1 -V (大寫) 通常意指 ‘V’ ersion,與 --version 相比之下比較冷門,代表者有: gedit -V, firefox -V, openvt -V
  • 2.2 --version (小寫 v) 也是意指 ‘V’ ersion,代表者是九成的命令: python --version, konsole --version, gnome-shell --version, firefox --version, chromium-browser --version, bash --version, curl --version, tree --version, ls --version, journalctl --version, gedit --version, unp --version。 除了 java 和 javac 使用非 GNU 標(biāo)準(zhǔn)的 -version (少了一個 '-')
  • 2.3 --help, 同上, 九成的命令都有。不推薦 -h, 很多命令沒有 -h, 亦或已經(jīng)用來代表 'h'uman-readable。

3. -a 通常意指 'a'll, 全部文件的意思(因為開頭 "." 命名的文件是默認(rèn)隱藏的如 vim 的 .swp 恢復(fù)文件, 歷史原因和后果請看此 https://plus.google.com/+RobPikeTheHuman/posts/R58WgWwN9jp), 代表者有: ls -a, tree -a

4. -r 通常意指:

  • [a]. 'r' + everse, 上下顛倒的意思,代表者有: ls -lthr, sort -r
  • - 本人的 l alias 是 `ls -larthiF --context --color', 其中 t+r 排列最新更改日期的文件在最下方,畢竟大多數(shù)情況下,我只關(guān)心最近的文件。
  • [b]. 'r' + ecursive, 遞歸的意思,普遍用于遍歷目錄的子目錄,代表者有: grep -r, rm -r
  • [c]. 'R' 也可能意指 'R' ecursive , 代表者有:
  • [c.1] ls -R, chmod -R
  • [c.2] grep -R (--dereference- 'R' ecursive)
  • [d]. rm 和 cp 的 -r 和 -R 同樣是 recursive。切記有些平臺只有 -r, 有些平臺只有 -R, 有些平臺兩者都有。

5. --exclude-dir 排除某個目錄,代表: cloc . --exclude-dir=xxx, grep -rniI --exclude-dir=xxx abc ./* 。

  • 5.1 "exclude" 是排除的意思,對立的就是 "include"。"dir" 是 "directory" 的縮寫,表示 "目錄"。Unix 傳統(tǒng)不使用 "folder" 這個英文表示目錄。

建議:
0. 學(xué)習(xí)命令選項不需要英文很好,manual 的英文簡單,而且重復(fù)頻率很高, 如 invoke, locale,compatible, configure, ... etc 不像英文小說每一段都有新詞囧。

1. 不僅僅是 man,當(dāng)不確定的時候,可以用 --help 快速一覽選項。切記 --help 不等同于 man, 有時需要兩個命令互補(bǔ)。也別忘了 info。要切記的是 man 本身有 section 分類 ,如圖所示, `man 1 ls` 和 `man 1posix ls` 可以瀏覽兩個不同的 manual, 用 `apropos -e` 或 `whatis` 可以顯示 section 代號:

?

p/s: 有些 manual 要特地安裝后才有。如 `sudo apt-get install glibc-doc manpages-dev glibc-doc-reference`, `sudo apt-get install manpages-posix manpages-posix-dev` (`man 1posix ls` 就是這兒來的)

2. 如果 php 是世界上最好的語言,那么 "你使用過的命令行歷史記錄" 就是世界上最好的筆記。善用 history | grep 'xxx' 搜索之前用過的命令/選項,如:

p/s: h 是 history 的 alias, g 則是 `grep -n` 的 alias。| 是 pipeline, 這里把 history 輸出給下一個命令 grep, 過濾成只有 ' -u ' 的歷史記錄。

2.1 history 潛力無限,比如搜索 curl 命令歷史,可以知道使用過的 url, 方便再度使用:

我的歷史命令分成有時間和沒時間輸出兩種。`h` 是沒時間的,方便快速看(時間占位子)。而 `histime` 是有時間的。 切記別更改 history (比如 alias history='xxx'),因為這會影響其它命令使用 history 。這是我的 ~/.bash_aliases 有關(guān) history 的部分:

HISTTIMEFORMAT="%Y/%m/%d %T " alias histime='history' alias hisdefault='(HISTTIMEFORMAT=""; history;)' alias h=hisdefault HISTFILESIZE= HISTSIZE= HISTCONTROL=ignoreboth function hisunique() {hisdefault | awk '{CMD[$2]++;count++;}END { for (a in CMD)print CMD[a] " " CMD[a]/count*100 "% " a;}' | grep -v "./" | cat -v | column -c3 -s " " -t | sort -nr | nl | head -n100000 }

2.2 別忘了提升 history 記錄上限。如 HISTSIZE=70000000 ( HISTSIZE=<設(shè)空> 曾在舊的 gdb 造成有趣的 bug, 參考 linux - GDB up arrow doesnt work)。HISTSIZE 和 HISTFILESIZE 兩個都需要設(shè)置,切記!

[提醒] 如果你像我一樣把 HISTSIZE 和 HISTFILESIZE 放在 bash_aliases,那么別忘了把 /root/.bahsrc 和 /home/<用戶名>/.bashrc 的預(yù)設(shè) `HISTSIZE=1000` 和 `HISTFILESIZE=2000` 刪除,否則你會奇怪干嘛最多儲存 2000 行記錄。

[提醒二] 嘗試 HISTSIZE 和 HISTFILESIZE 設(shè)置的時候請先備份 ~/.bash_history , 因為如果你設(shè)置 HISTSIZE 和 HISTFILESIZE=1 , 那么你 ~/.bash_history 以前的記錄就只剩下一個了。又或者 >~/.bash_aliases 的危險實驗會造成 ~/.bash_history 失去大量的記錄。

[提醒三] 該歷史記錄設(shè)置只有 tab 正常關(guān)閉才會寫入 ~/.bash_history, 所以 /bin/bash 崩潰時也會損失當(dāng)前歷史記錄的,為了避免此狀況發(fā)生,如果你覺得已經(jīng)輸入很多重要的記錄, 就應(yīng)該關(guān)閉 tab (Ctrl+D) 重啟新的 tab (Ctrl+Shift+T)。

2.3 我也寫了一個小工具,用不同高亮顏色,排列不同時間段的歷史記錄。如圖所示,假設(shè)兩個命令間隔超過 60 秒為新的時間段顏色,可以一眼看出同一時間段所使用的命令組。我之所以有這個構(gòu)思是源自于我需要重復(fù)使用某個時間段的命令,卻難以在 history 下找出該命令組的范圍(因為鄰近命令很相似, 只路徑稍微不一樣)。github 代碼。


2.4 這里必須安利 konsole 終端程序, 下圖左 konsole 右 gnome-terminal, 只有 konsole 才有同時高亮的功能 (支持 regex)。這也是我仍然堅持用 konsole 的唯一原因, 而不是能顯示縮略圖的 terminology 終端:


3. 善用自動完成,比如 ls --s<敲 Tab 鍵>, Tab 鍵不僅僅可以查找命令, 找選項,還可以找文件名。

3.1 新手會覺得 Tab 鍵很強(qiáng)大, 但是同等強(qiáng)大的 Page Up/Down 被一般的教程所忽略了。輸入 ls 再按 Page Up/Down 可以自動完成且瀏覽之前的命令歷史。 不需要完整的命令。如輸入 fi 再按 Page Up,就會自動完成 `file /etc/gdm3/Xsession`, 再按 Page Up,就會自動完成 `find . -iname pool.jpg`,以上都是我輸入過的 fi 開頭的歷史記錄, 加上 Page Down 就可以上下瀏覽。購買鍵盤時請確保 Page Up/Down/Home/End 擁有獨立的鍵,而不是需要 Fn。Home/End 鍵的好處是快速切換去命令行的前方和后方。

p/s: 如果沒有 Page Up/Down 功能,請新建文件 ~/.inputrc , 確保有以下內(nèi)容:

"\e[5~": history-search-backward "\e[6~": history-search-forward "\e[1;5D": vi-prev-word "\e[1;5C": vi-next-word

前兩者是啟動 Page Up/Down 自動完成歷史記錄功能。后兩者是啟動 Ctrl+左右鍵, 可以以每個完整英文字的空格間隔來快速瀏覽+編輯一條命令行。"\e[1;5D" 和 "vi-prev-word" (空格間隔), "backward-word" (空格 ?=./ 間隔) 此類的關(guān)鍵字可以通過 bind -P 或 bind -p 取得。

3.2 基本的上下鍵則適用于瀏覽當(dāng)前 session 最近的歷史記錄。

3.3 Ctrl+Alt+] 再輸入 -a 可以把光標(biāo)移動去當(dāng)前命令的 -a 選項 (不限于選項,任何字都行)。缺點是只能輸入一個字, 多字可以使用 Ctrl+R 解決。輸入 Ctrl+R 再輸入選項 -a 可以出現(xiàn)之前的 -a 選項歷史紀(jì)錄, 然后敲左右鍵能停留且編輯。連續(xù)的 Ctrl+R 可以瀏覽更前的命令。

4. 善于在 ~/.bashrc 或 ~/.bash_aliases 上制作 alias 或 function, 好處是:
[a]. 省卻記憶量。
[b]. 提升使用命令速度。
[c]. 可以在命令旁加入 #comment (或 <<"COMMENT" 開端, COMMENT 結(jié)尾), 隨時打開 ~/.bash_aliases 復(fù)習(xí)。也可以用 `type -a 命令` 快速復(fù)習(xí)。我通常也會記錄命令的相關(guān)討論鏈接和心得撰寫在 note 文件,有需要就 grep 或 vi 里頭搜索即可。告訴你一個小技巧,把筆記后綴命名為相應(yīng)的編程語言, 如 note.sh, note.c, note.java,打開時就可以直接獲得美美的高亮。

4.1 寫一些有用的小工具。小工具本身就集成了很多選項的實踐,往后若要編寫相似功能的小工具,只需參考先前的選項是怎么用的。比如本人寫了recursive+高亮的 recurcat :

?

?

代碼包含了 find 的選項用法 (github 代碼):

?

(p/s: 沒看過 typea 命令? 當(dāng)然, typea 也是我寫的小工具, 是進(jìn)階版的 type -a,github 代碼)

5. 善用英文搜索 stackexchange( 也就是 Unix Linux Stack Exchange), stackoverflow,bash(大多數(shù)的命令問題都與 bash tag 相關(guān)) 關(guān)鍵字。有一點很重要,搜索 stackexchange 可以找到包括 stackoverflow 的結(jié)果:

?

p/s: 搜索選項時別放減號, 如上圖,輸入 ff 而不是 -ff。因為減號在搜索引擎是排除的意思。

5.1 在 stackexchange 或類似網(wǎng)站幫助別人。你不需要本來就很了解答案,但是在強(qiáng)答的過程中,你為了保證答案的準(zhǔn)確性,權(quán)威性,你會參考不同的資源,反復(fù)研究命令,這個過程可以學(xué)習(xí)到很多,特別是別人的問題很多都是 real-world problem,與工作環(huán)境息息相關(guān)的實踐,有助你未來的編程工作。而且這也是一種筆記, 當(dāng)你忘了某個命令課題, google 搜的答案就是你自己的回答,囧。

6. 常備份 ~/.bashrc, ~/.bash_aliases, ~/.bash_history 以及 note。安裝新的 os 時也可以直接遷移。說個題外話,其它如 ~/.vimrc 的備份也很重要。limkokhole/hisblock 最下方會教導(dǎo)你如何讓 gdrive 關(guān)機(jī)時自動備份 ~/.bash_history。

7. 善用懶人包命令,比如 unp 足以應(yīng)付大多數(shù)解壓需求。懶人包帶來的是好處(不用記憶)還是壞處(用 Linux 十年也不懂 xvfz)有待斟酌。順便安利我最近寫的 limkokhole/unx 取代無法自動新建 (1),(2) 目錄的 unp。

8. 打開 man 時要找選項是一件頭疼的事,用 /<空格>-Wall 搜索, 敲 -i 切換大小寫敏感性,這個 一般的 regex 其實無法囊括所有的選項的情況 (不信 ? 請現(xiàn)在 `man mplayer` 之下 /<空一格> scale 進(jìn)行搜索),要不然就是大海撈針。

我編寫了 superman 函數(shù) (github 代碼):

function superman () {if [[ "$1" == "-I" || "$1" == "-i" ]]; thenman "$2" | less -I -p "^[ ]+\"*-*$3( |=|,|$|\[|\+|\")"elseman "$1" | less -p "^[ ]+\"*-*$2( |=|,|$|\[|\+|\")"fi }

?

使用方式 (-i 表示 case insensitive) (本人 alias superman 去 sman 更方便):

$ superman -i gcc wall

?

能夠直接跳躍至 Wall 選項 (通常都是有幾個結(jié)果,可以用 n 和 Shift+n 快速上下跳躍):

?

跳躍至 mplayer 的 scale:

?

我也寫了 info 版本的 superinfo 函數(shù):

function superinfo () {if [[ "$1" == "-I" || "$1" == "-i" ]]; theninfo "$2" | less -I -p "^ *‘*'*\"*-*\** *$3’*( |=|,|$|\[|:|'|\+|\")"elseinfo "$1" | less -p "^ *‘*'*\"*-*\** *$2’*( |=|,|$|\[|:|'|\+|\")"fi }

使用方式和 `superman` 一樣:

$ superinfo -i gcc werror

9. 有少許命令是 shell built-in, 不能直接 man:

$ man cd No manual entry for cd $ type -a cd cd is a shell builtin

你需要使用 `man bash`(假設(shè)你是使用 bash shell) ,然后在里頭搜索,或者用這個自制的 bashman 函數(shù):

$ type -a bashman bashman is a function bashman () { man bash | less -p "^ $1 " } $ bashman cd

直接跳躍至 `man bash` 的 `cd` 部分 (當(dāng)然,` superman bash cd` 也可以):

?

編輯于 2019-07-07

?

?

總結(jié)

以上是生活随笔為你收集整理的如何学习(记住)linux命令(常用选项)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。