linux命令行與shell腳本編程大全複習總結 3-10章

這本書從大三開始看,引導我入門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

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章