使用幫助:man和info 命令幫助
第一部分:基礎
一:文件操作
1:文件顯示
- ls 顯示當前目錄下的目錄或者文件夾(不顯示以.開頭的的隱藏文件。)
ls+目錄名 查看目錄下的所有文件
ls -a 查看目錄下的所有文件 包括隱藏文件
ls -l 查看文件全部信息 權限 ,所屬人,大小(以字節爲單位),修改時間等
ls -lh 查看文件可以查看文件大小
ls -r 將結果以倒敘方式顯示
ls -s 以文件大小排序
ls-t 以修改時間排序
例子:
ls lsrth : 按時間倒敘(這個老師也沒講明白)我推測-s比較時是根據文件相同的權限,往後看看 再驗證
ls / :查看電腦根目錄下的文件
- pwd 顯示當前目錄
- cd進入目錄
cd . 訪問當前目錄
cd . . 訪問上一級目錄
cd - 返回上一級=次訪問的目錄
cd ~ 進入當前用戶的home目錄,相當於我電腦的 /home/sysadmin
2:文件管理
- cp 複製文件 cp 源文件名 複製後的文件名
cp -r 原目錄名 複製後的目錄名
- mv 重新命名 或者移動文件
修改文件名:mv 原文件名 新文件名
移動文件:mv 原文件 新文件目錄
- rm 刪除文件
rm 文件名或者目錄/文件名 刪除文件
rm -r 刪除問價
rm -rv 告訴我們刪除了啥都
rm -f 刪除時報的錯誤不顯示
3.鏈接
硬鏈接只能針對文件使用,ln a.sh b.sh 指b鏈接a 如果cat b.sh 展示的內容和a一樣。如果刪除了a.sh 那麼b.sh仍然可以訪問。
軟鏈接可以針對目錄,ln -s a.sh b.sh 指b鏈接a 一個軟連接。如果刪除或修改了a目錄,那麼b無效 了就。
ln -f 可以覆蓋存在的鏈接。
4查看磁盤大小
df -h 查看磁盤大小和使用情況
du 查看文件佔用大小、
5文件查找
find 時間、類型、名稱
例如:find 目錄 -time+3 -type f :在目錄下查找三天前修改的文件
二:權限管理
root用戶
r=4=讀
w=2=寫
x=1=執行
drwx-rwx-rwx 當前用戶權限-組用戶權限-所有用戶權限 第一個d代表 目錄
-rwx-rwx-rwx 當前用戶權限-組用戶權限-所有用戶權限 第一個-代表 文件
- 修改權限
chmod 修改權限 chmod 744
chmod -r 遞歸給目錄下的全部修改權限 - chown修改所有者
- chgrp修改所屬組
su切換用戶 什麼也不加默認root
sudo -u制定用戶 也可以什麼不加 默認root
三:文本操作
- cat 查看
- head 看頭幾行 head -行數 看頭幾行行數
- tail -行數 看後幾行行數
- tail -f 不斷輸出
- less 查看大文件第一屏: G 最後 , g最開始, 200g指定第200行,/關鍵字 看關鍵字幾行
- grep 過濾 grep 關鍵字 文件名
- sort 排序按字符串進行排序 -r倒序 -k指定列 -n按數字排序
- uniq 去重(相同的挨着)進行去重 -c輸出重複出現的次數
- wc統計行數,字節數,單詞數
例如:sort 文件 | uniq -c | sort -k1,1nr | head 出現重複的去重最多的前十行。 - vim 文本操作:
d刪除 dd刪除整行 u撤銷刪除 w刪除一個單詞
i進入編輯模式,:q 退出不保存。:wq! 保存病退出。
四:打包與壓縮
壓縮 tar -zcvf 文件.tgz bakup/
解壓 tar -xzf 文件.tgz
zip unzip
zcat和zgrep
第二部分:進階
一:http請求與傳輸
- curl 模擬http請求
-x 指定resquest的method,如post get等
-h 指定請求的header,如“content-type:application/json”
-d 指定post請求的detd,消息體
-b 指定請求的cookie,可以在-h裏面設置
-c 輸出響應的set-cookie的內容輸出到文件
-i 指定輸出去response的header信息等
-w 指定輸出部分格式化的數據,如請求時間,http_code等%{http_code} - wget下載文件 wget+地址
二:網絡常用工具命令
- ping 檢測網絡連通性
-c 數字 ping幾次
-W 數字 超時時間 -
host
host ip 解析ip: 獲取有 主機名host 主機名 :獲取ip地址
- nc 網絡發包
- netstat 查看端口使用情況 netstat -an 所有的端口以 ip形式
- tcpdump
三:遠程命令
ssh 遠程登錄工具
scp遠程拷貝: 本地和遠程文件間的拷貝
scp ./本地文件.txt haibo.liu@遠程機器:/遠程目錄 本地拷到遠程
scp haibo.liu@遠程機器:/遠程目錄 /遠程文件 ./ 本地目錄 遠程拷到本地
四:進程與系統
- ps 顯示進程與線程信息
- free 查看內存使用情況
free -m 以m爲單位
free -h 根據文件大小,自動選擇單位跟在後面
- top 動態顯示cpu 內存和進程的使用情況
1:展示多核cpu使用情況
load average 指平均每一分鐘處理的任務數。 - kill 向指定進程發信號
kill -l 中斷,正常退出,暫停,繼續進程
kill -9 pid(進程id)結束進程
五:其他
hostname :看主機名
ifconfig :查看個網卡ip
第三部分:shell腳本
#!/bin/sh 1:腳本解析器:
mkdir shell_test 2:生成文件夾
cd shell_test
for((i=0;i<5;i++));do 3:循環操作,touch 生成空文件
touch test_$i.txt
done
-
數組
定義:array_name=(value0 value1 value2)
讀取:value1=¥{array_name[1]}
獲取數組中的所有元素:使用@或者× 可以獲取數組中國的所有元素
例如:touch haiboa.sh創建一個腳本文件 將他的權限修改成777
#!/bin/sh
my_ary=(1 2 3 4)
my_ary[5]=6
#my_ary[7]=6
echo "第一個數組爲" :${my_ary[0]}
echo ${#my_ary[@]}
echo ${#my_ary[@]}
echo "數組的長度" :${#my_ary[0]}
結果:
第一個數組爲 :1
5
5
數組的長度 :1
-
參數傳遞
$n n代表一個數字;0爲執行的文件名;1爲執行的腳本的第一個參數,以此類推
$# 傳遞到腳本的參數個數
$*以一個單字符串顯示所有有向腳本傳遞的參數,以“$1...$n”的形式輸出所有參數
$@與$*相同,但是使用時加引號,並在引號中返回每個參數,以“$1...$n”的形式輸出所有參數。
例如:
#!/bin/sh
echo '$#:'$#
echo '$0:'$0
echo '$1:'$1
echo '$2:'$2
echo '$*:'$*
echo '$@:'$@
echo '----$* start----'
for i in "$*"
do
echo $i
done
echo '----$* end----'
echo '----$@ start----'
for i in "$@"
do
echo $i
done
echo '----$@ end----'
運行:./haiboa.sh 1 2 3 4 5 6
結果:
$#:6
$0:./haiboa.sh
$1:1
$2:2
$*:1 2 3 4 5 6
$@:1 2 3 4 5 6
----$* start----
1 2 3 4 5 6
----$* end----
----$@ start----
1
2
3
4
5
6
----$@ end----
-
shell運算符
算數運算符、關係運算符、布爾運算符、邏輯運算符、字符串運算符、文件測試運算符(-b,-c,-d,-e文件存在不,-d文件是目錄不,-s文件是空不,-f 是普通文件不,)
例子
#!/bin/sha=20
b=4
echo "a="$a
echo "b="$bval=expr$a+$bexpr$a+$b
echo "a + b : $val"val=expr$a−$bexpr$a-$b
echo "a - b : $val"val=expr$a⋅$bexpr$a⋅$b
echo "a*b : $val"val=expr$a$bexpr$a$b
echo "a / b : $val"if [ $a == $b ]
then
echo "a等於b"fi
if [ $a != $b ]
then
echo "a不等於b"
fi
結果:
a=20
b=4
a + b : 24
a - b : 17
a*b : 80
a / b : 5
a不等於b
!!!!!!!!!!!注意 !!!!!!!!val=expr$a$bexpr$a$b 的符號是 不是' '
!!!!!!!!!!!注意 !!!!!!!!if [ $a == $b ] 的[] 與字符之間的空格
!!!!!!!!!!!注意 !!!!!!!!a \* $ 乘法加一個轉義字符
-
shell流程控制
if,for,while.,until,case,break,continue
-
shell函數
[function] funname [()]
{
action;
[return int;]
}
-
其他
xargs 分組
alias 設置別名