傳送門
Linux與Shell 第0天 阿里雲安裝Ubuntu22.04以及桌面
Linux與Shell 第1天 檔案目錄、VIM、網路配置、系統管理、遠端登入
Linux與Shell 第2天 實操、軟體包管理、Shell程式設計
實操
菜鳥教程 Linux命令大全
檔案目錄
輸入 | 作用 |
---|---|
ls -a | 顯示隱藏檔案 |
ls -lh | 詳細資訊 |
cd - | 回到上一次所在目錄 |
cd -P | 跳轉到實際物理路徑,而非快捷方式路徑 |
mkdir/rmdir | 建立/刪除空目錄 |
cp -r | 遞迴複製 |
mv | 移動 |
touch | 新建檔案,已存在則更新時間戳 |
cat/more/less | 檢視 |
head/tail -n (數字) | 檢視頭部/尾部(數字)行 |
ln -s 檔案路徑 連結快捷方式名 | “建立快捷方式” |
history -c | 清楚history裡的記錄 |
關於檢視檔案
cat 命令會將整個檔案的內容一次性輸出到螢幕上,適合檢視較小的文字檔案
more 命令也用於分頁顯示檔案內容,但與 cat 不同,它會逐頁顯示檔案內容,而不是一次性顯示整個檔案,空格檢視下一頁
less 允許向前和向後瀏覽檔案內容,支援搜尋、跳轉等操作
輸出重定向
ls -l > a.txt # 列表的內容寫入檔案 a.txt 中(覆蓋寫)
ls -l >> a.txt # 列表的內容寫入檔案 a.txt 中(末尾追加)
cat 檔案1 > 檔案2 #將檔案1的內容覆蓋到檔案2
在 ll -lh 命令輸出中
-rwxrw-r--
第一個字元指示檔案型別:- 表示普通檔案。d 表示目錄。l 表示符號連結(symlink)。c 表示字元裝置檔案。b 表示塊裝置檔案。s 表示套接字(socket)。p 表示命名管道(FIFO)
接下來的九個字元表示檔案許可權,按順序分為所有者、所屬組、其他使用者
日期時間
輸入 | 作用 |
---|---|
date "+%s" | 時間戳 秒級別 |
date "+%s%3N" | 時間戳 毫秒級別 %3N是取納秒部分的前三位作為毫秒 |
date "+%Y-%m-%d %A %H:%m:%S" | 格式化顯示 2024-03-20 星期三 16:03:24 |
cal | 顯示日曆 |
使用者管理
調整允許root登入
sudo vim /etc/ssh/sshd_config
PermitRootLogin no
sudo systemctl reload sshd
輸入 | 作用 |
---|---|
useradd 使用者名稱 | 新增使用者 |
userdel -r 使用者名稱 | 刪除使用者,以及home下的資料夾 |
id 使用者名稱 | 使用者資訊 |
groupadd 組名 | 新增組 |
groupdel 組名 | 刪除組 |
groupmod -n 新組名 舊組名 | 新增組 |
usermod -g 組名 使用者名稱 | 把使用者改到組下 |
getent group | grep 組名 | 檢視組資訊 |
檔案許可權
chmod三個數字對應 所有者、所屬組、其他使用者
0-無許可權、1-執行(x)、2-寫入(w)、3-執行+寫入(wx)、4-讀取(r)、5-執行+讀取(rx)、6-執行+讀取(wr)、7-全部(rwx)
賦權物件
u: 所有者 (user) 預設是這個
g: 所屬組 (group)
o: 其他使用者 (others)
a: 所有使用者
chmod -R 遞迴賦權資料夾下的內容
chown username \home\a.txt 改變所有者
chgrp usergroup \home\a.txt 改變所屬組
搜尋查詢
find 目錄 -name/user/size 檔名 | 按照名稱/所屬使用者/檔案大小 在目錄下搜尋檔案 檔名*匹配多個?匹配單個
grep -A 10 "XXXXXXXX" httpClient.log 查日誌內容前後十行
壓縮
# 壓縮單個檔案
tar -zcvf nginx.tar.gz nginx.conf
# 壓縮多個檔案
tar -zcvf nginx.tar.gz nginx.conf nginx.conf2
# 解壓檔案
mkdir tmp
tar -zxvf nginx.tar.gz -C tmp/
磁碟分割槽
檢視磁碟容量 df -h
檢視檔案佔用磁碟塊大小 du -h
程序執行緒
ps aux | grep XXX
ps -ef | grep XXX
pgrep -f "xx" 找某個程序的pid
top
-p 透過指定程序ID來僅僅監控某個程序的狀態
-i 使top不顯示任何閒置或者僵死程序
top互動操作
- P 以CPU使用率排序,預設就是此項
- M 以記憶體的使用率排序
- N 以PID排序
- q 退出top
- u 根據指定使用者進行過濾
- k 直接殺死
根據埠號查詢程序
netstat -tlnp | grep 3658
根據程序ID查詢埠號佔用情況
netstat -nlp | grep 12564 | grep LISTEN
軟體包管理
Ubuntu換源
cat /etc/apt/sources.list
# 可能有cloud-init干涉 會提示去/etc/apt/sources.list.d新增自定義的源
touch /etc/apt/sources.list.d/mylist.list
常用命令
# CentOS
yum list | grep firefox
yum remove firefox
yum -y install firefox
# Ubuntu
apt search firefox
sudo apt remove firefox
sudo apt install firefox
Shell程式設計
Shell是一個命令直譯器,它接收應用程式/使用者命令,然後呼叫作業系統核心。
還是用python吧,庫多而且程式設計語法更簡潔
執行
bash包含sh,現在預設都是使用bash
echo $SHELL
/bin/bash
chmod賦權
chmod +x helloworld.sh
# 等價於 chmod u+x helloworld.sh
變數
env檢視系統變數,常用的系統變數有
HOME、PWD、SHELL、USER
- 只包含字母、數字和下劃線: 變數名可以包含字母(大小寫敏感)、數字和下劃線 _,不能包含其他特殊字元。
- 不能以數字開頭: 變數名不能以數字開頭,但可以包含數字。
- 避免使用 Shell 關鍵字: 不要使用Shell的關鍵字(例如 if、then、else、fi、for、while 等)作為變數名,以免引起混淆。
- 使用大寫字母表示常量: 習慣上,常量的變數名通常使用大寫字母,例如 PI=3.14。
- 避免使用特殊符號: 儘量避免在變數名中使用特殊符號,因為它們可能與 Shell 的語法產生衝突。
- 避免使用空格: 變數名中不應該包含空格,因為空格通常用於分隔命令和引數。
# 賦值語句等號左右不能有空格
# 單引號不會解釋 ${變數} 的值
new_var='1234'
# ${#string} 輸出字串的長度
# ${string:1:4} 擷取字串從索引位置1開始,取4個字元
# bash本身不支援浮點數,需要藉助bc(Basic Calculator),或者用Python代替
echo "3.14 * 2.5" | bc
# 整型、普通陣列、關聯陣列(Map)
# declare -i num
num=10
# declare -a my_array
my_array=(a b c d)
echo ${my_array[0]}
echo ${my_array[*]}
# ${#my_array[*]} 陣列長度
# declare -ai my_int_array
my_int_array=(1 2 3 4 5)
my_int_array=(
2
3
4
5
6
)
# declare -A associative_array
associative_array["name"]="John"
associative_array["age"]=30
# 全部value
echo ${associative_array[*]}
# 全部key
echo ${!associative_array[*]}
# $ 或者 ${} 都可以使用變數 當可能出現歧義時需要花括號
for skill in Ada Coffe Action Java; do
echo "I am good at ${skill}Script"
done
# $(命令) 可以執行命令
# 注意迴圈和if的語法 if的[]內部也要有空格 且if-else分支下的內容不能為空
# [] 裡的 -o || 代表or -a && 代表and
for file in $(ls ~/Desktop); do
echo $file
done
if [ $a == $b ]; then
echo "a 等於 b"
elif [ $a == $c ]; then
echo "a 等於 c"
else
echo "其他"
fi
# 只讀變數,不可再被修改
readonly read_var
# 刪除變數,只讀變數無法刪除
unset del_var
# 函式 如果return則return值必須0-255 沒有return以最後一句作為return的內容(更靈活)
function add(){
s=$[$1+$2]
echo "sum結果是$s"
}
read -p "請輸入第一個整數" a
read -p "請輸入第二個整數" b
sum=$(add $a $b)
echo "sum=$sum"
可以使用 $1、$2 等來引用傳遞給指令碼的引數,其中 $1 表示第一個引數,$2表示第二個引數,注意 $0 為執行的檔名