1. 程式人生 > >Linux學習筆記(一)

Linux學習筆記(一)

1. 基本概念和操作

1.1 基本命令:

# 建立一個名為file的檔案
touch file
# 進入一個目錄
cd /etc/
# 檢視當前所在目錄
pwd

1.2 Shell 常用萬用字元

字元 含義
* 匹配0或多個字元
? 匹配任意一個字元
[list] 匹配list中的任意單一字元
[^list] 匹配除list中的任意單一字元以外字元
[c1-c2] 匹配c1-c2中的任意單一字元 如[0-9][a-z]
{string1,string2,...} 匹配string1或string2(或更多)其一字串
{c1..c2} 匹配c1-c2中全部字元 如{0…10}

2. 使用者及檔案許可權管理

2.1 使用者管理

2.1.1 檢視當前使用者

who am i 

2.1.2 建立使用者

使用root許可權(sudo),建立一個名為lilei的使用者(adduser <user>),並切換到該使用者(su -<user>),最後退出該使用者:

sudo adduser lilei
su -l lilei
exit

2.1.3 使用者組

檢視使用者所屬使用者組,使用groups命令

groups shiyanlou 

或檢視/ect/group檔案

cat /etc/group | grep -E "shiyanlou"

使用一個已經在sudo使用者組的使用者,將其他使用者加入sodu使用者組

su shiyanlou
groups lilei
sudo usermod -G sudo lilei
groups lilei

刪除使用者

sudo deluser lilei --remove-home

2.2 檔案許可權

2.2.1 檢視檔案許可權

ls 
# 使用較長格式列出檔案
ls -l

輸入ls-l命令後,會出現如下的結果:

檔案許可權-1

對於每個部分所代表的意思如下: 檔案許可權-2

檔案許可權-3

其他引數:

# 顯示全部檔案,包括隱藏檔案
ls -A
# 同時使用A和l引數
ls -Al
# 檢視某一個目錄的完整屬性
ls -dl <目錄名>
# 顯示所有檔案大小
ls -AsSh

2.2.2 變更檔案所有者

sudo chown <變更後的所有者> <檔名>

2.2.3 修改檔案許可權

g、o、u分別代表group、others和user,+ 和 - 分別表示增加和去掉相應的許可權。如果是要去掉group和others的讀寫許可權,則

chmod go-rw <檔名>

3. Linux目錄結構和檔案基本操作

3.1 Linux目錄結構

Linux目錄結構

3.2 檔案基本操作

3.2.1 新建

新建空白檔案

touch命令不帶任何引數,只指定一個檔名,可以建立空白檔案(不會覆蓋已有同名檔案)

# touch <檔名>,如 
touch file1

新建目錄

mkdir命令

# mkdir <目錄名>,如
mkdir mydir
# 增加p引數,可以同時建立多級目錄,如
mkdir -p father/son/grandson

3.2.2 複製

複製檔案

# cp <檔案> <要複製到的路徑>
cp test father/son/grandson

複製目錄

cp命令上帶-r引數

# cp -r <目錄> <要複製到的目錄>
cp -r father family

3.2.3 刪除

# rm <檔名>
rm test
# 強制刪除
rm -f test
# 刪除目錄, rm -r <目錄>
rm -r family 

3.2.4 移動檔案與重新命名

mv命令

移動檔案

# mv <檔案> <移動到的目錄>
mv file1 mydir

重新命名

# mv <舊檔名> <新檔名>
mv file1 myfile 

# 批量重新命名
# rename 
# 使用萬用字元批量建立5個檔案
touch {1..5}.txt
# 批量將這5個檔案的字尾改為.c
rename 's/\.txt/\.c' *.txt
# 批量將這5個檔案的檔名和字尾改為大寫
rename 'y/a-z/A-Z' *.c

3.2.5 檢視檔案

cattac命令

列印檔案內容到終端,其中cat為正序顯示,tac為倒序顯示

cat file
# -n 引數顯示行號
cat -n file

nl命令

新增行號並列印,比cat -n更專業的行號列印。主要的引數如下:

-b : 指定新增行號的方式,主要有兩種:
    -b a:表示無論是否為空行,同樣列出行號("cat -n"就是這種方式)
    -b t:只列出非空行的編號並列出(預設為這種方式)
-n : 設定行號的樣式,主要有三種:
    -n ln:在行號欄位最左端顯示
    -n rn:在行號欄位最右邊顯示,且不加 0
    -n rz:在行號欄位最右邊顯示,且加 0
-w : 行號欄位佔用的位數(預設為 6 位)

moreless分頁檢視

more file

