標籤:
一、cd 切換目錄
cd /etc 切換到/etc目錄下 cd ~ 切換到主目錄下
cd .. 返回上級目錄 cd ../.. 返回上兩級目錄
cd - 返回進入此目錄之前所在的目錄
二、echo 輸出
echo "this is a test!" 顯示一般字元串:
echo -e "\n" 輸出一行空行,-e 開啟轉義
echo `date` 顯示命令執行結果
三、chmod 授予使用許可權
chmod abc file 基本格式
其中a,b,c各為一個數字,分別表示User、Group、及Other的許可權,許可權可分為:r=4 表示可讀取,w=2 表示可寫入,x=1 表示可執行。
若要rwx屬性則4+2+1=7;
若要rw-屬性則4+2=6;
若要r--屬性則為4。
四、cat 查看檔案
1)列印檔案內容:
cat cat1.txt 列印單個檔案內容
cat cat1.txt cat2.txt 列印多個檔案內容,將檔案內容拼接在一起
echo "Test" | cat - cat1.txt 將標準輸入和檔案內容拼接在一起
在上面的代碼中 - 被作為stdin文本的檔案名稱
2)列印檔案內容時常用參數:
cat -n cat3.txt 列印檔案內容及行號,會為空白行加上行號
cat -b cat3.txt 列印檔案內容及行號,跳過空白行
cat -s cat3.txt 壓縮相鄰的空白行
3)從鍵盤建立一個檔案:
cat > cat4.txt 只能建立新檔案,不能編輯已有檔案
4)將幾個檔案合并為一個檔案:
cat cat1.txt cat2.txt cat3.txt > cat5.txt
五、sed 文本編輯文本
1)本機覆寫:
sed ‘s/world/sed/‘ sed1.txt?
僅替換每行的第一個匹配者,不會修改源檔案
sed ‘s/world/sed/2‘ sed1.txt??
替換每行的第2個匹配者?
2)全域替換:
sed ‘s/world/sed/g‘ sed1.txt
替換檔案中的所有匹配者
3)替換的字串使用Regex:
sed ‘s/^hello.*/sed/g‘ sed1.txt
4)分界符/可以替換成# ; *等字元
sed ‘s*world*sed*g‘ sed1.txt
5)刪除字元:
sed ‘/^$/d‘ sed1.txt 刪除sed1.txt中的空行
6)如果操作的字串中包含變數,要將變數再次用單引號引起來:
b="sed"
sed ‘s/world/‘$b‘‘ sed1.txt?
否則變數名直接當做字串處理
7)直接操作源檔案:?
sed -i ‘s/world/sed/‘ sed1.txt?
8)一次性替換多個:?
sed -e ‘s/hello/this is/g‘ -e ‘s/sed/the sed/g‘ sed1.txt?
9)替換動作包含在檔案中:?
vim ./test.sed
s/hello/this is/g?
s/sed/the sed/g?
sed -f test.sed sed1.txt? > sed2.txt --儲存在新的檔案中
sed -i -f test.sed sed1.txt? --直接作用在源檔案中
六、read 接受鍵盤資料和讀取檔案
1)read接受從鍵盤的輸入:
read -p "Enter your name: " name
echo "Hello $name"
如果不指定變數,那麼read命令會將接收到的資料放置在環境變數REPLY中:
read -p "How old are you? "
echo "I‘m $REPLY"
2)接受多個資料:?
?read -p "Enter your name and age: " name age
echo "My name is $name, and I‘m $age."
3)計時輸入:?
? read -t 3 -p "Enter your name: " name
4)默讀:
read -s -p "Enter your password: " password
echo "Your password is $ password "
輸入的密碼不會顯示在螢幕上。
5)讀檔案:?
vim ./test.txt
first
second
third
vim ./read4.sh
cat -n test.txt | while read line
do
echo $line
done
七、awk 進階文本處理
1)基本結構介紹:
awk ‘BEGIN{ commands } { commands } END{commands }‘ file
awk命令也可以從stdin中讀取:
echo | awk ‘BEGIN{ commands } { commands } END{ commands }‘
awk指令碼通常由3部分組成:BEGIN,語句塊,EDN,3部分都是可選項,在指令碼中可省略任意部分。
其中BEGIN和END關鍵字必須大寫,awk的指令碼內容要包含在單引號或者雙引號內,awk指令碼使用print輸出。
所有的commands之間用分號隔開。
2)awk工作原理:?
(1)執行BEGIN{ commands }?語句
(2)從檔案或者stdin中讀取一行,然後執行{ commands },重複這個過程,直到檔案全部讀取完畢
(3)當讀至輸入資料流末尾時,執行END{ commands }中的語句
3)從檔案中讀取行:?
awk ‘BEGIN{ print "start" } { print } END{ print "end" }‘ awk1.txt
語句塊中使用不帶參數的print時,它會列印從stdin或者檔案中讀取到的當前行。
4)從標準輸入中讀取行:?
echo -e "line1\nline2" | awk ‘BEGIN{ print "start" } { print } END{ print "end" }‘
5)省略BEGIN:
awk ‘{ print } END{ print "end" }‘ awk1.txt
6)再省略END:
awk ‘{ print }‘ awk1.txt
7)省略語句塊:
awk ‘BEGIN{ print "start" } END{ print "end" }‘ awk1.txt
8)語句塊工作原理:
從檔案或者標準輸入讀入有‘\n‘分行符號分割的一條記錄,然後將該條記錄 按指定的分隔字元劃分欄位,$0則表示該條記錄所有欄位,$1表示該條記錄第一個欄位,$n表示該條記錄第n個欄位。預設分隔符號是"空白鍵" 或 "[tab]鍵"。
9)其它一些特殊變數:
NR:表示記錄數量,在執行過程中對應於當前行號。
NF:表示欄位數量,在執行過程中對應於當前的欄位數。
舉例:
awk ‘{ print $0 }‘ awk2.txt --列印全部的常值內容
awk ‘{ print NR,NF,$3 }‘ awk2.txt --列印每行第3列的常值內容
awk ‘END{ print NR }‘ awk2.txt --統計檔案中的行數
awk ‘END{ print NF }‘ awk2.txt --統計檔案中的列數
awk -F ‘;‘ ‘{ print $2 }‘ awk3.txt --輸出第二個欄位
八、ssh linux之間遠程登入
ssh [email protected]_ip 終端遠程登入到目標機器
ssh [email protected]_ip "command; command;…"
遠程登入目標機器執行各種shell命令,命令之間用分號隔開
九、scp Linux之間複製檔案和目錄
1、從本地複製到遠程
scp -r local_folder [email protected]_ip:remote_folder
scp -r local_folder remote_ip:remote_folder
2、從遠程複製到本地
scp -r [email protected]_ip:remote_folder local_folder
十、重新導向
command > filename ">" 表示標準輸出到filename中,如果檔案不存在,則建立檔案,已存在,則覆蓋檔案中原有的內容
command >> filename ">>" 表示標準輸出到filename中,如果檔案不存在,則建立檔案,已存在,追加到原有檔案的後面
command >> filename 2>&1 “2>&1”是將錯誤輸出重新導向到標準輸出,這裡的標準輸出已經重新導向到了filename ,即將錯誤輸出也重新導向到filename檔案中
十一、rm 刪除檔案和目錄
1)刪除檔案:
rm rm1.txt 刪除rm1.txt
rm rm2.txt rm3.txt 依次刪除指定的兩個檔案
2)刪除目錄:
rm -r dir1 通過-r參數刪除目錄
注意:上面方法刪除檔案或目錄都會詢問使用者是否刪除,如果想直接刪除,通過指定參數-f
rm -f rm4.txt 直接刪除檔案rm4.txt
rm -rf dir2 直接刪除目錄dir2
3)顯示執行過程資訊:
rm -vf rm5.txt 直接刪除檔案rm5.txt ,並顯示執行過程資訊
rm -vrf dir3 直接刪除dir3目錄,並顯示執行過程資訊
4)使用Regex:
rm -vf *.log 刪除目前的目錄下的所有.log檔案
rm -vrf *rm* 刪除所有名字中包含rm字元的檔案和目錄
十二、cp 複製檔案和目錄
1)複製檔案:
cp cp1.txt cp2.txt 目前的目錄下複製檔案
\cp cp1.txt cp2.txt 當目標檔案已存在,通過\cp強制複製
cp cp1.txt /root/cp2.txt 跨目錄複寫檔案
2)複製檔案、目錄到新的目錄(新的目錄必須已經存在):
cp cp1.txt dir1 複製一個檔案到目錄dir1中
cp cp1.log cp2.txt dir1 複製多個檔案到目錄dir1下
cp -r dir2 dir1 複製目錄dir2到目錄dir1中
3)使用Regex
cp *.log dir3 把目前的目錄下所有的.log檔案複製到dir3目錄下
cp -r dir1/ * dir3 複製dir1下的所有檔案以及目錄到dir3中
4)常用參數:
cp -v cp1.txt cp3.txt 顯示執行過程資訊
cp -i cp1.txt cp3.txt 如果目標檔案已存在,複製前先詢問使用者
十三、free 檢查記憶體的使用方式:
-b 、 -k 、 -m 以Byte、 KB、 MB為單位顯示記憶體使用量情況
-s<間隔秒數> 持續觀察記憶體使用量狀況
十四、mkdir 建立目錄
mkdir dir 僅可建立普通的不含有子目錄的目錄
mkdir -p dir /dir1 可建立含有子目錄的目錄
注意:指定的目錄名不能是目前的目錄中已有的目錄
十五、let 對變數進行數值計算
a=1 let "a+1" echo &a 輸出結果為2
十六、ls 列出目標目錄中所有的子目錄和檔案
ls /root 列出/root目錄下的內容
也可以先cd命令進入到/root目錄下,然後執行ls:
cd /root
ls -lh #列出檔案詳細資料,檔案大小以KB為單位,每行只列出一個檔案資訊
十七、df 檢查檔案系統的磁碟空間佔用情況
df -h 根據目前磁碟空間的使用方式 以更易讀的方式顯示
十八、mv 檔案和目錄重新命名、移動
1)檔案、目錄重新命名:
mv mv.txt new_mv.txt 檔案重新命名
mv dir new_dir 目錄重新命名
2)移動檔案到目錄中(目標目錄必須已經存在):
mv new_mv.txt mv.log dir1 移動目前的目錄下多個檔案到dir1中
mv dir1/new_mv.txt dir2 移動dir1目錄下的new_mv.txt到dir2中
3)移動目錄到新的目錄中(新目錄必須已存在):
mv dir1 dir2 將dir1移動到dir2中
4)使用Regex
mv dir2/*.txt dir3 把dir1裡的所有.txt檔案移動到dir3
5)常用參數 :
mv -f dir3/new_mv.txt dir 當dir下已存在該檔案時,直接強制覆蓋
mv log1.txt -b log2.txt 先對log2.txt備份(名字為log2.txt~)再覆蓋
mv -t dir2 log1.txt log2.txt 移動多個檔案到dir2中,目標目錄在前
十九、tr 字元操作(替換、刪除、壓縮等)
1)字元轉換(替換):
echo "TEST" | tr ‘A-Z‘ ‘a-z‘
echo "abc adf" | tr ‘abc‘ ‘xyz‘
這裡是將"a"替換成"x","b"替換成"y","c"替換成"z",而不是將整個字串"abc"替換成"xyz"
2)刪除字元:
cat cat_tr.txt | tr -d ‘0-9‘
3)壓縮字元
echo "tesssssssst" | tr -s ‘s‘
4)摒除多餘的空行:
cat cat_tr.txt | tr -s ‘\n‘
tr將多餘的"\n"字元合并為單一的"\n"
二十、find 尋找檔案
1)基本格式:
find path -option [-print] [-exec -ok command] {} \;
-print 將尋找到的檔案輸出到標準輸出
-exec command {} \; 對查到的檔案執行command操作
-ok 和-exec相同,只不過在操作前要詢使用者
2)常用的命令選項:?
-name 按照檔案名稱尋找檔案
-perm 按照檔案許可權來尋找檔案
-user 按照檔案所屬使用者來尋找檔案
-group 按照檔案所屬的組來尋找檔案
-size 按照檔案大小來尋找檔案
-type 尋找某一類型的檔案,諸如:b 塊裝置檔案;d 目錄;
c 字元裝置檔案;p 管道檔案;l 符號連結檔案;f 普通檔案
-empty 尋找空白檔案、沒有子目錄的檔案夾
3)舉例:
find /root/linux-shell/find -name ‘*.txt‘ --指定尋找路徑
find ./ -name ‘*dir1‘ --尋找目前的目錄下名字為dir1的檔案或者目錄
find ./ -name ‘*dir1‘ -type d --尋找名字為dir1的目錄
find ./ -name ‘*dir1‘ -type f --尋找名字為dir1的普通檔案
find ./ -perm 777 --按照檔案許可權尋找檔案或者目錄
find . -user oscar --尋找所屬使用者為oscar的檔案或者目錄
find . -group oscar --尋找所屬組為oscar的檔案或者目錄
find . -size +50k --尋找大於50k的檔案
find . -size +50k -size -100k --尋找大於50k小於100k的檔案
find . -empty --尋找空白檔案或者空檔案夾
find . -name ‘*.log‘ -exec cat {} \; --尋找檔案並查看檔案內容
find . -name ‘*.log‘ -exec cp {} new_find.log \; --尋找檔案並複製
二十一、sar 系統效能分析工具之一
sar是一個Linux系統效能分析工具之一,基本格式:
sar [options] [t] [n]
t為採樣間隔,n為採樣次數,預設值是1
常用options:
-u:輸出CPU使用方式的統計資訊
-r:輸出記憶體和交換空間的統計資訊
-b:輸出I/O和傳輸速率的統計資訊
-d:輸出每一個塊裝置的活動資訊
-x:進程ID
sar -u 2 3 每2秒採樣一次,連續採樣3次,監控CPU 的使用方式
sar -r 2 3 每2秒採樣一次,連續採樣3次,監控記憶體和交換空間使用方式
sar -b 2 3 每2秒採樣一次,連續採樣3次,監控緩衝區的使用方式
sar -d 2 3 每2秒採樣一次,連續採樣3次,監控裝置使用方式
sar -u 2 3 -x pid 每2秒採樣一次,連續採樣3次,監控pid的CPU 的使用方式
二十二、ps靜態結果輸出某個時間點的程式運作情況
ps aux
ps -ef
兩個命令均能查看目前所有正在記憶體當中的程式,不同點,第一個還包含程式的cpu、記憶體使用量率。
ps -ef | grep oscar 查看含有oscar字串的進程的使用方式
二十三、top動態輸出程式的變化
1)top命令舉例:
top -b -n 2 > /tmp/top.txt
top 批次的方式更新2次,並將結果資訊存到 /tmp/top.txt檔案中
top -d 3 -n 3 -p pid
每間隔三秒監控一次進程號為pid的進程使用方式,共更新3次
2)在 top 執行過程當中常用的按鍵指令:
P :以 CPU 的使用資源排序顯示
M:以 Memory 的使用資源排序顯示
N :以 PID 來排序
linux之shell常用命令介紹