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
命令後,會出現如下的結果:
對於每個部分所代表的意思如下:
其他引數:
# 顯示全部檔案,包括隱藏檔案
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目錄結構
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 檢視檔案
cat
和tac
命令
列印檔案內容到終端,其中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 位)
more
和less
分頁檢視
more file
開啟後預設只顯示一屏內容,終端底部顯示當前閱讀的進度。可以使用Enter
鍵向下滾動一行,使用 Space
鍵向下滾動一屏,按下h
顯示幫助,q
退出。
head
和tail
檢視
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 搜尋檔案
與搜尋相關的命令常用的有whereis
,which
,find
和locate
:
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