1. shell編程
case 實現條件判斷, 無論是case后面還是值后面都是沒有任何標點符號的。
case支持通配符, 如果想要表示其他的話, 可以使用*放到最后。 用*表示其他。
2. 用tar打包的文件或則目錄,這些文件或則目錄的的ACL(訪問控制列表)權限會丟失。
3. tar命令:
-c 打包文件
-t 查看包文件內容
-x 解包
4. cpio可用來打包和解包文件:
cpio -ov > xxx.cpio
cpio -tv < xxx.cpio
要解包文件
cpio -iv < xxx.cpio
cpio -idv < etc.cpio
cpio命令可以用來減壓rpm包,實際上rpm包其實也是壓縮文件。
5. basename 這個命令本身就可以求基名
basename 絕對路徑 // 命令執行的結果為最后一個字段的值。
[root@centos6 tmp]# basename /etc/fstab/a/
a
6. 在使用$@或則是$*的話, 一定要加雙引號"", 否則的話, 兩則的效果是一樣的。
7. echo -e "xxxxx"
-e 這個參數, 下面還自帶了許多的轉譯字符。
-e參數作用的字符串。
\t 表示tab鍵。 \n 表示換行。 \c 表示不換行
-e參數還可以使字體背景帶有顏色。
8. /etc/issue 這個配置文件是在系統沒有輸入用戶名和密碼之前, 字符界面系統下系統的提示符。
/etc/bashrc 這些用戶啟動配置, echo 一些語句, 當你在系統登陸后, 或則是ssh進入系統后, 這些話就會被打印到系統之上。
9. for i in `ls /testdir/`;
//這樣的話i的值, 為/testdir目錄下的文件名,而非整個絕對路徑。
for i in `ls /testdir/*`;
// 這樣的話i的值,為/testdir目錄下的文件名, 且為絕對路徑。
這一點對文件操作的腳本有有一定的幫助, 有時候對文件草錯的話, 要的就是絕對路徑, 而非只是一個基名。
10. 修改密碼的另外一種方式:
echo 用戶名:密碼 | chpasswd
添加用戶的另外一種方式
newuser users_file
11. $變量引用變量的時候, 變量直接在后面緊跟著一些字符的話, 但是這些字符并不是變量的組成部分時,一定要用{}大括號將變量括起來。尤其在數組中, 一定要用大括號括起來。 這其實也是${}的作用。
12.因為shell是一種弱解釋類型的語言。 使用變量的話, 是不需要提前定義的。 直接用就行。 變量的默認為字符串的0, 但是這個0只可以做運算, 是不可以做比較的。
[ $defalut == 0 ] [ $defalut -eq 0 ] 這些都是不對的
13.有時候,在做測試的時候, 當我們不需要防火墻的話,我們可以關閉防火墻這個服務, 也可以將防火前的規則策略清空 iptables -F, 這樣的話防火墻就不會影響到我們了。
14. $[] let 運算 for(()) 變量前面可以加$, 也可以不加$.
15. 軟件運行的壞境:
程序源代碼—>預處理—->編譯—->匯編——>鏈接
靜態編譯
共享編譯: .so
編譯后得到的是匯編。
16. ldd 二進制文件 // 可用來查看該二進制調用的庫
當這些庫中有部分庫中找不到時, 這個二進制文件就不能使用了。
17. 庫級別的虛擬化:
Linux: WINE Linux系統模擬Windows系統
Windows:Cywin Windows系統模擬Linux系統
就像在Windows下下載一個天天模擬器, 就可以使用安卓系統了。其實這個就用到了庫級別的虛擬化。 安裝一定的軟件就可以模擬出庫文件。
18. Linux系統下的頭文件放在/usr/include文件中。
19. 一個二進制文件包括: 庫 配置文件 幫助文檔
20. rpm 包命名方式:
name-VERSION-release.arch.rpm
VERSION: 版本
release: release.OS
arch(硬件平臺架構) : X86_86 i686(32為操作系統) noarch(指該軟件和系統硬件架構無關)
21. dnf也可以安裝yum包, 并且在將來有可能會替代yum.dnf 現在一下fedora系統下測試。
22. ldd 二進制文件
ldconfig -p 二進制文件
23. rpm -q name 可用來查看該name名字的rpm是否安裝。
24. 二進制引用程序的組成部分:
二進制文件、庫文件、配置文件、幫助文件
25. 程序包的管理器:
debian: deb文件、dpkg包管理器
redhat: rpm文件,rpm包管理器
rpm: Rredhat Package Manager
RPM Package Manager
26. 包命名:
源代碼: 源代碼一般都以壓縮包的形式存在
name-VERSION.tar.gz|bz2|xz
VERSION: major.minor.release
27. rpm包命名方式:
name-VERSION-release.arch.rpm
例如: bash-4.2.46-19.el7.x86_64.rpm
VERSION: major. minor. release
release : release.OS
28. 常見的arch:
X86(32位):i386,i486,i586,i686
X86_64:X64,X86_64,amd64
powerpc: ppc
跟平臺無關: noarch
29. 包分類:
Application-VERSION-ARCH.rpm : 主包
Application-devel-VERSION-ARCH.rpm 開發子包
Application-utils-VERSION-ARHC.rpm 其他子包
Application-libs-VERSION-ARHC.rpm 其他子包
包之間存在依賴關系, 甚至是循環依賴。
30. ldd 二進制文件 // 查看依賴的庫文件
ldconfig 管理及查看本機裝載的庫文件
/sbin/ldconfig -p : 顯示本機已經緩存的所有可用庫文件
名及文件路徑映射關系
配置文件: /etc/ld.so.conf /etc/ld.so.conf.d/*.conf
緩存文件: /etc/ld.so.cache
31. rpm -ivh
-i –install
-v — 過程可見
-h — 以#顯示程序包管理執行進度
安裝選項:
–test: 測試安裝,但不真正執行安裝;dry run 模式
–nodeps :忽略依賴關系
–replacepkgs | replacefiles
–replacepkgs 當系統中已有這個包的時候, 也要裝
–replacefiles 當系統中的文件和別的包文件一致的話任要安裝的話, 也要裝
–replacepkgs :
–nosignature: 不檢查來源合法性
–nodigest :不檢查包完整性
–noscipts :不執行程序包腳本片斷
%pre: ; 安裝前腳本; –nopre
%post: ; 安裝后腳本; –nopost
%preun: ; 卸載前腳本; –nopreun
%postun: 卸載后腳本; –nopostun
32. rpm 包升級:
升級:
v rpm {-U|–upgrade} [install-options] PACKAGE_FILE …
v rpm {-F|–freshen} [install-options] PACKAGE_FILE …
upgrade :安裝有舊版程序包,則“升級”
如果不存在舊版程序包,則“安裝”
freshen :安裝有舊版程序包,則“升級”
如果不存在舊版程序包,則不執行升級操作
rpm -Uvh PACKAGE_FILE …
rpm -Fvh PACKAGE_FILE …
–oldpackage :降級
–force: 強行升級
33. 升級注意事項
v 注意:
(1) 不要對內核做升級操作;Linux 支持多內核版本并存,因此
,對直接安裝新版本內核
(2) 如果原程序包的配置文件安裝后曾被修改,升級時,新版本
的提供的同一個配置文件并不會直接覆蓋老版本的配置文件,而
把新版本的文件重命名(FILENAME.rpmnew)
34. 在Windows系統下, 在cmd運行窗口中輸入winver 可以查看系統的版本。
練習題:
1>. 每隔3秒鐘到系統上獲取已經登錄的用戶的信息;如果發現用戶hacker登錄,則將登錄時間和1主機記錄于日志/var/log/login.log中,并提示該用戶退出系統。
until false; do if w | grep -q "^hacker\b" ; then echo "hacker is online!" echo "GET OUT!!!" | write hacker w | grep "^hackerb" | tr -s " " | cut -d" " -f4 >> /var/log/login.log w | grep "^hackerb" | tr -s " " | cut -d" " -f3 >> /var/log/login.log fi sleep 3 done
~
2>.隨機生成10以內的數字,實現猜字游戲,提示比較大或小,相等則退出
echo -n "游戲發起者產生一個10以內的數字" random=`echo "$[$RANDOM%10]"` echo "隨機數:$random" until false; do read -p "參與游戲著猜一個數:" num if [ $num -lt $random ];then echo "小了" elif [ $num -gt $random ];then echo "大了" else echo "猜對了" break fi done
3>.隨機生成10以內的數字,實現猜字游戲,提示比較大或小,相等則退出
echo -n "游戲發起者產生一個10以內的數字" max=`echo $RANDOM` min=$max tennum="$max" times=1 until [ $times -gt 9 ]; do random=`echo $RANDOM` tennum="${tennum} ${random}" if [ $random -gt $max ];then max=$random elif [ $random -lt $min ];then min=$random fi let times++ done echo "Ten numbers:" echo ${tennum} echo "max=$max" echo "min=$min"
4>. 編寫腳本,求100以內所有正整數之和
i=1 sum=0 until [ $i -gt 100 ]; do let sum=$sum+$i let i++ done echo "1+2+3+..+100=$sum" 5>. 編寫腳本,打印九九乘法表 i=1 j=1 until [ $i -gt 9 ]; do until [ $j -gt $i ]; do echo -ne "$j*$i=`expr $j \* $i`\t" let j++ done j=1 let i++ echo "" done
6>. 隨機生成10以內的數字,實現猜字游戲,提示比較大或小,相等則退出
echo -n "游戲發起者產生一個10以內的數字" random=`echo "$[$RANDOM%10]"` echo "隨機數:$random" until false; do read -p "參與游戲著猜一個數:" num if [ $num -lt $random ];then echo "小了" elif [ $num -gt $random ];then echo "大了" else echo "猜對了" break fi done
7>. 編寫腳本,實現打印國際象棋棋盤
i=0 j=0 until [ $i -gt 7 ]; do until [ $j -gt 7 ]; do bool=$[(i+j)%2] if [ $bool -eq 0 ];then echo -en "\033[41m \033[m" else echo -en "\033[47m \033[m" fi let j++ done echo "" let i++ j=0 done
8>.打印等腰三角形
#!/bin/bash read -p "Input the line you want print: " line nline=1 i=0;j=0 until [ $nline -eq $[line+1] ];do until [ $[line-nline-i ] -eq 0 ];do echo -n " " ((i++)) done i=0 until [ $[ 2*nline-1-$j ] -eq 0 ];do echo -ne "\e[35;5m*\e[0m" ((j++)) done j=0 ((nline++)) echo "" done
原創文章,作者:458813466,如若轉載,請注明出處:http://www.www58058.com/37183
文章寫的很零散,博客不是筆記,不是羅列,需要自己有一個清晰的思路哦??梢远嗫纯磧炐愕牟┛?,看你看他們是怎么寫的,嘗試寫出優秀的博文。