958
技術社區[雲棲]
linux shell 基礎 使用日誌與心得
在網上看到很多LNAMP/LAMP一鍵安裝環境,使用了很多種,比較好的就那幾種,但是他們的靈活度不夠,所以想啊,自己整個出來
https://lnmp.org/install.html
https://www.wdlinux.cn/lanmp/
我是整合這兩個環境而成,變化很多。
有很多想法正在慢慢實現中,先把基礎的實現。
需實現功能:
1.自定義安裝目錄(指的是mysql,php,nginx 全部安裝到某個目錄下)
2.PHP版本選擇
以下是用到的 SHELL 命令等
1.#!/bin/bash 第一行就出現
#!/bin/bash是指此腳本使用/bin/bash來解釋執行。
其中,#!是一個特殊的表示符,其後,跟著解釋此腳本的shell路徑。
bash隻是shell的一種,還有很多其它shell,如:sh,csh,ksh,tcsh,...
詳細介紹:
https://blog.sina.com.cn/s/blog_6336857901019zyz.html
https://blog.csdn.net/jackalfly/article/details/7571616
2.export PATH
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:/root/bin:~/binexport PATH
或
export PATH=$PATH:/home/zhaodw
勝於修改環境變量,但隻在本次登錄中有效
注意:(與shell變量相結合)
1) =前PATH變量不加$符號
2) 再增加的路徑用:追加
功能說明:設置或顯示環境變量。
語 法:export [-fnp][變量名稱]=[變量設置值]
補充說明:在shell中執行程序時,shell會提供一組環境變量。export可新增,修改或刪除環境變量,供後續執行的程序使用。export的效力僅及於該此登陸操作。
參 數:
-f 代表[變量名稱]中為函數名稱。
-n 刪除指定的變量。變量實際上並未刪除,隻是不會輸出到後續指令的執行環境中。
-p 列出所有的shell賦予程序的環境變量
詳細介紹:
https://www.cnblogs.com/zhangze/articles/1832542.html
https://blog.csdn.net/zcywell/article/details/7687178
https://blog.csdn.net/embed2010/article/details/5988267
3.echo "====="
在屏幕上打印出指定的字符串
更多詳細介紹:
https://see.xidian.edu.cn/cpp/html/1498.html
https://hi.baidu.com/auyvfshtkhbegid/item/49f0d13009c141312e0f817a
4.exit
命令用於退出當前shell,在shell腳本中可以終止當前腳本執行。
SHELL中的exit 0 和 exit 1有什麼區別?
當你 exit 0 的時候,在調用環境 echo $? 就返回0,也就是說調用環境就認為你的這個程序執行正確。
當你 exit 1 的時候,一般是出錯定義這個1,也可以是其他數字,很多係統程序這個錯誤編號是有約定的含義的。 但不為0 就表示程序運行出錯。 調用環境就可以根據這個返回值判斷 你這個程序運行是否ok。
如果你用 腳本 a 調用 腳本b ,要在a中判斷b是否正常返回,就是根據 exit 0 or 1 來識別。
執行完b後, 判斷 $? 就是返回值
更多詳細介紹:
https://www.hndy1688.com/service-60.html
5.; shell分號作用
分號是用來隔斷每個語法關鍵字或命令的 。對於字符的比較及其他shell語法關鍵字之間分號的使用方式相同。
需要知道的是在不同的語法命令之間要用分號隔開或是換行方能執行,否則將會在調用腳本的時候報錯。
https://hi.baidu.com/lozard/item/6bf9de1b2e704ef1756a84e3
6.if else fi 或 if [ "$test" = "test" ]; then 。。。。fi
if [ $UID != 0 ]; thenecho "===="
exit;
fi
條件判斷
更多詳細介紹:
https://www.cnblogs.com/276815076/archive/2011/10/30/2229286.html
https://blog.chinaunix.net/uid-20788517-id-3135826.html
7.declare -a ARR 數組
declare -a ARR #聲明一個數組 ARR 可以自定義
ARR['key']="值" #給數組某鍵賦值
echo ${ARR['kye']} #在屏幕上輸出該鍵值
echo ${ARR[*]} #輸出所有值 或者 ${ARR[@]}
echo ${#ARR[*]} #數組長度個數 或者${#ARR[@]}
echo ${!array[*]} #輸出數組所有鍵 或者 ${!array[@]}
https://www.cnblogs.com/fhefh/archive/2011/04/22/2024857.html
https://hi.baidu.com/liuhelishuang/item/efaff6d33faacbe5b3f777b2
https://www.cnblogs.com/zhuyp1015/archive/2012/07/07/2580716.html
https://blog.csdn.net/ysdaniel/article/details/7909824
https://hi.baidu.com/liuhelishuang/item/efaff6d33faacbe5b3f777b2
https://hi.baidu.com/liuhelishuang/item/efaff6d33faacbe5b3f777b2
8.source 或 點(shell source .)
source /home/test/lnamp.sh或
. /home/test/lanmp.sh
意思這兩個是一樣的
source或點 不是直接執行一個文件,而是從一個文本文件裏麵讀命令行,然後執行這些命令
另外一種意思
shell 加載 其他文件,包含其他文件(可以把一個很大SHELL分開來,例如一個文件專門配置文件,一個文件是函數庫文件)
https://blog.csdn.net/xiaolang85/article/details/7861441
https://blog.chinaunix.net/uid-22028566-id-3182362.html
9.function 函數
function fname(){local tmp="test" #局部變量,隻有函數內部使用,其他變量都是全局變量
tmp=$1 # $1就是取該函數的參數1(test1)
tmp=$2 # $2就是取該函數的參數2(test2)
tmp=$* # $*就是取所有參數
程序段
retrun 1 #數值 0-255
}
調用:
fname "test1" "test2"
必須在調用函數地方之前,聲明函數,shell腳本是逐行運行。不會像其它語言一樣先預編譯。一次必須在使用函數前先聲明函數
參數返回,可以顯示加:return 返回(0-255),如果不加,將以最後一條命令運行結果,作為返回值
https://www.cnblogs.com/chengmo/archive/2010/10/17/1853356.html
10.switch case 選擇
https://blog.csdn.net/ph123456789/article/details/6334040
https://blog.csdn.net/dreamtdp/article/details/8048720
11.shell for in 循環 while/until
11.1.for 變量 in 字符串(這個可以是數組)
11.2.for((賦值;條件;運算語句))
https://blog.csdn.net/ph123456789/article/details/6334040
11.3.while 條件語句
i=10;
whil [[ $i -gt 5 ]];do
echo$i;
((i--));
done;
11.4.untile 條件語句
i=10;until [[ $i -gt 0 ]];do
echo$i;
((i--));
done;
12.read -p 命令接收標準輸入(鍵盤)的輸入
read -p "Please Input 1,2,3,4,5: " SERVER_ID
echo "Input $SERVER_ID"
read命令接收標準輸入(鍵盤)的輸入,或其他文件描述符的輸入(後麵在說)。得到輸入後,read命令將數據放入一個標準變量中
https://blog.sina.com.cn/s/blog_4077692e0100r7ct.html
13.clear (shell clear) 清屏命令
清空本顯示屏幕
14.sleep 睡眠
sleep 1 睡眠1秒sleep 1s 睡眠1秒
sleep 1m 睡眠1分
sleep 1h 睡眠1小時
15.chmod chown chgrp
15.1.chmod 給文件或文件夾設置權限
chmod 777 test.txt
https://www.cnblogs.com/peida/archive/2012/11/29/2794010.html
15.2.chown 改變文件或文件夾的用戶或者用戶組
chown user1 test.txtchown -R user1:root /tmp/test
https://www.cnblogs.com/peida/archive/2012/12/04/2800684.html
15.3.chgrp 改變文件或文件夾的用戶組
chgrp user1 test.txthttps://www.cnblogs.com/peida/archive/2012/12/03/2799003.html
https://blog.163.com/yang_jianli/blog/static/1619900062012116101843165/
16.mkdir 創建目錄,創建文件夾(創建多個目錄)
mkdir testmkdir -p test/test2/test3 #一次性創建3個文件夾
https://www.cnblogs.com/peida/archive/2012/10/25/2738271.html
17.pwd 或 $(pwd)當前工作目錄,當前文件路徑
https://www.cnblogs.com/peida/archive/2012/10/24/2737730.html
19.uname
20.basename
21.$() 括號 與 `` 反引號
22.${} 變量替換
23.$ 變量
25.type -p
26.ls 顯示目錄下文件和目錄
https://www.cnblogs.com/peida/archive/2012/10/23/2734829.html
27.cd 切換至目錄,打開文件夾
cd /rootcd ../
cd ~ #切換至當前用戶文件夾下
https://www.cnblogs.com/peida/archive/2012/10/24/2736501.html
28.rm 刪除文件或文件夾目錄
rm log.logrm -rf log #刪除log目錄下所有文件,忽略不存在文件,不提示
https://www.cnblogs.com/peida/archive/2012/10/26/2740521.html
29.rmdir 刪除空目錄
rmdir doc
https://www.cnblogs.com/peida/archive/2012/10/27/2742076.html
30.tree 已樹狀列出所有目錄的內容
https://linux.sheup.com/linux/4/31078.html
31.mv 移動文件或將文件改名
mv test.log test.txt #文件改名
mv test.log log #將文件test.log 移動到log目錄中
https://www.cnblogs.com/peida/archive/2012/10/27/2743022.html
32.cp 複製文件或者目錄
cp test.log test.txt #複製文件
cp test.log log #將文件test.log 複製到log目錄中
https://www.cnblogs.com/peida/archive/2012/10/29/2744185.html
33.touch 修改文件時間戳,或者新建一個不存在的文件
touch test.log
https://www.cnblogs.com/peida/archive/2012/10/30/2745714.html
34.cat 鏈接文件或輸入並打印顯示內容
https://www.cnblogs.com/peida/archive/2012/10/30/2746968.html
35.more 一頁一頁顯示,用空格鍵下一頁,按 b 鍵,返回上一頁
more test.loghttps://www.cnblogs.com/peida/archive/2012/11/02/2750588.html
36.tail 查看即時日誌,不斷刷新
tail -f test.log
https://www.cnblogs.com/peida/archive/2012/11/07/2758084.html
37.find 查找搜索文件
find / -name test.log #全部目錄搜索 test.log 文件名
https://www.cnblogs.com/peida/archive/2012/11/16/2773289.html
https://www.cnblogs.com/peida/archive/2012/11/13/2767374.html
38.tar 壓縮,解壓縮
tar -zcvf log.tar.gz
https://www.cnblogs.com/peida/archive/2012/11/30/2795656.html
39.ln 建立連接,軟連接,硬鏈接
ln -s log.log link2013
https://www.cnblogs.com/peida/archive/2012/12/11/2812294.html
40.date 時間
https://www.cnblogs.com/peida/archive/2012/12/13/2815687.html
41.grep 文本搜索
ps -ef|grep svn
https://www.cnblogs.com/peida/archive/2012/12/17/2821195.html
42.ps 列出 當前運行進程
https://www.cnblogs.com/peida/archive/2012/12/19/2824418.html
43.kill 終止/關閉/殺死 進程
kill -9 2123
https://www.cnblogs.com/peida/archive/2012/12/20/2825837.html
44.killall 終止/關閉/殺死 進程名稱
killall mysql
https://www.cnblogs.com/peida/archive/2012/12/21/2827366.html
45.top 性能分析
https://www.cnblogs.com/peida/archive/2012/12/24/2831353.html
46.ifconfig 查看IP 網關 子網掩碼
https://www.cnblogs.com/peida/archive/2013/02/27/2934525.html
47.netstat 顯示與IP、TCP、UDP和ICMP協議相關的統計數據,一般用於檢驗本機各端口的網絡連接情況
https://www.cnblogs.com/peida/archive/2013/03/08/2949194.html
48.scp 遠程複製文件
https://www.cnblogs.com/peida/archive/2013/03/15/2960802.html
49.wget 下載文件
wget https://url.com/test.zip
https://www.cnblogs.com/peida/archive/2013/03/18/2965369.html
31.groupadd useradd
32./sbin/ldconfig
33.ulimit
35.sed
36.unset
37.netstat -ntl
38.#
39.update-rc.d
40./sbin/iptables
2>&1 | tee -a
更多命令
https://www.cnblogs.com/peida/tag/linux%E5%91%BD%E4%BB%A4/default.html
最後更新:2017-04-03 14:53:45