**入門及基本操作命令**
[TOC]
## 第2章 導航文件系統`ls pwd cd`
2.1 列出文件和文件夾`ls`
2.2 列出其他文件夾的內容`ls [folder]`
2.3 使用通配符列出文件夾的內容`ls *`
2.4 查看子文件夾中的文件列表`ls -R`
2.5 以單獨一列顯示內容列表`ls -l`
2.6?以逗號分隔列表顯示內容 `ls -m`
2.7?查看隱藏的文件和文件夾 `ls -a`
2.8 直觀顯示文件的類型 `ls -F`
??
2.9 以各種顏色顯示內容`ls --color`
2.10 列出權限,所有者以及其他信息 `ls -l`
2.11 以倒序列出文件內容`ls -r`
2.12 按日期和時間排序內容`ls -t`
2.13 按文件大小排序內容`ls -S`
2.14用K,M和G表示文大小`ls -h`
2.15 顯示當前目錄的路徑`pwd`
`pwd`: printing working directory
2.16 改為不同的目錄`cd`
2.17 改為home目錄`cd ~`
2.18 改為之前的目錄`cd -`
## 第3章 創建和銷毀`touch mkdir cp mv ln rm rmdir`
3.1 將文件改為當前時間`touch`
`tough -a xx.txt`: 只更新文件‘xx.txt’的訪問時間
`touch -m xx.txt`: 只更新文件‘xx.txt’的修改時間
>[info] 只有獲得文件寫入權限才可對文件使用`touch`命令修改文件時間。否則,該命令將會運行失敗。
3.2 將文件改為任意所需的時間`touch -t`
`touch -t[[CC]YY]MMDDhhmm[.ss]`
??
3.3 新建空文件`touch xx`
3.4 新建目錄`mkdir xx`
>[info] 在大多數系統中,使用`mkdir`命令創建的新目錄會賦予所有者讀取(r)、寫入(w)和執行(x)的權限,而只賦予組及其它用戶讀取(r)和執行(w)的權限。 要想更改這些設置,可使用`chmod`命令。
3.5 創建新目錄以及必要的子目錄`mkdir -p`
`mkdir -p picture/personal/family`
在當前目錄下依次創建了picture、personal、family三級目錄。
3.6 復制文件`cp`
`cp source [target]`
3.7 使用通配符復制文件`cp *`
3.8 顯示復制文件的過程`cp -v`
3.9 防止在復制時覆蓋重要文件`cp -i`
3.10 復制目錄`cp -r`
目錄及其內容都會被復制。
3.11 為建立完善副本而將文件復制到另一個目錄`cp -a`
確保`cp`命令不會復制軟鏈接的內容(可能極大地增加復制量),而保存關鍵的文件屬性(所有者,時間戳),并遞歸處理子目錄。
3.12 移動文件和文件夾`mv`
`mv source [target]`
`cp`和`mv`命令有很多選項是相同的。比如:
`-i`:在復制和移動文件時交互提示是否覆蓋已有文件。
`-v`:在復制和移動文件是顯示執行過程。
3.13 重命名文件和文件夾`mv`
條件:home目錄中有一個名為‘dogs’的軟鏈接(指向/home/scott/picture/dogs),要將該軟鏈接移動到/home/scott/libby子目錄中
1. `$mv dogs ~/libby`: 只移動軟鏈接本身
2. `$mv dogs/ ~/libby`: 軟鏈接后面多了一個`/`,則移動軟鏈接所指向的目錄,而不是軟鏈接本身。
3.14 理解Linux存儲文件的方式`df -ih`
在Linux中一切皆文件。那么,是什么使得某個文件成為文件呢?
實際情況是,我們所看到的文件是**指向索引節點的指針**:這是一種數據結構,其中存儲有關物理數據在計算機上的具體位置的信息,還存儲了與數據有關的**元數據**:
* 文件類型
* 大小
* 修改時間
* 所有權
* 權限等(參見第2章和第8章以了解更多相關信息)。
在創建文件時,文件系統會為其分配一個獨特的索引節點號,而用戶會為其分配一個名稱,這兩者都存儲在驅動器上的索引節點表中。可通過其名稱引用某個文件,Linux會使用該名稱查詢關聯的索引節點。Linux獲得存儲在索引節點中的信息之后,就可以對該文件進行操作。 如果要查看與文件關聯的索引節點號,可使用`ls -i`命令:
~~~linux
$ ls -i
49889 backup daily.sh
49796 dotfiles/
49795 dotfiles.sh
49886 extra/
49291 wp upgrade.sh
~~~
上述文件或目錄左邊的編號就是索引節點號。
目錄或文件夾是一個文件(有著自己的索引節點),該文件將其內部的文件與對應的索引節點關聯起來。
大多數文件系統都會創建固定數量的索引節點,因此從理論上來說,如果索引節點已經用完,那么即使有大量的磁盤空間,也無法創建更多文件(這種情況很少見,但作者就曾經遇到過一次)。如果你想知道文件系統擁有的索引節點數以及剩余的可用索引節點數,可使用第13章將介紹的df命令,但要使用-h(便于用戶閱讀)和-i(或--inodes)選項,可看到類似下面的結果:
~~~linux
$ df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda 4.9G 742M 4.1G 16% /
none 396M 308K 395M 1% /run
/dev/sdb 42G 33G 8.8G 79% /var
$ df -i
Filesystem Inodes Iused IFree IUse% Mounted on
/dev/sda 327680 40627 287053 13% /
none 505701 826 504875 1% /run
/dev/sdb 2785280 706754 2078526 26% /var
~~~
可以看到`/var `使用了 79%的空間,但僅使用26%的可用索引節點。 在此情況下,你就可以創建大批量的小文件。
3.15 創建指向另一個文件或目錄的鏈接`ln`
`ln`:link的簡寫
`硬鏈接`:??
`軟鏈接`:??
3.16 刪除文件`rm`
`rm`:remove的簡寫。徹底從磁盤上刪除文件,文件不存在。
`shred -n#`:將文件刪除后重寫#次(最多25次)。確保絕對無人能夠恢復刪除的文件。但該命名是否能夠成功執行很大程度上依賴正在使用的文件系統類型。
3.17 使用通配符一次性刪除多個文件`rm *`
3.18 防止刪除關鍵文件`rm -i`
在刪除每個文件之前,會要求確認刪除
3.19 刪除空目錄`rmdir`
3.20 刪除文件和非空的目錄`rm -rf`
刪除目錄及其中所有文件及子目錄的穩妥方法。
>[warning] 謹慎使用通配符
> `rm -rf ~/libby/*`,刪除`~/libby`目錄下的文件及子目錄
> `rm -rf ~/libby /*`,刪除`~/libby`目錄和根目錄下的文件及子目錄
>[danger] 不要輸入
> `rm -rf /*`
> 上述命令將刪除整個系統!!!
>[danger] 永遠不要輸入
> `rm -rf .*/*`
> 上述命令在刪除以`.`為名稱開頭的目錄后,還會匹配`..`而刪除當前工作目錄的上級目錄中的所有數據。
3.21 刪除難纏的文件
1. 刪除文件名中帶有空格的文件
`$ rm "dog cat.jpg"`
2. 刪除文件名以`-`開頭的文件
`$ rm -- -dogCat.jpg`
`$ rm ./-dogCat.jpg`
## 第4章 學習命令`man info whatis whereis which type`
4.1 使用man查找命令相關信息`man`
一般`man`查詢的命令手冊內容包括如下部分
* NAME(命令名稱):命令的名稱和簡要的介紹。
* SYNOPSIS:命令的基本格式。
* DESCRIPTION(描述):描述命令功能的概要介紹。
* OPTIONS(選項)-man 命令最基本的部分:命令的各種選項,以及對每個選項的簡短介紹。
* FILES(文件):命令使用的其他文件。AUTHOR(作者)編寫命令的作者,以及聯系信息。
* BUGS(錯誤):已知的錯誤,以及如何拔告新錯誤。
* COPYRIGHT(版權聲明):版權信息。
* SEE ALSO(參見):其他相關的命令。
4.2 基于命令的名稱來快速弄清其功能`man -f` `whatis`
不需要打開命令的手冊而快速知道命令的功能
~~~linux
$ man -f ls
ls (1) - list directory content
$ whatis ls
ls (1) - list directory content
~~~
`whatis` 命令的另一個重要優點是支持正則表達式和通配符。要用通配符搜索`man` 數據庫,可以使用`-w`選項(或`--wildcard`)。
~~~linux
$ whatis -w ls*
ls (1) - list directory contents
lsb (8) -Linux Standard Base support for Debian
lshal (1) -List devices and their properties
lshw (1) -list hardware
lskat (6) -Lieutnant Skat card game for KDE
~~~
與不使用選項的`whatis`命令相比,使用通配符可能會讓搜索速度稍微慢一些,但是對于當今運行速度越來越快的計算機來說,這種影響是微不足道的。
正則表達式可以和`-r`(或`--regex`)選項一起使用:
~~~linux
$ whatis -r ^rm.*
rm (1) -remove files or directories
rmail (8) -handle remote mail received via uucp
rmdir (1) -remove empty directories
rmt (8) -remote magtape protocol module
~~~
4.3 基于其功能搜索命令`man -k` `apropos`
如果對命令能完成的功能有一定的了解,但不知道命令的實際名稱,該怎么辦呢?這時可以試試 man 命令的`-k`選項(或`--apropos`),或者干脆使用 `apropos` 命令,來搜索一
個描述所需查找命令的詞或短語。 搜索的結果是一個命令列表,列出了其名稱或簡單說明能夠匹配搜索詞的所有命令。
~~~linux
$ man list
No manual entry for list
$ man -k list
last (1) -show listing of last logged in users
ls (1) -list directory contents
lshw (1) -list hardware
lsof (8) -list open files
$ apropos -e list
ls (1) - list directory contents
lshw (1) -list hardware
lsof (8) -list open files
~~~
4.4 讀取命令的特定手冊頁面`man [1~8]`
各個命令的手冊頁面按照其類型分成了不同的部分,數字從1到8。劃分的各部分如下所示:
(1)普通命令。如 `cd`,`chmod`、`lp`,`mkdir`和`passwd`
(2)由內核提供的底層系統調用。如`gettimeofday`,`fork`和`chmod`。
(3)C庫函數,如`beep`,`HTML::Parser` 和`Mail:Internet`。
(4)特殊文件,如`/dev`中找到的設備,包括控制臺(console),打印機(Ip)和鼠標(mouse)。
(5)文件格式和約定,如`apt.conf`,`dpkg.cfg`,`hosts` 和`passwd`。
(6)游戲,如 atlantik,bouncingcow,kmahjongg和 rubik。
(7)雜項,包括宏包,如ascii,samba和utf-8.
(8)root用戶使用的系統管理命令,如`mount`和`shutdown`。
4.5 使用 info學習命令`info`
4.6 在info頁面中導航
4.7 查找命令的可執行文件、源文件和手冊頁面的路徑`whereis [-bsm]`
~~~linux
$ whereis kword
kword: /usr/src/koffice-1.4.1/kword /usr/bin/kword
/usr/bin/X11/kword usr/share/man/man1/kword.1.gz
~~~
whereis 命令首先報告源文件的位置:
`/usr/src/koffice-1.4.1/kword`;
接著報告任何二進制可執行文件的位置:
`/usr/bin/kword` 和`/usr/bin/X11/kword`.在這臺計算機的兩個位置都能找到KWord,雖然有些不尋常,但也不算奇怪。
最后找到的是手冊頁面的位置:
`/usr/share/man/man1/kword.1.gz`。
有了上述信息后,現在就能夠確認這臺計算機上確實已經安裝了這個程序,而且也知道如何運行它。
如果只想搜索二進制文件路徑,可以使用`-b`選項,如下所示:
~~~linux
$ whereis -b kword
kword:/usr/bin/kword/usr/bin/x11/kword
~~~
如果只想搜索手冊頁面路徑,可使用`-m`選項,如下所示:
~~~linux
$ whereis -m kword
kword:/usr/share/man/man1/kword.1.gz
~~~
最后,如果只想搜索源文件路徑,可以嘗試使用`-s`選項,如下所示:
~~~linux
$ whereis -s kword
kword:/usr/src/koffice-1.4.1/kword
~~~
4.8 找出將要運行的命令的版本`which [-a]`
回想一下`whereis`命令,以及用`-b`選項只查詢KWord的二進制文件信息時發生的情況。
~~~linux
$whereis -b kword
kword: /usr/bin/kword /usr/bin/X11/kword
~~~
在兩個位置都有KWord的可執行文件。但是哪一個文件會先運行呢?運行`which` 命令就可以得到答案。
~~~linux
$ which kword
/usr/bin/kword
~~~
只要輸入命令的名稱,`which`命令就能告訴你這個命令的哪個版本將會運行。即是:如果輸入kword,然后按Enter鍵,shell 將會執行`/usr/bin`目錄下找到的`kword
`程序。 如果想運行`/usr/bin/X11`目錄下的版本,必須用 cd 命令切換目錄,然后輸入`./kword`,或者是使用命令的絕對路徑,輸入`/usr/bin/X11/kword`。
`which`命令也是一種快速判斷系統中是否存在特定命令的方法。如果在系統中有相應的命令,而且該命令位于`PATH`中,`which` 命令將告訴你在何處可以找到這個命令。
如果命令不存在,就不會在命令行中返回任何信息。
~~~linux
$ which arglebargle
$
~~~
如果要查找命令的所有位置(就像使用 whereis-b一樣),可以使用-a(表示all)選項。
~~~linux
$ which -a kword
/usr/bin/kword
/usr/bin/X11/kword
~~~
4.9 揭示shell如何解釋命令`type [-ta]`
type 命令顯示bash如何解釋你運行的命令,例如:
~~~
$ type ls
ls is aliased to '/bin/ls-F--color'
$ type cd
cd is a shell builtin
$ type whereis
whereis is /usr/bin/whereis
$ type mark
mark is a function
mark ()
{
mkdir -p "SMARKPATH";
ln -s "$(pwd)" "SMARKPATH/$1"
}
$ type do
do is a shell keyword
~~~

