這本書從大三開始看,引導我入門linux,當時買不起原版,只能花了40塊大洋打印了400多頁,分爲上下兩本,上本講述了shell命令,其中夾雜着一些linux原理,下本講述了shell高級腳本編程,從sed,gawk批處理到簡單圖形界面,腳本實戰,在使用linux時和Redhat面試工作時也有很大的作用,對linux入門來說是一本非常不錯的書。到現在,這本書已經翻來覆去看了三遍,有40頁的紙質總結,書也在大學畢業後傳承給學弟了,同時送出的也有一本APUE,一本UNP(我有兩套,一套是傳承來的,另一套原版花了300大洋)。如果能把<linux命令行與shell腳本編程><APUE><UNP IPC> <UNP Socket><鳥哥私房菜>都吃完,linux就算是入門了吧。
學習linux的時候希望多試試linux系統,ubuntu,centos,Fedora,rhel,自己找內核源碼編譯一下,在那些連inode,孤兒進程,會話,域套接字都不知道的“大神”面前(面試時也敢寫熟悉linux系統),我只能笑笑,不敢在說什麼,可能他們裝linux系統快的一筆。
話不多說,趁放星期一天內搞定吧。這shell只是個工具,學習的時候別忘了與linux內核的關係。
第三章:
啓動shell 腳本:/etc/bash.bashrc /etc/profile
用戶shell 腳本:~/.profile ~/.bashrc 可增加自己的shell函數,PATH增加路徑,別命名命令
shell提示符:PSI="[\t][\u]\s" PSI變量可在腳本里自行更改。
ls -sail s->size a 隱藏文件 i->文件inode節點信息 (可以思考:linux文件樹的構成,系統如何根據一個文件名找到磁盤中的文件地址,兩個進程打開相同的文件,進程表項中的文件描述符指向的結構體包含什麼信息-->打開文件權限,文件偏移等)
cp -l 硬鏈接 cp -s 軟鏈接 ln -S 軟鏈接。 -R 遞歸
(思考:對比源文件和鏈接文件的inode節點是否一致,鏈接個數,文件大小區別,尤其是軟鏈接文件的大小和源文件地址的字節大小對比,源文件和鏈接文件是否可以在不同的文件系統-->關鍵inode節點和文件系統的關係,當源文件刪除,軟鏈接的導致的指向丟失)
touch rm -rf 強制刪除 mkdir rmdir
linux 與 windows 換行的不同 LF->linux CRLF->windows
思考:windows與linux的文件系統的不同(linux 萬物皆文件)
第四章:
ps -ef ps aux 查看進程 aux更詳細,展示了進程狀態
掛載媒體mount : mount -t type /dev/sda /mnt 修復模式下: mount -o rw,remount / 根目錄可讀寫掛載 (思考:內核文件initrd.img在構建文件樹之前爲什麼要先構建虛擬文件系統,關鍵在於SCSI硬盤與IDE硬盤模塊區別)
root下blkid命令查看UUID號,寫入/etc/fstab 開機默認掛載
df -h 查看已掛載磁盤的使用情況
du -chs 查看一個目錄文件的大小, du -ch 詳細查看子目錄。
sudo apt-get install htop 安裝htop
htop或者top命令實時檢測電腦信息。
隨機生成UUID sudo apt-get install uuid 執行uuid隨機生成
sort 默認字符排序 sort -n 數字排序 sort -M 識別三字符的月,按月排序
sort -t ':' -k 3 -n /etc/passwd -t 分割符, -k 位置 按照UID排序
grep -v 輸出不匹配 -n 行號 -c總匹配行數 -e A -e B 匹配A或B
grep -rn “xxx“ . 匹配字符串
各種grep的用法:https://blog.csdn.net/zengxx1989/article/details/52837517
bzip2 格式壓縮:bzip2 file bunzip file解壓 bzip2 -d file 也可以解壓
gzip2 : gzip file gunzip file
zip: zip file unzip file
tar歸檔文件
tar -cvf test.tar test1 test2 歸檔test1與test2到test.tar
tar -tf test.tar 展示其中的歸檔文件
tar -xvf test.tar 提取歸檔文件
.tar.gz 與tgz格式是一樣的,解壓提檔 tar -zxvf test.tgz
第五章:
printenv 顯示全局環境變量
set 顯示該shell進程下的變量
test=test echo $test test=a b c 錯誤 test='a b c' export tt將變量設爲全局 局部變量不繼承,子進程不可見 unset test 刪除變量 若刪除全局變量,則只作用當前進程 PATH=$PATH:/home/user 登錄shell /etc/profile -> /etc/profile.d ^ 啓動式shell | ~/.bashrc -> /etc/bashrc 數組 shell中類型爲弱變量 mytest=(AB CD EF) echo $mytest ==>AB echo ${mytest[1]} ==> CD echo ${mytest[*]} ==> AB CD EF unset mytest[1] eccho ${mytest[*]} ==> AB EF echo ${mytest[1]} ==> 空 別名 alias -p 別名列表 alias vi='vim' 若想成爲全局變量使用 在 $HOME/.bashrc下別命名
第6章
增刪改用戶
/usr/sbin/useradd -D 查看設置用戶帳號默認參數
home目錄模板文件/etc/skel
當創建新用戶HOME目錄時,將/etc/skel下的文件複製放到HOME中
useradd -m test 強制創建HOME目錄 創建用戶時制定參數,細節可瀏覽/etc/passwd useradd -b HOME | -s shell type | -g GID userdel -r 刪除HOME目錄,mail 目錄 passwd username passwd -e username 強制下一次修改 usermod -L 鎖住用戶 -U 解鎖 -p 修改密碼 -l 修改名 chpasswd < /file 批量修改 chsh -s /bin/bash username 修改shell 創建組: /usr/sbin/groupadd shared usermod -G shared username 1 -g會修改用戶的默認組 修改組名 groupmod -n new_groupname old_groupname 文件權限 umask ==》 0002 root下0022 new file 666&(-mask) ==》 644 new dir 777&(-umask) ==》 755 umask 026 指定新值 umask在/etc/profile中設置 chmod a+x u 用戶 g 組 o 其他 a 所有 + 增 -移 =設置 X 若爲目錄,賦予執行權限 s 運行時重新設置UID和GID,賦予root權限 t 保留文件或目錄 u 設置權限和屬主一樣 改變所屬關係 chown dan newfile 屬主 chown dan.shared new file 主+組 chown .rich newfile 組 -R 遞歸改 chown test. newfile 主+組相同 -h 改變該文件的all符號鏈接文件的所屬關係 chgrp shared newfile 修改默認屬組 共享文件 SUID 程序以屬主權限調用 SGID 以默認屬組權限調用 需瞭解當進程使用文件時,對權限檢測的步驟
第10章 shell 入門
#date;who Sun Oct 14 14:23:33 CST 2018 sholck tty7 2018-10-12 13:52 sholck pts/0 2018-10-14 10:41 (:0.0) #!/bin/bash date who chmod u+x newfile echo A BC D ==> A BC D echo "A BC' D" ==> A BC' D echo 'A "BC" D' ==> A "BC" D 若字符串中有引號,用另一種引號圈起來 腳本中 echo -n "The time and date are: " date 輸出:The time and date are: Sun Oct 14 14:27:31 CST 2018 變量: echo "User is $USER" echo UID: $UID 要顯示美元符號,需要反斜線轉義 val1=10 var2=testing var3="still more testing" 腳本自動決定變量的數據類型 字符串賦值 var2=testing var4=$var2 對 var4=var2 錯 反引號 testing=` date ` today=` date +%y%m%d ` ==> 181014 touch log.$testing 錯誤,因爲變量中有空格 touch log.$today 對 重定向 echo > test6 追加 echo >> test6 input 重定向 wc < test6 ==> 行 詞 字節數 管道 將上條命令的輸出作爲輸入 rpm -qa > rpm.list rpm -qa | sort | more > rpm.list 執行數學運算 # expr 1 + 2 3 #expr 5 \* 2 10 shell script var1=10 var2=20 var3=` expr $var2 / $var1 ` echo The result is $var3 ==> The result is 2 使用方括號 在方括號的符號認定不爲通配符 #var1=$[1+5] #echo $var1 ==> 6 # var2=$[$var1*2] # echo $var2 ==> 12 bash shell只支持整數運算 var1=100 var2=45 var3=$[$var1/$var2] echo $var3 ==> 2 浮點問題 bc計算器 bc -q 3.44/5 0 scale=4 3.44/5 .6880 12*5.4 64.8 var1=10 var1*4 40 var2=var1/5 var2*1 2.0000 print var2 2.0000 quit 腳本內使用bc計算器 var=` echo "options: expression" | bc ` 模板 var1=` echo "scale=4; 3.44/5" | bc ` echo $var1 ==> .6880 腳本中使用內聯 內聯中需要$來標識變量,無法使用外部變量 var=` bc << EOF scale=4 a1=($var1 * $var2) b1=($var3 * #var4) a1+b1 EOF ` expr 數學運算 加空格 bc 內 不需要加空格 不需要 $ bc 內聯中 需要$來標識變量 退出腳本 $? 退出狀態 腳本中以最後一個命令的退出狀態碼退出 也可以通過exit x 指定退出碼 退出碼最大 255 若 exit 300 echo $? 44