linux學習
主要就是對前一段時間學習Linux的筆記的一個整理,不過也會陸續分享今後學習Linux的一些感想和技巧,當然也歡迎其他關於Linux的好文章的加入。
Linux命令列學習筆記
摘要
前段時間看了幾章《Linux命令列與Shell指令碼程式設計大全》一書,針對自己不太瞭解的地方記錄筆記如下,方便以後自己查閱。
1、兩個環境變數
- PS1:控制預設命令列提示符格式
- PS2:控制後續命令列提示符格式
- 就是這個:
2、檢視bash shell相關資訊
- 通過
man bash
命令可以檢視
3、cp命令
- -p 保留原始檔的訪問時間和修改時間
- -R 遞迴複製
4、連結檔案
- 軟連線
- 硬連線
軟連結可以通過cp -s
來建立,也可以使用ln -s
來建立;而硬連線就是建立一個獨立的檔案,通過cp -l
或是預設的ln
命令來建立。
5、stat,file命令
- stat 檢視檔案的統計資訊
- file 檢視檔案的型別
6、tail,head命令
- 兩者均是無需載入全部檔案,適合檢視大檔案的首尾部分
tail -f
保持活動狀態檢視,通常應用於檢視log資訊
7、PS命令的三種風格
- Unix風格引數,常用:
ps -ef
- BSD風格引數,常用:
ps l
- GNU全字引數,最好用的功能是
--forest
(層級)
8、kill命令
kill PID
,例如,kill 3940
killall http*
,殺掉所有http程式
9、mount命令
- mount -t type(型別) device(裝置名) directory(目錄)
例如:mount -t vfat /dev/sdb1 /media/a
,其中vfat(windows的檔案格式),也可以替換成ntfs(windows的檔案格式)、iso9660(CD-ROM)
- -o引數
ro:read-only rw:read-write user:允許普通使用者掛載檔案系統 cheak=name:掛載檔案系統時不進行完整性檢驗 loop:掛載一個檔案
例如:mount -t iso9660 -o loop KDE4-LIVE-DVD_32.iso mnt
,把檔案掛載到mnt目錄下。
10、du 命令
- -c:顯示所有已列出的檔案總大小
- -h:按人類可讀格式
- -s:顯示每個輸出引數的總計
11、sort排序命令
- -n:將數字識別成數字而不是字元
- -M:按月排序
- -k:排序從pos1位置開始,如果指定了pos2的話,到pos2位置結束。(--key=pos1[,pos2])
- -t:指定一個用來區分鍵位置的字元
eg1. 對/etc/passwd檔案根據使用者ID進行數值排序
sort -t ':' -k 3 -n /etc/passwd
eg2.檢視目錄下哪些檔案佔用空間最多
du -sh * | sort -nr
12、bzip2工具
- bzip2:用來壓縮檔案
- bzcat:用來顯示壓縮的文字檔案內容
- bunzip2:用來解壓
- bzip2recover:用來嘗試恢復損毀檔案
13、tar命令
列舉幾個例子:
- 建立一個歸檔檔案
tar -cvf test.tar test1/ test2/
- 列出歸檔檔案中的內容
tar -tf test.tar
- 解開歸檔檔案
tar -xvf test.tar
- 解壓gz檔案(非常常用)
tar -zxvf test.tar.gz
14、printenv命令
檢視全域性變數,系統環境變數一律使用大寫字母。
15、bash命令
- 啟動一個新的shell。
16、set命令
- set 顯示某個特定程式設定的所有環境變數
- printenv 顯示的環境變數均包含在了set顯示中
17、建立全域性變數方法
- 首先建立一個區域性環境變數
- 用export命令申明變數
18、刪除環境變數
- 刪除區域性環境變數
unset
- 刪除全域性環境變數
- 如果在子程式中刪除了一個全域性環境變數,只對子程式有效。
19、啟動bash shell有3種方式
- 登陸是當作預設的登陸shell
- 依次會處理以下檔案
- /etc/profile
- $HOME/.bash_profile
- $HOME/.bash_login
- $HOME/.profile
- 作為非登入shell的互動式shell
- 不是登陸時啟動的,而是手動啟動的shell稱作互動式shell
- 作為執行指令碼的非互動shell
- 依次會處理以下檔案
20、useradd命令
useradd命令用於新增新使用者,當然不是講這個功能。
useradd -D 檢視你的Linux系統中系統預設值。
資訊中有一項內容為:SKEL=/etc/skel
允許管理員建立一份預設的HOME目錄配置,然後把它作為建立新使用者HOME目錄的模版。
預設情況下,useradd不會建立HOME目錄,useradd -m
建立HOME目錄,並將/etc/skel複製過來。
21、userdel命令
userdel -r test
同時刪除test使用者的HOME目錄
22、修改使用者賬戶資訊
- passwd 修改密碼
- chpasswd 從檔案中讀取登陸名密碼
- chage 修改密碼的過期日期
- chfn 修改使用者賬戶的備註資訊
- chsh 修改使用者賬戶的預設登陸shell
- usermod -l 用來修改使用者賬戶的登陸名
- usermod -L 鎖定使用者名稱
- usermod -p 修改賬戶密碼
- usermod -U 解除鎖定
- “注意大小寫哦”
23、umask命令
用於設定預設檔案許可權,設定使用者建立檔案和目錄的預設許可權。
umask 022表示從物件的全許可權值中減去022許可權,則表示新建立的檔案的預設許可權為666-022=644(-rw-r-r),新建立的目錄許可權為777-022=755(drwx-rx-rx)。
24、設定組ID
- 設定組ID(SGID)實現檔案共享,將共享目錄設定SGID位,這樣目錄中的檔案將均用目錄的所屬組。
25、減少grub預設的引導時間
sudo vim /etc/default/grub
修改TIMEOUT值,然後sudo update-grub
生效
26、加速應用程式載入時間
sudo apt-get install preload
裝完重啟電腦,完成。
27、加速更新
#用官方apt-fast代替apt-get加速更新
sudo add-apt-repository ppa:apt-fast/stable
sudo apt-get update
sudo apt-get install apt-fast
28、網路相關
- hostname
hostname -d
顯示所屬域名;hostname -f
顯示完整的主機名和域名;hostname -i
顯示IP地址
- ping命令不作介紹了
- iwconfig 一般用於無線網路卡
- nslookup 在有IP地址時,可以用這個命令來顯示主機名,可以找到給定域內所有的IP地址。
- traceroute 檢視資料包在提交到遠端系統或是網站的時候所經過的路由器IP地址、跳數和響應時間。
- finger 檢視使用者資訊
- telnet 連線目標主機
- ethtool 顯示網路卡資訊
ethtool -i
顯示一個特定網路卡的驅動資訊(在檢查軟體相容性時尤其有用)ethtool -p
啟動一個介面卡指定行為ethtool -s
顯示網路統計資訊
- netstat 發現主機連線
netstat -g
查詢該主機訂閱的所有多播組(網路)netstat -nap | grep port
顯示使用該埠的應用程式idnetstat -tcp
顯示所有的TCP連線netstat -udp
顯示所有的UDP連線netstat -a
顯示所有的連線
Linux學習筆記-Shell指令碼程式設計
Shell程式設計
基礎
#!
指定執行指令碼的shell#
註釋行- 使用變數時,要在前面加上
$
,如echo $PATH
,列印PATH變數的值 將命令執行結果的值賦給變數
TIME=`date`
unset
刪除變數位置變數,
ls -l file1 file2 file3
$0
表示程式的檔名ls -l
$1
表示第1個引數值,也就是file1$2
表示第2個引數值,也就是file2$3
表示第3個引數值,也就是file3- ...
$9
表示第9個引數值
特殊變數
$*
表示這個程式的所有引數$#
表示這個程式引數的個數$?
執行上一個命令的返回值(0為執行正常,非0為執行錯誤)$$
這個程式的PID$!
執行上一個後臺命令的PID
執行指令碼
sh filename.sh
執行指令碼sh -x filename.sh
可以顯示指令碼執行過程sh -n filename.sh
不執行,只檢查語法錯誤
Shell命令
read
從鍵盤讀入資料後,賦給變數expr
對整數型變數進行算術運算expr 3 + 5
注:加號前後有空格expr $var1 - 5
減expr $var1 / $var2
除expr $var3 \* 10
乘
test
變數測試語句test str1=str2
測試是否相等test str1
測試是否非空test -n str1
測試是否非空test -z str1
測試是否為空
test
檔案測試語句test -d file
指定檔案是否為目錄test -f file
指定檔案是否為常規檔案test -x file
指定檔案是否可執行test -r file
指定檔案是否可讀test -w file
指定檔案是否可寫test -a file
指定檔案是否存在test -s file
指定檔案大小是否為0
test
變數對比語句test int1 -eq int2
判斷int1 == int2
test int1 -ge int2
判斷int1 >= int2
test int1 -gt int2
判斷int1 > int2
test int1 -lt int2
判斷int1 < int2
test int1 -le int2
判斷int1 <= int2
test int1 -ne int2
判斷int1 != int2
exit
退出語句- 0 為正常退出
- 非0 為不正常退出
awk
命令- 這個命令非常強大,這裡只介紹一個用法。
- 格式:
awk -F 分隔符 '命令'
- 例項:
awk -F : '$3==0 {print $1}' /etc/passwd
檢測系統中UID為0的使用者awk -F : 'length($2)==0 {print $1}' /etc/shadow
檢測系統中密碼為空的使用者
if ... then
語句if test 1 -lt 2 then echo "YES" else echo "NO Possible" fi
For ... done
語句格式:
for 變數 in 名字表 do 命令列表 done
select
迴圈語句格式:
select 變數 in 關鍵詞 do command1 ... commandn done
case ... esac
格式:
case $var in
c)
echo "your selection is C"
;;
d)
echo "your selection is d"
;;
e)
echo "your selection is e"
;;
*)
echo
esac
While
迴圈
格式:
while 條件
do
command
done
shift
命令,引數向左移一位,$#
值減一
示例練習
- 測試Apache服務是否啟動,若沒有啟動,則啟動Apache服務
- 判斷某個檔案屬於什麼型別的檔案
- 踢出使用者的指令碼
- 顯示使用者的資訊
- 加減乘除的指令碼
- 列印出1到10之間的平方數
- 批量增加使用者,同時設定密碼
- 批量刪除使用者
- 累加求和(使用shift命令)
後續再貼上shell指令碼...
Linux學習筆記-使用者賬戶
前提
對前一段時間學習Linux做一個總結,主要是整理筆記,寫的可能比較亂,但是內容比較豐富,還是值得一看的。內容總共分為:使用者賬戶、程式管理、計劃任務、檔案系統構成、磁碟管理、備份、Shell程式設計。內容都是比較基礎,比較常用的,過一遍會加深你的印象。
本想是總結在一篇文章上的, 可是感覺內容太長了,不方便瀏覽和複習,故改為一個合集,拆成6部分
使用者賬戶
Linux使用者基本上分為下面三類:
- 超級使用者(root , UID=0)
- 普通使用者(UID=[500,60000])
- 偽使用者(UID=[1,499])
/etc/passwd & /etc/shadow
使用者配置檔案儲存在/etc/passwd
檔案下,檔案中每一行代表一個使用者,每一列代表使用者的基本資訊,第一列代表使用者的使用者名稱,第二列代表使用者的密碼,密碼使用*代替。
因為密碼是通過加密後儲存在/etc/shadow
檔案下了,這個檔案的許可權只有root使用者才能訪問。
pwunconv
命令可以將密碼回寫到/etc/passwd
檔案中,執行了這個密碼後,再次進入/etc/passwd
檔案中,就會發現第二列的*被一串字串所替代,這就是加密後的密碼。
pwconv
命令正好與上面的命令意思相反,它將密碼從passwd中寫入到shadow中,這個命令一般是在我們建立使用者後就會自動執行。
同樣的道理,使用者組檔案、使用者組密碼檔案分別是/etc/group
和/etc/gshadow
。
預設使用者配置
使用者配置檔案:/etc/login.defs
、/etc/default/useradd
。
新使用者資訊檔案:/etc/skel
,在建立新使用者後,會自動將此資料夾中的內容拷貝到新使用者的HOME目錄下,作為新使用者的配置檔案。
登入顯示資訊:/etc/motd
成功後、/etc/issue
登入時。
普通使用者為什麼可以改密碼?
上面說過密碼存放在/etc/passwd
以及/etc/shadow
中,而這兩個檔案對其他使用者均沒有寫許可權。
普通使用者用passwd
命令改密碼,該命令的全路徑是/usr/bin/passwd
,你可以通過ls -l /usr/bin/passwd
檢視到該命令的許可權,為-rwsr-xr-x
,可以看到有個s許可權位。
這個s許可權位的意思就是當其他使用者在使用這個命令的時候,將暫時獲得這個命令的所屬使用者的許可權。換句話就是說當普通使用者在使用passwd
命令的時候,會暫時獲取root許可權,從而可以改變/etc/passwd
裡的密碼值,達到改密碼的效果。
特殊許可權位
那麼,像上面那樣的特殊許可權位有哪些呢?又如何設定呢?
- setUID:就是上面的s許可權位,可以通過以下命令進行設定
chmod u+s filename
chmod 4755 filename
- setGID: 大概意思同setUID,就是執行行預設獲取命令所屬組的許可權,同樣,可以通過下面命令進行設定
chmod g+s filename
chmod 2755 filename
- 粘著位:用
t
表示,你可以通過檢視/tmp
目錄的許可權就知道了,那麼,它的作用是什麼呢?
/tmp
目錄的許可權代表什麼意思?
粘著位只是針對目錄進行設定,大家知道/tmp
目錄的許可權為drwxrwxrwt
,意思就是什麼人都具有讀、寫、執行的許可權,那麼,如果我建的檔案或者目錄被別人刪了怎麼辦?所以,粘著位的作用就是:每個人在目錄裡都有讀、寫、執行的許可權,但是隻有自己可以刪除自己建立的檔案。
很神奇是不是?來看看怎麼設定?
同樣兩種方式,chmod o+t dir
&chmod 1777 dir
,dir代表目錄。
新增使用者
useradd -D
其實就是根據/etc/default/useradd
預設配置來建立的
使用者組管理命令
usermod -G 組名 使用者名稱
將使用者加入使用者組gpasswd -a 使用者名稱 組名
將使用者加入使用者組groups
檢視使用者隸屬那些使用者組newgrp
切換使用者組grpck
使用者組配置檔案檢查chgrp
修改檔案所屬使用者組vigr
編輯/etc/group
檔案
使用者管理命令
pwck
檢測/etc/passwd
檔案vipw
編輯/etc/passwd
檔案id
檢視使用者詳細資訊finger
檢視使用者詳細資訊,有些Linux發行版預設不帶此命令passwd -S
檢視使用者密碼狀態who
orw
檢視當前登入使用者資訊
例項
- 新增使用者組:
groupadd -g 888 webadmin
- 刪除使用者組:
groupdel webadmin
- 修改使用者資訊:
groupmod -n apache webadmin
(將webadmin組名修改為apache) - 檢測使用者:
passwd -S username
- 鎖定使用者:
passwd -l username
sudo
使普通使用者以root的方式執行命令。
配置檔案:/etc/sudoers
;
格式:使用者名稱(組名) 主體地址=命令(絕對路徑);
例項:sudoer檔案中有編寫規則說明,具體參照下圖。
Linux學習筆記-程式管理
程式管理
程式管理不得不介紹的四個命令,ps
、kill
、nice/renice
、top
.
PS
檢視程式的命令,非常強大哦。它有三種表達方式,具體可以參照man文件的description部分。
a
顯示所有的使用者u
顯示使用者名稱和啟動時間x
顯示沒有控制終端程式-e
顯示所有程式-f
顯示完整格式
常用命令
ps aux
orps -ef
都是顯示所有使用者程式,只是不一樣的表達方式ps -uU username
檢視系統中指定使用者執行的程式
很有必要看一下ps命令的man說明文件,下面圖片貼出文件中example部分內容。
Kill
這個命令也很常用的,殺死程式.
kill PID
根據程式號,直接終止程式kill -9 PID
強行關閉kill -1 PID
重啟程式xkill
關閉圖形程式killall 程式名
結束該程式
nice/renice
改變程式的優先順序,每一個程式都有一個優先順序(也稱nice值),其範圍為[-20,19],最高到最低,注意-20是最高的哦,預設情況下,程式的優先順序都是0,優先順序高的程式會比較頻繁的被呼叫執行。
nice
設定程式的優先順序。格式:nice -n command
,eg.nice -n 19 dd if=/dev/cdrom of=~/mdk.iso
利用最低優先順序建立一張cd的映象,防止複製操作阻礙其他程式。renice
更改使用者的優先順序。格式:renice -n pid
, eg.renice -5 777
提高777程式的優先順序。
top
知道Windows下的工作管理員吧,這個命令就是命令列下的工作管理員。
很強大的命令,介紹下簡要用法。
d
:指定重新整理間隔c
:顯示整個命令列u
:檢視指定使用者程式k
:終止執行程式h
:幫助
Linux學習筆記-計劃任務&檔案系統構成
計劃任務
計劃任務最常用的兩個命令就是at
和crontab
,at
命令是一次性執行任務;crontab
是週期性執行作業。
at
格式:at [-f filename] time
。這裡的time也就是時間分為兩類:
- 絕對計時
hh:mm MM/DD/YY
- 相對計時
now + n minutes
now + n hours
now + n days
例項
at 5:30pm
at now + 18minutes
at 17:30 1/11/11
接下來輸入命令,輸入完後Ctrl+D儲存任務。注意:命令一定要是絕對路徑。
at -l
列舉任務at -d
刪除任務
配置檔案
/etc/at.allow
允許使用者列表/etc/at.deny
不允許使用者列表
crontab
作用:用於生成cron程式所需要的crontab檔案。
格式:crontab {-l|-r|-e}
。
-l
顯示當前的crontab-r
刪除-e
編輯
編輯規則,將知道的具體時間填上,不知道的填*。
分鐘 | 小時 | 天 | 月 | 星期 | 命令/指令碼 |
30 | 17 | * | * | 1-5 | /usr/bin/wall |
45 | 17 | * | * | 1-5 | /sbin/shutdown -r now |
*/2 | 12-14 | * | 3-6, 9-12 | 1-5 | 檢測指令碼 |
上面第一例,每個週一到週五的17:30進行廣播操作;第二例,每週一到週五17:45進行重啟操作;第三例,3-6月和9-12月,每週一到週五,每隔2分鐘進行指令碼檢測。
檔案系統構成
/usr/bin & /bin
可執行的命令/usr/sbin & /sbin
root可執行的的命令/proc
虛擬檔案系統,存放當前內容映象/dev
存放裝置檔案/lib
存放系統程式執行所需的共享庫/lost+found
存放一些系統出錯的檢查結果/tmp
臨時檔案/etc
系統配置檔案/var
存放經常發生變動的檔案,比如郵件、日誌等/usr
存放所有的命令、庫、手冊頁等/mnt
臨時檔案系統的安裝點/boot
核心檔案及自帶程式檔案儲存位置/usr/local
安裝第三方軟體預設路徑Linux學習筆記-磁碟管理&備份
磁碟管理
關於du
和df
之類的命令這裡就不介紹了,這裡主要介紹的是如何新增磁碟和分割槽、如何新增swap分割槽以及磁碟配額的內容。
新增磁碟或分割槽
總共分為4大步。
fdisk
,劃分分割槽。fdisk -l /dev/sdb
,檢視磁碟分割槽情況fdisk /dev/sdb
,對磁碟進行操作,見下面基本操作m
幫助p
列印分割槽表n
增加新的分割槽t
改變分割槽檔案系統IDL
檢視檔案系統IDd
刪除分割槽w
儲存分割槽表q
退出(不儲存)
mkfs
,建立檔案系統。mkfs.ext3 /dev/sdb
將分割槽格式化為ext3檔案系統型別
mount
,掛載分割槽。mount /dev/sdb /mnt
將sdb分割槽掛載到mnt目錄下
df -h
檢視系統磁碟,可以看到mnt分割槽
注意:我這是在虛擬機器中測試的寫入配置檔案,編輯
/etc/fstab
。檔案的內容資訊格式如下;物理分割槽名 掛載點 檔案系統 預設設定 是否檢測(1:檢測;2:檢測) 檢測順序(0:是否檢測;1:優先檢測;2:期後檢測) LABEL=1 / ext3 default 1 2 /dev/sda1 / ext3 default 0 0 /dev/sdb1 /web ext3 default 1 1 e2label /dev/sdb1
檢測是否有卷標e2label /dev/sdb1 name
新增捲標
新增Swap分割槽
兩種方法擴大swap分割槽
- 新建磁碟,分swap分割槽
- 在已有磁碟上使用swapfile檔案增大swap分割槽
第一種方法可以根據上面增加分割槽的步驟一樣進行操作,這裡主要記錄一下使用swapfile檔案增大swap分割槽的步驟。
mkdir /var/swap
新建swap目錄chmod 700 /var/swap
設定目錄許可權dd if=/dev/zero of=/var/swap/file.swp bs=1024 count=3000
建立swp檔案mkswap /var/swap/file.swp
使檔案可用vim /etc/fstab
寫入配置檔案free
檢視分割槽swapon /var/swap/file.swp
啟用swap分割槽free
再次檢視分割槽
之前和之後的swap分割槽大小
磁碟配額(針對分割槽)
磁碟配額就是管理員可以為使用者所能使用的磁碟空間進行配額限制,每一使用者只能使用最大配額範圍內的磁碟空間。
可分為三類限制:
- 軟限制(Soft limit):定義使用者可以佔用的磁碟空間數。當使用者超過該限制後會收到已超過配額的警告。
- 硬限制(Hard limit):當使用者試圖將檔案存放在其已經超過該限制目錄時,報告檔案系統錯誤。
- 寬限制(Grace period):定義使用者在軟限制下可以使用其檔案系統的期限。
操作步驟
- 開啟分割槽配額功能,
vim /etc/fstab
,編輯配置檔案,在掛載屬性上加上標誌userquota或grpquota,然後重新掛載mount -o remount /home
,或重新啟動系統sudo init 6
; - 建立配額資料庫,
quotacheck -Cvuga
,會生成aquota.user、aquota.group兩檔案。 - 啟動配額功能,
quotaon 分割槽名稱
;關閉配額功能,quotaoff 分割槽名稱
; - 編輯配額
edquota username
編輯使用者配額edquota -g groupname
編輯使用者組配額edquota -t 設定寬期限
設定寬期限edquota -p 模版使用者 複製使用者1 複製使用者2
quota username
檢視使用者的配額使用情況repquota -a
管理員檢視配額資訊
備份
備份幾乎是Linux系統運維最頻繁的工作了,不過大部分情況下,都是通過自動化指令碼進行自動備份。
備份策略
- 完全備份
- 增量備份:通常是這種情況
備份分類
- 系統備份:
/etc
,/boot
,/usr/local
,/var
,/log
... - 使用者備份:
/home
備份相關命令
其實主要就是通過cp
和tar
命令
cp -Rpu
複製檔案-p
保持檔案原本屬性-u
增量備份-R
迴圈複製
scp
遠端備份,類似cp命令tar -zcf /backup/sys.tar.gz /etc /boot
備份/etc , /boottar -ztf /backup/sys.tar.gz
檢視備份包中的檔案(不解包)tar -zxf /backup/sys.tar.gz
還原備份目錄,其實就是解包tar -zxf /backup/sys.tar.gz -C ./backup
解壓到指定目錄backup
下tar -zxf /backup/sys.tar.gz etc/group
恢復指定檔案tar -rf /backup/sys.tar /etc/file1 /etc/file2
追加檔案到備份包中tar -uf /backup/sys.tar /etc/file
將修改過的檔案做備份
Linux學習筆記-Shell指令碼程式設計例項
下面的例子基本上都是上面的知識點,比較擴充套件一點的就是awk
命令的用法,下面程式碼僅作參考,寫的不好,請見諒;錯誤的地方煩請指出,不勝感激!
1、測試Apache服務是否啟動,若沒有啟動,則啟動Apache服務
#! /bin/sh
# 測試Apache服務是否啟動,若沒有啟動,則啟動Apache服務
web=`/usr/bin/pgrep httpd`
if [ "ABC$web" = "ABC" ]
then
/etc/init.d/httpd start
fi
2、判斷某個檔案屬於什麼型別的檔案
#! /bin/sh
# 判斷一個檔案屬於什麼型別
if [ -d $1 ]
then
echo "這是一個目錄";
elif [ -f $1 ]
then
echo "這是個普通檔案"
elif [ -c $1 ]
then
echo "這是字元特殊檔案"
elif [ -b $1 ]
then
echo "這是塊特殊檔案"
else
echo "我也不知道這是啥玩意"
fi
3、踢出使用者的指令碼
#! /bin/sh
# 判斷使用者是否線上,存在的話踢出使用者
username=$1
/usr/bin/w > whoIsOnline
userString=`/usr/bin/awk -v user=$username '{if($1 == user) print $1}' ./whoIsOnline`
if [ "ABC$userString" = "ABC" ]
then
echo "$1 is not online"
else
killId=`/usr/bin/ps aux | /usr/bin/grep $username | /usr/bin/eprep -v grep | /usr/bin/awk {print $2}`
kill $killId
fi
4、顯示使用者的資訊
#! /bin/sh
# 顯示使用者的相關資訊
user=$1
if [ "ABC$user" = "ABC" ]
then
echo "請在命令列後面輸入要查詢的使用者名稱!"
else
/usr/bin/grep ^$1: /etc/passwd | /usr/bin/awk -F ":" '{print "使用者ID為"$3 ; print "使用者組ID為"$4 ; print "你其實是"$5 ; print "你的主目錄為"$6 ; print "你的預設Shell為"$7}'
fi
5、加減乘除的指令碼
#! /bin/sh
# 加減乘除的小指令碼,主要練習case語句
case $2 in
+)
echo "$1 + $3 = `expr $1 + $3` "
;;
-)
echo "$1 - $3 = `expr $1 - $3`"
;;
\*)
echo "$1 * $3 = `expr $1 \* $3`"
;;
/)
if [ $3 = 0 ]
then
echo "除數不能為0"
exit
else
echo "$1 / $3 = `expr $1 / $3`"
fi
;;
*)
echo "您的輸入不符合規範,請重新輸入"
esac
示例:sh calc.sh 9 + 10
執行。
6、列印出1到10之間的平方數
#! /bin/sh
# 列印1-10之間的平方數,主要練習while語句
#賦值的時候注意不要加空格
i=1
while [ $i -le 10 ]
do
echo "$i 的平方為:`expr $i \* $i`"
i=`expr $i + 1`
done
#! /bin/sh
# 列印1-10之間的平方數,主要練習for語句
for i in {1..10}
do
echo "$i 的平方為:`expr $i \* $i`"
done
7、累加求和(使用shift命令)
#! /bin/sh
# 使用shift命令累加求和
sum=0
while [ $# -gt 0 ]
do
sum=`expr $sum + $1`
shift
done
echo "總和為:$sum"
示例:sh shift.sh 8 9 10 11 12
執行。
Linux-RPM&YUM軟體管理器
RPM
rmp -vih packageName.rpm
安裝rpm軟體包rmp -e ftp
解除安裝ftp軟體(具體版本號可以不用寫)rpm -U packageName
升級功能(刪除舊版本,安裝新版本)rpm -q
查詢已安裝軟體功能rpm -qa
查詢系統中已經安裝的所有軟體rpm -qi
查詢指定安裝軟體包詳細資訊,eg.rpm -qi bash
rpm -ql
查詢指定軟體安裝路勁與檔案列表,eg.rpm -ql bash
rpm -qc
查詢指定軟體的配置檔案,eg.rpm -qc bash
rpm -qf
查詢指定檔案為哪個軟體所安裝,eg.rpm -qf /etc/inittab
rpm -qpi
查詢尚未安裝軟體資訊,eg.rpm -qpi packageName
rpm -V packageName
檢視軟體哪些狀態被修改,未被修改的軟體將沒有任何提示。出現的字元及其意義如下:5
MD5值被改變S
檔案大小改變L
連結檔案的源已經被改變T
檔案最後修改時間已經改變D
裝置改變U
使用者發生改變G
組發生改變M
包括許可權與型別在內的模式已經被改變?
不可讀檔案
YUM
YUM-Yellow dog Update Modified,YUM是RPM軟體管理器的改進版,可以很好的解決RPM所面領的軟體包依賴問題。
YUM源
CentOS6 yum的源定義檔案存放在/etc/yum.repos.d,檢視repo
檔案的格式如下圖。
name
為yum源名稱;mirrorlist
為映象站點目錄;bashurl
為yum源指定的URL地址;enable
是否啟用該yum源(0:禁用;1:啟用;預設為啟用);gpgcheck
安裝軟體是否檢查簽名(0:禁用;1:啟用);gpgkey
檢查簽名的金鑰檔案。
從上圖中,看到$releaserver
的變數,它指的是系統髮型版本號。還有其他的如arch
代表CPU架構;如basearch
代表系統架構;YUM0-9
使用Shell對應的0-9個同名變數替換
YUM命令
yum check-update
列出可更新的軟體清單yum update
安裝所有更新軟體yum install PackageName
安裝指定軟體yum remove PackageName
解除安裝指定軟體yum update PackageName
更新指定軟體yum search PackageName
查詢某個軟體yum list
yum list updates
列出可更新的軟體yum list installed
列出已安裝的軟體包yum list extras
列出已安裝但是不在Repository內的軟體包
yum info
yum info PackageName
獲取軟體包資訊yum info updates
列出可更新的軟體包資訊yum info installed
列出已安裝的軟體包資訊yum info extras
列出已安裝但不在Repository內的軟體包的資訊
yum provides
列出軟體包提供了哪些文件yum clean
yum clean packages
清除快取目錄(/var/cache/yum
)下的軟體包yum clean headers
清除快取目錄(/var/cache/yum
)下的Headersyum clean oldheaders
清除快取目錄(/var/cache/yum
)下舊的Headersyum clean , yum clean all
清除所有快取
建立YUM源
當我們收集軟體包越來越多的時候,有必要建立自己的YUM源,實現軟體集中管理,下面三步幫你實現。
- 安裝
createrepo
軟體 - 將所有的軟體包儲存在某個目錄下,如
/softkit
- 執行
createrepo /softkit
即可
《Linux運維之道》筆記一
忘記root登入密碼
- 開機出現GRUB載入程式時,按
e
編輯GRUB引導引數 - 選擇以kernel開始的行按
e
進行編輯 - 在kernel行末尾加上single後回車,按
b
啟動系統進入單使用者模式 - 在單使用者模式下輸入命令
passwd root
,輸入兩次密碼 - 修改成功,
shutdown -r now
重啟系統 - 新密碼登入,成功。
- 開機出現GRUB載入程式時,按
history
命令顯示所有命令記錄,然後通過!命令編號
呼叫該命令- 清屏命令大家都知道
clear
,還有一個快捷鍵更方便——ctrl+l
- Vim普通模式下輸入
ZZ
,可以實現儲存並退出文件 echo "hello123" | passwd --stdin jack
通過管道為使用者jack設定密碼uptime
監控CPU使用情況
一、ACL訪問控制許可權
兩個命令:getfacl
、setfacl
getfacl
檢視文件的ACL許可權setfacl
設定文件ACL許可權-b
刪除所有附加的ACL條目-k
刪除預設的ACL-m
新增ACL許可權-x
刪除指定的ACL條目-R
遞迴處理所有的子檔案與子目錄
例項
getfacl 2.log
檢視文件2.log的ACL許可權setfacl -m u:user01:rw 2.log
新增ACL條目,使使用者user01對2.log檔案可讀可寫setfacl -m g:group01:r 2.log
使使用者組group01對檔案2.log有可寫許可權setfacl -x u:user01 2.log
刪除使用者user01的ACL條目setfacl -x g:group01 2.log
刪除組的許可權setfacl -b 2.log
清除檔案2.log所有ACL許可權
二、磁碟分割槽
之前在一篇筆記裡已經介紹了fdisk
命令的用法,這裡就不重複了,這裡說一下另外兩個命令partprobe
和parted
。
partprobe
partprobe /dev/sdb
讓核心立即讀取新的分割槽表,無需重啟電腦就可以識別新建立的分割槽
parted
GPT分割槽方式,不同與傳統的MBR分割槽(使用fdisk
)
三、開機啟動
學習開機啟動命令,先要了解Linux的6種執行級別。
- 0 關機模式
- 1 單使用者模式
- 2 無NFS(共享服務)網路的字元介面模式
- 3 全功能字元介面模式
- 4 暫時未定義使用
- 5 圖形模式
- 6 重啟模式
通過runlevel
命令可以檢視當前所處的執行級別。伺服器版本的Linux一般都是3級別,通過init
命令可以改變當前的執行級別,如init 0
命令可以直接關機.
好了,可以進入正題了,如何設定開機啟動呢?使用命令chkconfig
,用法如下:
chkconfig --list
查詢系統服務執行級別資訊chkconfig --level
指定操作的執行級別,不指定級別時預設為2,3,4,5級別- 例項:
chkconfig --list sshd
檢視sshd命令的執行級別
chkconfig sshd on
設定sshd服務在2.3.4.5級別開機啟動
四、記憶體和硬碟使用情況
1、記憶體使用
記憶體的使用情況檢視命令,應該很熟悉了,那就是free
,但是你真的知道顯示出來的各個資料都代表的是什麼意思嗎?至少之前我是沒怎麼去了解。
每次看的時候,也就掃了一眼,總共498M
,用了263M
,還剩235M
,就完事了。其他的資料就沒怎麼看了,這裡簡單介紹一下其他數是什麼含義。
在Linux開機後就會預先提取一部分記憶體,並劃為buffer與cache以供程式隨時使用。第一行的used就是這部分記憶體數263
,而後面的buffers代表的是buffer使用剩餘的記憶體數65
,cached就是cache剩餘的記憶體數145
。那麼buffer和cache用了多少呢?第二行中used就是buffer和cache使用的記憶體數51
,那麼就有等式263=65+145+51
,接下來446
系統總剩餘的記憶體數,為分配的有235
,分配了但是沒有用完的有65+145
,那麼446=65+145+235
。
細心的讀者也許一眼就看出了,等式根本不等嘛!彆著急,換成位元組單位,你再算算!至於原因就很明瞭了
2、硬碟使用
這裡就補充兩點。
df -hT
中T
的引數代表顯示檔案系統df -i
中i
代表的是磁碟inode使用量資訊
這裡可以看出根分割槽還剩下313077個inode節點,也就是說如果在更分割槽下建立313077個空檔案,那麼就算該磁碟還有容量也再也容不下新增檔案了。
五、網路
1、網路引數設定
有兩種方式設定網路引數,一是通過命令列設定;二是通過修改引數檔案。
命令列設定不外乎ifconfig
、route
這兩個命令,具體使用可以自行查詢幫助文件,這裡介紹一下修改引數檔案來設定網路。
網路的引數檔案在/etc/sysconfig/network-scripts/ifcfg-<iface>
,其中iface
為網路卡介面名稱。如果只有一塊乙太網網路卡,則一般為ifcfg-eth0
,檔案有一下欄位:
DEVICE
裝置名稱eh0,eth1...
TYPE
裝置型別ethernet
BOOTPROTO
啟動協議none|dhcp|static
HWADDR
硬體地址 MAC地址NM_CONTROLLED
網路卡是否可以被NetworkManager控制yes|no
ONBOOT
開機是否啟動該網路卡yes|no
ONPARENT
真實介面啟動後虛擬介面是否啟動yes|no
IPADDR
IP地址PREFIX
網路位掩碼個數NETMASK
子網掩碼GATEWAY
預設閘道器DNS{1,2}
DNS伺服器
如我網路卡eth1設定靜態IP,配置如下圖
2、網路故障排錯
這塊主要介紹5個命令,ping
、traceroute
、nslookup
、dig
、netstat
。
ping
非常常用的命令,測試基本就是4步ping 127.0.0.1
ping本地迴環,測試本地網路協議是否正常ping 192.168.1.101
ping本地IP,測試本地網路介面是否正常ping 192.168.1.1
ping本地閘道器,測試閘道器是否正常工作ping 61.135.169.121
ping外部網路,測試服務商網路是否正常工作ping www.baidu.com
ping網址,如果上述都正常,而這步ping不通,那麼肯定是DNS的問題了
traceroute
跟蹤資料包的路由過程,可以檢視資料包在網際網路中哪個節點出現問題,如圖
nslookup
檢測本地設定的DNS伺服器工作是否正常nslookup www.baidu.com
檢測本地DNS伺服器是否能解析到百度,如圖
本地設定的DNS伺服器是8.8.8.8,檢測到百度對應的兩個IP地址
dig
檢視更多關於DNS記錄的資訊dig www.baidu.com
顯示比nslookup
更詳細的資訊
netstat
網路監控命令,該命令比較強大,可以自行檢視幫助文件學習netstat -nutlp
檢視當前系統開啟埠資訊
轉載儲存:Linux | LP's Blog
《Linux運維之道》筆記二
{}
花括號的用法
逗號
,
分隔多個專案echo {a,b,c} #列印出a b c echo user{01,02,03} #列印出user01 user02 user03 mkdir a{1,2,3} #建立資料夾a1,a2,a3
連續兩點
..
建立連續序列echo a{1..10} #列印出a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 mkdir b{1..5} #建立資料夾b1 b2 b3 b4 b5
一、變數
typeset
為變數新增只讀屬性,防止誤操作,當你想改值的時候,會報錯。NAME=pengloo53 typeset -r NAME NAME=pengloo
read -p "Please input your name:" NAME
提示符後輸入值賦值給變數export NAME
將普通變數轉換成環境變數
1、變數的展開替換
${varname:-word}
若varname存在且非null,則返回其值,否則返回word${varname:=word}
若varname存在且非null,則返回其值,否則設定為word${varname:?message}
若varname存在且非null,則返回其值,否則顯示varname:message${varname:+word}
若varname存在且非null,則返回word,否則返回null${variable#key}
從頭開始刪除關鍵詞,執行最短匹配${variable##key}
從頭開始刪除關鍵詞,執行最長匹配${variable%key}
從尾開始刪除關鍵詞,執行最短匹配${variable%%key}
從尾開始刪除關鍵詞,執行最長匹配${variable/old/new}
將old替換成new,僅替換第一個出現的old${variable//old/new}
將old替換成new,替換所有的old
2、陣列
${name[subscript]}
呼叫陣列變數的值,如果subscript為@
、*
則呼叫所有的陣列成員。A=(11 22 33) echo ${A[0]} #顯示11 echo ${A[@]} #顯示11 22 33 echo ${A[*]} #顯示11 22 33
${ #name[subscript]}
返回${name[subscript]}
的長度。B=(aa bbb cccc) echo ${ #B[2]} #顯示4(cccc字串的長度) echo ${ #B[@]} #顯示3(陣列成員個數)
3、算數運算
用expr
命令工具大部分應該都知道,如下:
expr 8 + 4
加法expr 8 - 4
減法expr 8 \* 4
乘法expr 8 / 4
除法
然而你也可以通過變數表示式來進行算術運算,語法為:$((expression))
,例如:
$((x+y))
加$((x-y))
減$((x*y))
乘$((x/y))
除$((x%y))
取餘$((x++))
自加$((x--))
自減$((x**y))
冪運算
4、測試運算
命令列工具test
,應該不陌生,這裡舉幾個例子就清楚了。
test -d /etc/ && echo "yes" || echo "no"
,/etc/
是目錄就顯示yes,不是就顯示no,它等價與[ -d /etc/ ] && echo "yes" || echo "no"
一對中括號就替代了test
,這裡注意的是,中括號左右都要留有空格。
二、正規表示式
1、基本正規表示式(grep)
.
任意單個字元*
匹配前一個字元出現零次或者多次[]
匹配集合中任意單個字元[x-y]
匹配連續的字串範圍^
匹配字串的開頭$
匹配字串的結尾[^]
集合取反\
轉義後的字串\{n,m\}
匹配前一個字元重複n到m次\{n,\}
匹配前一個字元重複至少n次\{n\}
匹配前一個字元重複n次\(\)
將\(
與\)
之間的內容儲存在『保留空間』,最大儲存9個\n
通過\1
至\9
呼叫保留空間中的內容
除了最後兩個,其他的都比較好理解,針對最後兩個舉個例子:grep --color "\(root\)\(:\).*\2\1" /etc/passwd
篩選出以root:
開頭,以:root
結尾的行。
2、擴充套件的正規表示式(egrep)
+
匹配前一個字元出現一次或者多次?
匹配前一個字元出現零次或者一次|
匹配邏輯or
()
匹配正則集合
egrep --color '(root|admin)' /etc/passwd
找出包含root或者admin的行。
3、Others
除了上述的一些表示式,還有基於其他規範的正規表示式,例如POSIX
規範以及GNU
規範。這裡不列舉了,可以自行搜尋瞭解。
轉載儲存:Linux | LP's Blog
相關文章
- Linux該如何學習呢?Linux學習分享!Linux
- 學習LinuxLinux
- Linux運維需要持續學習嗎?Linux學習Linux運維
- Linux學習心得Linux
- 如何學習LinuxLinux
- Linux 學習概述Linux
- Linux學習04Linux
- Linux 命令學習Linux
- Linux學習(二)Linux
- linux學習 ApacheLinuxApache
- IT民工學習——linuxLinux
- linux學習列表Linux
- LInux iptables學習Linux
- linux 學習之路Linux
- linux 學習 大全Linux
- linux 學習類Linux
- linux sed學習Linux
- Linux學習之旅Linux
- 高中程度可以學習Linux嗎?Linux運維學習Linux運維
- 為什麼要學習Linux?如何學習Linux技術?Linux
- 學習Linux哪個比較好?入門學習LinuxLinux
- 怎樣系統的學習linux?Linux學習路線!Linux
- 報班學習Linux貴嗎?學習Linux怎麼樣?Linux
- 掌握Linux技能的學習方法有什麼?Linux學習Linux
- Linux基礎學習-Docker學習筆記LinuxDocker筆記
- 學習Linux運維有哪些學習方法?Linux運維
- 與 Linux 一起學習:學習打字Linux
- 與 Linux 一起學習:學習地理Linux
- 轉行Linux運維需要學習嗎?學習Linux運維Linux運維
- 學習Linux技術能獲的什麼技能?Linux學習Linux
- 女生適合學習Linux運維嗎?Linux基礎學習Linux運維
- 哪些人適合學習Linux?linux系統使用學習Linux
- 如何正確學習Linux系統呢?Linux運維學習Linux運維
- 一線Linux專家學習經驗談,如何學習LinuxLinux
- linux less的學習Linux
- Linux入門學習Linux
- Linux核心模組學習Linux
- 凡人學習Linux之路Linux