type 命令的輸出表明 bash如何對待每個命令。有5種可能的答案:
* alias:你所創建的軟鏈接,包括別名的目標文件。這對于硬鏈接沒有效果,不會顯示任何內容。
* builtin:內置于bash中且自身直接運行的會令,與調用外部程序相對。內建函數的示例有`alias`,`cd`,`echo`,`history`,`source` 和`type`。
* file:未內置于shell 的命令,該命令于外部調用。例如:`whereis`和`whatis`。
* function:由Linux、軟件或用戶創建的函數。與別名類似,`type`也會輸出函數的實際內容。
* keyword:僅由bash使用的保留字,如`do`、`for`、`if`、`then`、`while`和`!`。
如果只想查看這五種中的哪一種適用于特定順命令,可使用`-t`選項。
~~~linux
$ type -t ls
alias
$ type -t cd
builtin
$ type -t mark
function
~~~
這段代碼非常簡潔。`-a`選項的結果會長一些,因為它不僅提供命令類型, 也提供可找到該命令的所有位置。
~~~linux
$ type -a ls
ls is aliased to '/bin/ls -F--color'
ls is /bin/ls
~~~
現在我們知道了 ls是別名,以及別名的目標和源命令的路徑.
type 不是我們每天都會使用的命令,但如果你想知道為什么命令沒有按照預期方式執行操作,type 將幫助你了解問題所在。
## 第5章 組合命令`; && || $() | stdin stdout stderr > >> < tee`
5.1 連續運行多個命令`;`
命令棧是將所有需要運行的命令放到 shell中的一行上,每條命令之間用分號`;`隔開。然后按
順序依次執行每個命令,只有一條命令結束運行(成功或失敗),才會運行下一條命令。 這很容易實現,也確實能夠節省時間。
>[danger] 在刪除或移動文件時確保輸入你希望執行的命令,因為這些命令將依次執行,即使前一條命令失敗也會繼續執行,因此最終可能產生意料之外的結果。
5.2 僅在前面的命令成功運行時才運行下一條命令`&&`
示例:
~~~
$ ps2pdf foobar.ps && lpr foobar.pdf && rm foobar.ps
~~~
如上所示,使用`ps2pdf`命令把PostScript 文件轉換成PDF文件,再打印生成的PDF 文件,之后刪除 PostScript 文件。如果使用分號,萬一`ps2pdf`命令失敗,PostScript文件將被徹底刪除,讓你想再來一次都沒辦法。
5.3 僅在前面的命令運行失貝文時才運行下一條命令`||`
5.4 將一條命令的輸出插入另一條命令`$()`
5.5 理解輸入/輸出流`stdin stdout stderr`
5.6 將一條命令的輸出用作另一條命令的輸入`|`
5.7 將命令的輸出重定向到文件`>`
5.8 防止重定向時覆蓋文件`set -o noclobber`
5.9 將命令的輸出追加到文件中`>>`
5.10 將文件用作命令的輸入`<`
5.11 結合使用輸入和輸出重定向
5.12 將輸出同時發送到文件和stdout`tee`
- WebAPP
- Linux Command
- 入門
- 處理文件
- 查找文件單詞
- 環境
- 聯網
- Linux
- Linux目錄配置標準:FHS
- Linux文件與目錄管理
- Linux賬號管理與ACL權限設置
- Linux系統資源查看
- 軟件包管理
- Bash
- Daemon/Systemd
- ftp
- Apache
- MySQL
- Command
- Replication
- mysqld
- remote access
- remark
- 限制
- PHP
- String
- Array
- Function
- Class
- File
- JAVA
- Protocals
- http
- mqtt
- IDE
- phpDesigner
- eclipse
- vscode
- Notepad++
- WebAPI
- Javasript
- DOM
- BOM
- Event
- Class
- Module
- Ajax
- Fetch
- Promise
- async/await
- Statements and declarations
- Function
- Framwork
- jQurey
- Types
- Promise
- BootStrap
- v4
- ThinkPHP5
- install
- 定時任務
- CodeIgniter
- React.js
- node.js
- npm
- npm-commands
- npm-folder
- package.json
- Docker and private modules
- module
- webpack.js
- install
- configuration
- package.json
- entry
- modules
- plugins
- Code Splitting
- loaders
- libs
- API
- webpack-cli
- Vue.js
- install
- Compile
- VueAPI
- vuex
- vue-router
- vue-devtools
- vue-cli
- vue-loader
- VDOM
- vue-instance
- components
- template
- Single-File Components
- props
- data
- methods
- computed
- watch
- Event-handling
- Render Func
- remark
- 案例學習
- bootstrap-vue
- modal
- fontAwesome
- Hosting Font Awesome Yourself
- using with jquery
- using with Vue.js
- HTML
- CSS
- plugins
- Chart.js
- D3.js
- phpSpreadSheet
- Guzzle
- Cmder
- Git
- git命令
- git流程
- Postman
- Markdown
- Regular Expressions
- PowerDesigner
- 附錄1-學習資源