初學Linux基本命令的總結
ls 顯示當前目錄內容
1)ls / (顯示根目錄下所有的目錄和檔案)
2)ls -l / (以列表的形式顯示根目錄下所有的目錄和檔案)
3)命令2等同於ll /
絕對路徑和相對路徑
1)絕對路徑,以/開頭的都是絕對路徑,比如/home/pzm
2)相對路徑,以./ 或者../開頭的,./是指當前目錄,../是指上一層目錄
mkdir建立目錄
1)mkdir -m 777 /home/pzm/ (在home目錄下建立pzm目錄,該目錄的許可權為777)
2)mkdir -p /home/pzm/1/ (如果/home/pzm/目錄不存在,執行此命令建立目錄,建立的結果是會同時建立pzm和1這兩個目錄)
3)mkdir /home/pzm/ 就是在/home目錄下新建pzm目錄
rmdir刪除目錄
1)rmdir /home/pzm/ (刪除/home目錄下的pzm目錄,要求pzm目錄下不能再用其他的目錄或者檔案,也就是說必須為空)
2)rmdir -p /home/pzm/1/ (刪除/home/pzm/目錄下的名字為的1目錄,如果pzm目錄下除了1這個目錄,沒有其他目錄或者檔案,那麼加上-p引數執行之後會把pzm/1這兩個目錄都刪除)
touch命令
1)touch aaa,建立一個檔案,名為aaa,如果aaa檔案存在,則更新檔案的時間
2)stat aaa 可以檢視檔案的相關資訊
cp複製檔案或者目錄
1)cp /home/test.txt /home/pzm/ (就是將/home/test.txt這個檔案拷貝到/home/pzm/這個目錄)
2)cp -R /home/pzm/ /home/1/ (就是將/home/pzm/這個目錄以及這個目錄下的所有目錄和檔案統統拷貝到/home/1/這個目錄下)
3)cp -i /home/pzm/ /home/1/ (如果命令2已經執行過了,也就是說/home/1/目錄下有和/home/pzm/目錄下相同的目錄或者檔案,那麼再加-i引數執行拷貝操作時會提示使用者是否進行覆蓋操作,輸入y回車則執行覆蓋操作,輸入n回車則不執行覆蓋操作)
4)cp -f /home/pzm/ /home/1/ (不提示使用者直接進行覆蓋)
mv移動或更名現有的檔案或目錄
1)mv /home/test.txt /home/pzm/ (將/home/目錄下的test.txt檔案剪下到/home/pzm/目錄下)
2)mv -i /home/test.txt /home/pzm/ (如果在/home/pzm目錄下已經有了test.txt這個檔案,那麼執行此操作將會提醒使用者是否覆蓋)
3)mv -f /home/test.txt /home/pzm/ (不提醒使用者直接進行覆蓋)
rm刪除檔案或者目錄,在使用rm這個命令的時候,一定要指定目錄或者檔案,避免誤刪除
1)rm /home/test.txt (刪除/home/目錄下的test.txt這個檔案)
2)rm -i /home/test.txt (刪除檔案之前提示使用者)
3)rm -r /home/pzm/ (刪除/home/pzm/目錄下的所有檔案和目錄)
4)rm -f /home/test.txt (不提示使用者直接強行刪除檔案或者目錄)
5)rm -rf /home/pzm/ (強行刪除/home/pzm/這個目錄以及這個目錄下的所有目錄和檔案,不提示使用者)
6)rm -rf * (建議不要使用這個命令)
7)在使用rm、mv命令的時候,一定要注意,在需要刪除或剪下目錄的時候,不在進到刪除或剪下的目錄中再去執行操作
more、less命令
1)more 檔名,或 less 檔名
2)more只能翻頁顯示,而less可以使用上下鍵逐行翻看檔案內容
3)使用more或者less檢視檔案內容的時候,按q退出
head檢視一個檔案的前幾行內容,預設是檢視前十行
1)head test.txt (檢視此檔案的前十行內容)
2)head -n 5 test.txt (檢視此檔案的前五行內容,通過-n引數設定具體檢視的行數)
tail檢視一個檔案的最後幾行內容,預設是十行
1)tail test.txt (檢視此檔案的最後十行內容)
2)tail -n 5 test.txt (檢視此檔案的最後五行內容,通過-n引數設定具體檢視的行數)
3)tail -f test.txt (一般是用來檢視日誌檔案,如果檔案內容有更新,則會同步顯示出來)
alias檢視命令的別名,unalias撤銷別名,別名在~/.bashrc檔案中修改
hostname
1)hostname檢視主機名
2)hostname pzm,修改主機名為pzm,永久修改需要改/etc/sysconfig/network這個配置檔案
id
1)id,顯示使用者資訊
2)id -u 顯示使用者ID號
3)id -g 顯示組ID號
date
1)date顯示詳細的日期資訊
2)date +%d%m%y 顯示日期、月份、年份
13、find查詢命令
1)find / -name test.txt (在根目錄/下開始以名字的方式查詢test.txt這個檔案,格式就是find + 路徑 + 選項 + 檔名)
2)find / -type d -name 1 (在根目錄/下查詢名字為1的目錄)
3)slocate、locate也可以查詢檔案,但是是從slocate.db資料庫中來查詢,需要使用updatedb命令之後再使用
14、adduser 新增使用者
1)adduser pzm (新增名字為pzm的使用者)
2)passwd pzm(修改pzm賬戶的密碼,否則不能登入)
3)su - pzm (徹底切換到pzm使用者,-是徹底切換)
4)/etc/login.defs (建立使用者的預設屬性在這個檔案中設定)
5)usermod -G root.bin pzm (把pzm使用者新增到root、bin組中)
新增完使用者可以檢視/etc/passwd檔案,看使用者是否新增成功
15、userdel刪除使用者
1)userdel pzm (刪除名字為pzm的使用者)
2)userdel -r pzm (刪除pzm使用者,且刪除pzm使用者的主目錄及相關資訊)
passwd修改賬戶密碼
1)passwd (修改當前使用者的密碼)
2)passwd pzm (root賬戶具有修改任何賬戶密碼的功能,如果當前以root賬戶執行,執行此命令可以修改pzm賬戶的密碼)
su切換使用者
1)su pzm(切換到pzm賬戶執行)
2)exit(退出su切換到的賬戶)
使用非root賬戶登入Linux的方式和使用root賬戶的方式一樣,只是在登入系統的時候選擇其他使用者即可
16、ps靜態方式檢視程序
1)ps -ef (顯示所有的程序)
17、top 動態方式檢視程序
1)top (動態方式檢視當前所有的程序,包括cpu和記憶體的資訊)
18、chmod 更改檔案的許可權
1)chmod 777 test.txt (修改test.txt的檔案許可權為777,格式是chmod + 具體需要設定的許可權 + 檔案或者目錄名字)
2) chmod +x test (給test這個檔案新增可執行許可權)
3)u表示檔案的擁有者,g表示檔案的擁有組,o表示檔案的其他使用者,比如說或要給檔案的其他使用者新增可寫的許可權,可以使用命令:chmod o+w test,如果要給檔案的當前使用者組去掉可執行的許可權,可以使用命令:chmod g-x test
19、tar壓縮解壓命令
1)tar -cvf test.tar ./ (將當前目錄的所有檔案和目錄打包成test.tar,格式為 tar + (選項,例如 -cvf) + 打包的檔名 + 要打包的目錄或者檔案)
2)tar -xvf test.tar (將test.tar包解壓到當前目錄,格式為 tar + (選項,例如 -xvf) + 打包的檔名)
3)tar -xvf test.tar -C ./1/ (將test.tar包解壓到指定目錄,格式為 tar + (選項,例如 -xvf) + 打包的檔名 + (-C)+ 指定的目錄)
4)tar -zxvf apach-tomcat-6.0.16.tar.gz (解壓縮gz包需要使用-z選項)
5)tar -zcvf test.tar.gz ./(把當前目錄的所有內容打包並壓縮為為test.tar.gz包)
6)tar -jcvf test.tar.bz2 ./(把當前目錄的所有內容打包並壓縮為為test.tar.bz2包)
7) tar -jxvf test.tar.bz2 (解壓縮bz2包需要使用-j選項)
8)tar -tvf test.tar (檢視包內容)
20、輸出重定向
1)> 例子:ls > ls.txt (把ls查出來的結果全部寫入到ls.txt這個檔案裡面,如果這個檔案不存在,會自動建立,效果就是,每次都會把指定的檔案內容清空,再重新寫入新的內容)
2)>> 例子:ll >> ll.txt (把ll查出來的結果全部寫入到ll.txt這個檔案中,同>的區別是,它不是覆蓋寫,而是追加寫,在指定檔案的內容結尾追加寫)
21、輸入重定向
1)cat < ll.txt (將ll.txt這個檔案的內容作為cat的輸入)
2)輸入重定向一般後面都是跟檔案
22、管道:| 將管道前面命令的輸出作為管道後面命令的輸入
1)ps -ef | grep bash (將ps -ef 這個命令的結果作為grep命令的輸入)
23、vi編輯器
1)vi config.txt (使用vi編輯器檢視修改config.txt檔案,如果此檔案不存在則會建立一個該名字命名的檔案)
2)進入vi編輯器之後,按a或者i進入編輯模式,編輯完成後按esc鍵推出編輯模式
3)如果未修改過config.txt檔案,則直接輸入:q可以退出vi編輯器
4)如果修改過config.txt檔案,則輸入:wq儲存修改並退出,也可以輸入:q!不儲存修改並退出
5)在命令模式下,連按兩下g回到檔案的第一行,按大寫的G(shift+g)回到檔案的結尾
6)在命令模式下,輸入/+指定的字元,比如/q,就是在當前檔案中查詢q這個字元,按小寫的n是往下查詢下一個匹配的字元或者字串,按大寫的N是往上查詢下一個匹配的字元或者字串,輸入?q,則是從下往上查詢包含q關鍵字的內容
7)在命令模式下,輸入:set nu對當前文字中的行設定行號
8)在命令模式下,輸入dd可以刪除游標所在的行
9)直接輸入vi命令,後面不跟檔名,在儲存退出的時候:wq後面加檔名,即可儲存為指定檔名的檔案
10)設定高亮,命令模式下輸入:set hlsearch
11)取消高亮,命令模式下輸入:set nohlsearch
12)vi無法輸入中文的情況下,在vi命令列模式輸入:set encoding=gb2312
13)命令模式下,按u撤銷上一次修改,按ctrl+r繼續上一次撤銷的修改
14)命令模式下,x刪除一個字元
15)yy複製一行,p貼上
16):w aaa 將當前檔案內容存到aaa這個檔案中
17):e! 去掉所有修改,恢復檔案到最開始的狀態
18):% s/abc/123/g,將文字中所有的abc字串換成123
24、wc文字統計命令
1)cat test.txt | wc -l (將cat test.txt的內容通過管道作為wc命令的輸入,-l是統計行數)
2)cat test.txt | wc -c (統計字元數)
3)cat test.txt | wc -w (統計單詞數)
4)wc test.txt (分別統計test.txt這個檔案的行數、單詞數、字元數,並在輸出的結果最後顯示當前的檔名)
5)wc -l test.txt (可以在wc後面跟對應的選項-l -w -c顯示檔案中的行數、單詞數、字元數)
25、grep搜尋命令
1)cat test.txt | grep test (將cat test.txt的結果通過管道作為grep命令的輸入並且搜尋test字串,如果搜尋到則顯示到螢幕,區分大小寫)
2)cat test.txt | grep -c test(通過-c選項統計包含test字串的行數,也就是說一共有多少行包含test字串)
3)cat test.txt | grep -v test (通過-v選項將所有不包含test字串的行顯示到螢幕)
4)cat test.txt | grep -i Test (通過-i選項搜尋時不區別大小寫)
5)grep test test.txt (不通過管道進行查詢,在test.txt檔案中查詢所有包含test字串的行並顯示)
6)grep -l test test.txt (通過-l選項,如果在test.txt檔案中查詢到test字串則只顯示當前的檔名,否則什麼也不顯示)
7)grep test *在當前目錄下所有的檔案中查詢包含test關鍵字的行,並且把內容打印出來
8)grep -R test /etc/ 在etc目錄下查詢所有包含test關鍵詞的檔案
9)grep -A2 -B3 test test.txt在test.txt中查詢包含test關鍵字並將這一行的前3行和後兩行打印出來
26、awk文字處理工具
1)awk '/test/' test.txt查詢test.txt檔案中包含test關鍵字的行病列印,區分大小寫
2)awk '{print $1}' test.txt預設以空格作為分隔符去匹配test.txt中的每一行,並對每一行中的內容以空格作為間隔,$1取第一個空格前的字串,$2取第二個空格前的字串,依次類推,最後將每一行匹配出來的內容打印出來
3)awk -F ":" '{print $1}' test.txt以:作為分隔符
4)awk '$1==test {print $2}' test.txt 以空格作為間隔,如果第一段為test的時候,把第二段打印出來
ifconfig
1)ifconfig,檢視網絡卡資訊
2)ifconfig eth0 192.168.1.1 修改eth0網絡卡的IP地址
3)永久修改IP地址需要改這個配置檔案/etc/sysconfig/network-scripts/ifcfg-eth0
4)netconfig+service network restart也可以永久修改網路資訊
mount
1)mount 顯示所有掛載的點
2)mount /dev/sda1 /mnt 把/dev/sda1分割槽掛載到/mnt目錄上
3)umount /mnt 解除安裝/mnt掛載點
cut
1)cut -d: -f7 /etc/passwd 以:作為分隔符,取第七段並顯示
sort
1)sort -t: +2 -n /etc/passwd 以:作為分隔符,對第三部分按照數字進行排序輸出
2)du | sort -n 把du輸出結果的第一列按照數字進行排序輸出
3)sort -r 反向排序
top
1)top 檢視系統資源和程序資訊
2)在top命令中按k鍵,再輸入程序的PID,選擇輸入9或者15號訊號,可以結束程序
3)在top命令中按?,可以檢視幫助
4)在top命令中按M,按照記憶體排序
env檢視所有的環境變數資訊
set檢視所有的變數資訊
sed流編輯器
1)sed -e 's/root/pzm/g' /etc/passwd 將/etc/passwd中的檔案內容中的root字串替換為pzm並列印到螢幕上,但是檔案內容並未修改
2)sed -n -e '/pzm/p' /etc/passwd 將/etc/passwd中包含pzm字串的行打印出來
3)sed -e '/^#/d' /etc/squid/squid.conf 將這個檔案中以#開頭的內容刪除不打印出來
4)info sed 檢視sed的幫助
27、``反向引號的作用
1)grep `id -un` /etc/passwd 這行命令的作用是,先執行反向引號中的命令id -un,將id -un執行的結果作為grep的輸入,那麼這行命令等同於如下兩行命令:
id -un (假設這行命令的輸出結果是root)
grep root /etc/passwd
28、free -m
檢視記憶體資訊
29、gcc -o 可執行程式檔名(可任意取,不要和目錄重名即可) *.c(要編譯的c程式碼)
gcc是用來編譯C程式的,c程式當然是以.c作為字尾的
-o 生成可執行檔案,不加此引數只對程式碼做編譯,不會生成可執行檔案
30、執行shell指令碼:
1、編寫指令碼,在指令碼之前需要加上#!/bin/bash,表面當前的shell版本
2、給該指令碼賦予可執行許可權
3、sh *.sh 或者 ./*.sh執行該指令碼
31、修改終端提示符:
export PS1="[\t \w \u \h]"
\t 顯示時間
\w 顯示當前的目錄
\u 顯示當前的使用者名稱
\h 顯示當前的主機名
32、整數運算子expr
1)expr 1 + 1 (計算結果為2,注意+號左右兩邊必須要有空格)
2)expr $count + 1 (使count變數的值+1)
3)expr $count \* 10 (乘號需要加反斜槓轉義)
4)expr $count / 10 (將count變數的值除以10)
5)count=`expr $count + 1` (將count變數的值+1之後再賦值給count變數,運算表示式需要使用反向引號括起來)
6)=號左右兩邊不能有空格,運算子左右兩邊要加空格
7)給變數賦值不需要加$
33、test測試運算子
1)test -e test.txt (判斷當前目錄下是否存在test.txt這個檔案,該語句的執行結果儲存在$?變數中,如果$?結果值為0則表示這個檔案存在,如果$?結果值為非0則表示這個檔案不存在)
2)test -d log (判斷當前目錄下是否存在log這個目錄)
3)(定義兩個字串,判斷著兩個字串是否相等)
str1=abc
str2=cdf
test $str1 = $str2
test $str1 != $str2
4)整數判斷,判斷相等使用-eq 判斷不等使用-ne 判斷大於使用-gt 判斷大於等於使用-ge 判斷小於使用-lt 判斷小於等於-le
num1=10
num2=20
test $num1 -eq $num2
34、if程式
#!/bin/bash
#$#是指在執行此指令碼時傳入的引數的個數
#先判斷執行指令碼時傳入的引數是否不等於2
#如果條件成立則列印錯誤提示使用者,否則進入elif判斷語句
if test $# -ne 2
then echo Error: two args required
#判斷使用者在執行指令碼輸入的第二個引數是否不是檔案,-f是判斷是否為檔案的選項,!是取反的意思
elif [ ! -f $2 ]
then echo "Sorry: $2 is not a file! "
#使用者輸入的兩個引數分別儲存在$1 $2中,在本例執行grep語句就是為了在$2對應的檔案中查詢$1對應的字串,並把輸入結果重定向到/dev/null裝置中,目的是為了不在螢幕列印結果,而整個語句的執行結果作為elif的判斷條件,如果執行成功返回0,列印Find,否則返回非0,列印None
elif grep -s $1 $2 > /dev/null
then echo Find
else echo None
fi
if後面需要加空格,[]前後都需要加空格
else中不需要加then
一定要寫fi作為結束
35、case程式
#!/bin/bash
#呼叫date命令,後面加上+%H是為了輸出當前的小時為多少,通過反向引號把得到的結果儲存在hour變數中
hour=`date +%H`
#將hour和後面的條件做判斷,如果相等則執行後面的語句
case $hour in
#通過正則表示式判斷當前的hour是否為01~11,如果是則列印早上好
0[1-9]|1[01])echo "Good morning!";;
#通過正則表示式判斷當前的hour是否為12~17,如果是則列印下午好
1[2-7]) echo "Good afternoon!";;
#*)為default分支,也就是說,如果以上條件都不滿足的話則進到default分支,列印晚上好
*) echo "Good evening!";;
esac
每一個分支可以有多條語句,但是需要單獨一行,且每個分支必須以;;作為結束
36、for迴圈程式
1)var作為迴圈變數,從1 2 3中分別取值,在do done中填寫具體的迴圈程式碼,對於這個程式來說,var會分別賦值為1 2 3,迴圈會執行三次,分別列印var三次迴圈的值
for var in 1 2 3
do
echo $var
done
2)注意,這種方式需要兩個小括號括起來,同上面第一種方式類似,此迴圈迴圈5次,i分別取值為0 1 2 3 4
for((i=0;i<5;i++))
do
echo $i
done
3)$*是指我們在執行指令碼的時候傳入的引數列表,然後執行for迴圈,var變數分別從$*引數列表中取值
for var in $*
do
echo $var
done
37、while迴圈程式
#!/bin/bash
#定義個變數,名為num,賦值為0
num=0
#while迴圈的判斷條件是num的值小於10,否則則退出while迴圈
while [ $num -lt 10 ]
do
#列印num當前的值,-n是指在執行echo的時候不換行
echo -n "$num "
#通過反向引號包含一句整數運算表示式,目的是使num值加1
num=`expr $num + 1`
done
#列印資訊
echo
echo "Loop exit."
38、read命令
1)執行指令碼後,輸入一行字串按回車確認,輸入的字串會儲存在變數str中,最後打印出來的結果和使用者輸入的結果一致
#!/bin/bash
read str
echo $str
2)執行指令碼後,從標準輸出中讀取三個字串分別賦值給str1 str2 str3,輸入以空格為間隔,回車為結束,最後列印著三個變數
#!/bin/bash
read str1 str2 str3
echo $str1
echo $str2
echo $str3
39、製作選單程式示例
#!/bin/bash
#清屏
clear
#通過true在設定while迴圈的條件一直為真,除非在迴圈體中根據不同的條件選擇退出,可以通過break(退出迴圈,繼續執行迴圈後面的語句),或者exit(退出當前指令碼,不再執行指令碼後面的語句)
while true
do
echo "1, Display date"
echo "2, Display the number of online users "
echo "3, Exit"
#-e引數是為了保證在後面輸出的字串中可以使用轉義\,\c是指當前輸出內容之後不換行
echo -e "Please enter a choice(1, 2 or 3):\c"
#read命令是指從標準輸入擷取內容賦值給變數no
read no
case ${no} in
#呼叫date列印日期,格式安裝年月日的格式輸出
1) date "+%Y/%m/%d";;
#通過who命令檢視當前線上的使用者,通過wc -l來查詢who輸出的結果又幾行,也就是說當前線上有幾個使用者
2) who |wc -l;;
#退出指令碼
3) exit;;
esac
#程式執行到這裡之後,根據sleep後面的數字休眠對應的秒數
sleep 3
clear
done
40、批量建立使用者
#!/bin/bash
echo -e "Input first part of username:\c"
read name
echo -e "Input start number:\c"
read startno
count=$startno
echo -e "Input end number:\c"
read endno
#如果startno變數的值小於等於endno變數的值,那麼就執行迴圈體中的語句
while [ $startno -le $endno ]
do
#在做字串拼接的時候一定要使用${}這種方式來引用變數
#我們強調以後所有的變數儘量都採用這種方式,避免出錯
usernames="${name}${startno}"
echo " add user " $usernames
#可以直接呼叫useradd命令,一般不需要在前面加具體的絕對路徑
#useradd命令的-p引數是指給建立的這個使用者新增密碼
/usr/sbin/useradd -p zyMnbK31XVV7Y "$usernames"
startno=` expr $startno + 1 `
done
count=` expr $endno - $count + 1 `
echo "$count Done! "
41、rpm軟體安裝命令
1)rpm -ivh abc.rpm (安裝rpm軟體包,-ivh為安裝使用的選項,兩種方式,一種是使用絕對路徑,那麼你在任何地方都可以安裝這個rpm包,一種是使用相對路徑,進到rpm包所在的目錄,直接使用rpm檔名就OK)
2)rpm -e abc (解除安裝rpm軟體包,-e是解除安裝使用的選項)
42、對於for、while、if的判斷條件都可以採用類似於C語言的寫法
while((i==0))
if((i==0))
for((i=0;i<10;i+=))