開啟後預設只顯示一屏內容,終端底部顯示當前閱讀的進度。可以使用Enter鍵向下滾動一行,使用 Space 鍵向下滾動一屏,按下h 顯示幫助,q退出。

headtail檢視

tail file 
# 看一行
tail -n 1 file
# tail -f引數 可以不停地讀取某個檔案的內容並顯示

3.2.6 檢視檔案型別

file filename

4. 環境變數與檔案查詢

4.1 環境變數

# 建立一個變數名為tmp的變數
declaere tmp
# 賦值 
tmp = test
# 讀取變數的值
echo $tmp

環境變數相關命令:

命令 說明
set 顯示當前Shell所有變數,包括其內建環境變數,使用者自定義變數及匯出的環境變數
env 顯示與當前使用者相關的環境變數,還可以讓命令在指定環境下執行
export 顯示從Shell中匯出成環境變數的變數,也能通過它將自定義變數匯出為環境變數
# 將tmp匯出為環境變數,但在關閉shell時失效
export tmp
# 刪除
unset tmp

如果需要讓環境變數永久生效,需要修改環境變數配置檔案。對所有使用者永久生效,在/etc/profile中新增該變數即可。

變數設定方式 說明
${變數名#匹配字串} 從頭向後開始匹配,刪除符合匹配字串的最短資料
${變數名##匹配字串} 從頭向後開始匹配,刪除符合匹配字串的最長資料
${變數名%匹配字串} 從尾向前開始匹配,刪除符合匹配字串的最短資料
${變數名%%匹配字串} 從尾向前開始匹配,刪除符合匹配字串的最長資料8
${變數名/舊的字串/新的字串} 將符合舊字串的第一個字串替換為新的字串
${變數名//舊的字串/新的字串} 將符合舊字串的全部字串替換為新的字串

在 Shell 中修改了配置指令碼檔案之後(比如 zsh 的配置檔案 home 目錄下的 .zshrc),每次都要退出終端重新開啟甚至重啟主機之後其才能生效,但可以使用 source 命令來讓其立即生效,如:

source .zshrc

4.2 搜尋檔案

與搜尋相關的命令常用的有whereiswhichfindlocate

  • wheries簡單快速
  • locate快而全
  • which小而精
  • find精而細

4.2.1 whereis命令

直接從資料庫中查詢。whereis 只能搜尋二進位制檔案(-b),man 幫助檔案(-m)和原始碼檔案(-s)。

# whereis <搜尋內容>
whereis findcontent

4.2.2 locate命令

通過“ /var/lib/mlocate/mlocate.db ”資料庫查詢,系統會使用定時任務每天自動執行 updatedb 命令更新一次,所以有時候剛新增的檔案可能會找不到,需要手動執行一次updatedb 命令。它可以用來查詢指定目錄下的不同檔案型別。

# locate <要查詢的檔案>
# 查詢 /etc 下所有以 sh 開頭的檔案
locate /etc/sh
# 注:它不只是在/etc/目錄下查詢,還會自動遞迴子目錄進行查詢
# 查詢 /usr/share/ 下所有 jpg 檔案
# 注意要新增 * 號前面的反斜槓轉義
locate /usr/share/\*.jpg

如果想只統計數目可以加上-c 引數,-i 引數可以忽略大小寫進行查詢,whereis-b-m-s 同樣可以使用。

4.2.3 which命令

通常使用which 來確定是否安裝了某個指定的軟體,因為它只從 PATH 環境變數指定的路徑中去搜索命令:

which findcontent

4.2.4 find命令

不但可以通過檔案型別、檔名進行查詢而且可以根據檔案的屬性(如檔案的時間戳,檔案的許可權等)進行搜尋。

與時間相關的命令引數:

  • -atime :最後訪問時間
  • -ctime:最後修改檔案內容的時間
  • -mtime:最後修改檔案屬性的時間
    • -mtime n:n 為數字,表示為在 n 天之前的“一天之內”修改過的檔案
    • -mtime +n:列出在 n 天之前(不包含 n 天本身)被修改過的檔案
    • -mtime -n:列出在 n 天之內(包含 n 天本身)被修改過的檔案
    • -newer file:file 為一個已存在的檔案,列出比 file 還要新的檔名
#  find [path] [option] [action] 
# 去 /etc/ 目錄下面 ,搜尋名字叫做 interfaces 的檔案或者目錄。
sudo find /etc/ -name interfaces
# 列出 home 目錄中,當天(24 小時之內)有改動的檔案:
find ~ -mtime 0
# 列出使用者家目錄下比 Code 資料夾新的檔案:
find ~ -newer /home/shiyanlou/Code