首页 > 代码库 > 老男孩老師課程學習筆記----第一階段Linux命令行總結
老男孩老師課程學習筆記----第一階段Linux命令行總結
~相信自己,勤奮努力,不斷總結!~
1、mkdir make directorys 創建目錄 例子: mkdir /data 在根/下創建data目錄 -p 遞歸創建目錄
例子:
[root@oldboy /]# mkdir -p /oldboy/test/a/b/c/d (-p 遞歸創建目錄) [root@oldboy /]# tree /oldboy/(如果tree沒有,可以yum install tree -y) /oldboy/ └── test └── a └── b └── c └── d
2、ls list(列表) 列表目錄文件 例子: ls / 列根/目錄下目錄和文件
-l (long)長格式 -d 查看(directorys)目錄
3、cd change directory 改變目錄路徑 例子: cd /etc
4、pwd print work directory 打印工作目錄(顯示當前所在路徑)
5、touch 創建文件或更新文件時間戳. 如果文件不存在,就建立新文件,
如果文件存在,就改變文件的訪問時間atime等時間戳信息
6、相對路徑和絕對路徑
windows 絕對路徑:
E:\2016-oldboy 從頭(盤符)開始的路徑
linux絕對路徑: cat /etc/sysconfig/network-scripts/ifcfg-eth0,從根/開始的目錄
相對路徑:不從根/開始,也不從頭(根/)開始的路徑。
例如:
[root@oldboy /]# ls bin data etc lib lost+found mnt opt root selinux sys usr boot dev home lib64 media oldboy proc sbin srv tmp var [root@oldboy /]# cd oldboy/ [root@oldboy oldboy]# ls a b c c.txt test [root@oldboy oldboy]# cd test ----> 相對路徑進去test資料夾 [root@oldboy test]# cd / [root@oldboy /]# cd /oldboy/test/ ---->絕對路徑進去test資料夾 [root@oldboy test]#
7、vi (相當windows的記事本)編輯方法如下: 例子:vi oldboy.txt
執行oldboy.txt 進入vi編輯器(默認命令模式),點擊a或i(insert)進入編輯模式,敲打內容,
然後按鍵盤上的esc鍵退出編輯模式(在進入命令模式),最後敲打:wq保存並退出。wq解釋為wirte quit
8、vim比較複雜的編輯器 功能複雜,高亮,自動縮進(寫shell/python可用)
9、echo 是一個打印輸出內容的一個常用命令,配合">或>>"可以為文件覆蓋或追加內容,這個命令可要掌握!!還有一個類似較複雜且不常用的命令printf
">"意思是重定向,會清除文見裡面所有以前的數據.
">>"為內容追加,只有在文件尾部追加需要的內容
10、cat 查看文件內容 例子:cat oldboy.txt
11、xargs 從標準輸入獲取內容創建和執行命令行 -n (加數字-->分組)
例子:
[root@oldboy data]# echo 1 2 3 4 5 6 7 8 9 > oldboy.txt [root@oldboy data]# xargs -n 2 < oldboy.txt 1 2 3 4 5 6 7 8 9 [root@oldboy data]# xargs -n 3 < oldboy.txt 1 2 3 4 5 6 7 8 9
多行文本追加:(使用cat) 也可以用cat新增文件(如果文件本來不存在) cat > oldboy.txt 然後輸入內容,回車,ctrl-c 便可新增文件。
例子:
[root@oldboy test]# cat >>/data/oldboy.txt<<EOF > linux > EOF [root@oldboy test]# cat /data/oldboy.txt linux [root@oldboy test]# cat >>/data/oldboy.txt<<EOF > good > EOF [root@oldboy test]# cat /data/oldboy.txt linux good
12、特殊符號:
>或1> 輸出重定向:把前面輸出的東西輸入到後邊的文件中,會清除文件原有內容 例子:echo ‘oldboy‘ >a.txt 和 echo‘oldboy‘ 1>b.txt **a.txt和b.txt內容相符
>>或1>> 追加輸出重定向:把前面輸出的東西追加到後邊的文件尾部,不會清除文件原有內容
0<或< 輸入重定向:輸入重定向用於改變命令的輸入,後面指定輸入內容,前面跟文件名
例子1:
[root@oldboy data]# echo 1 2 3 4 > oldboy.txt [root@oldboy data]# cat oldboy.txt 1 2 3 4 [root@oldboy data]# xargs -n 2 < oldboy.txt 1 2 3 4 例子2: [root@oldboy data]# tr " " "\n" < oldboy.txt 1 2 3 4
0<<或<< 追加輸入重定向:後面跟字符串,用來表達"輸入結束",也可以用ctrl+d來結束輸入
例子:
[root@oldboy ~]# cat >>/data/a.txt 0<<EOF > i am studing linux > oldboy > EOF [root@oldboy ~]# cat /data/a.txt i am studing linux oldboy
2> 錯誤重定向:把錯誤信息輸入到後邊的文件中,會刪除文件原有內容
例子1:
[root@oldboy data]# echo oldboy > a.txt [root@oldboy data]# cat a.txt oldboy [root@oldboy data]# echo oldboy 1> a.txt [root@oldboy data]# cat a.txt oldboy [root@oldboy data]# echo oldgirl 1> a.txt 2>b.txt [root@oldboy data]# cat a.txt oldgirl [root@oldboy data]# cat b.txt [root@oldboy data]# eho oldgirl 1> a.txt 2>b.txt //這邊是錯誤ㄉ部分 [root@oldboy data]# cat b.txt -bash: eho: command not found
**在工作中,時常會把正確和錯誤的資訊都放在一起,該如何實現?
答案(1): 推薦使用
[root@oldboy data]# echo oldgirl 1>a.txt 2>&1 [root@oldboy data]# cat a.txt oldgirl [root@oldboy data]# eho oldgirl 1>a.txt 2>&1 //(2>&1 寫法是把標準錯誤重定向到標準輸出,即讓錯誤的輸出和正確的一樣,正確的定向到哪,錯誤就到哪)
[root@oldboy data]# cat a.txt -bash: eho: command not found
答案(2):
[root@oldboy data]# echo hello &>a.txt [root@oldboy data]# cat a.txt hello [root@oldboy data]# eco hello &>a.txt // (&>意思是正確和錯誤都放在一起) [root@oldboy data]# cat a.txt -bash: eco: command not found
2>> 錯誤追加重定向:把錯誤信息追加到後邊的文件中,不會刪除文件原有的內容
例子:
接續上面答案(2)
[root@oldboy data]# echo test &>>a.txt [root@oldboy data]# cat a.txt -bash: eco: command not found test
說明:
1、箭頭的指向就是數據的流向
2、數字說明:
(1)標準輸入(stdin):代碼為0,使用<或<<。數據流向從右到左。
(2)標準正常輸出(stdout):代碼為1,使用>或>>。數據流向從左向右。
(3)標準錯誤輸出(stderr):代碼為2,使用2>或2>>。
(4)2>&1標準正常輸出和標準錯誤輸出一樣,相當於跟屁蟲,1放到哪,2就到哪
例子:echo ‘oldboy‘ >a.txt 2>&1
13、cpcopy拷貝文件或目錄,默認不能拷目錄
-r遞歸拷貝,用於複製目錄
-a 相當於-pdr
-p連同檔案屬性一起複製過去,而非使用默認屬性(例如:使用權限保持不變)
-d若源文件為鏈接文件(link file),則複製鏈接文件屬性而非檔案本身(
-f強制
14、mvmove移動文件或目錄
**提示: 如果希望帶目錄拷貝,盡量不要mv/data/ /root/ , 移動目錄時,源目錄結尾不要多餘的斜線。雖然此處是可以的,但盡量保持好習慣
例子:
[root@oldboy /]# mv /data /root/ [root@oldboy /]# ls bin dev home lib64 media opt root selinux sys usr boot etc lib lost+found mnt proc sbin srv tmp var [root@oldboy /]# ls /root/ anaconda-ks.cfg a.txt b.txt data install.log install.log.syslog
15、find 查找 (企業面試常常會考!!*****)
-type文件類型(f(file),d(directory),c(character),b(block),s(socket),l(link)),
-name"文件名"
-mtime 時間 按文件修改時間查找,時間數字分三種 (1)+7 -->表示7天以前 (2)7 -->表示第七天 (3)-7 -->表示最近7天
!取反 , -a and 交集(並且) -o or並集(或者)
例子(1):合併於16例子說明
例子(2):(**在腳本中刪除文件或目錄時生產環境的使用方式**)
[root@oldboy data]# find /data -type f -name "*.txt" -mtime -1 /data/3.txt /data/2.txt /data/1.txt [root@oldboy data]# find /data -type f -name "*.txt" -mtime -1 | xargs rm -f (查找/data目錄,刪除第一天修改過的內容)
例子(3):
[root@oldboy data]# touch {1..10}.txt [root@oldboy data]# ls 10.txt 1.txt 2.txt 3.txt 4.txt 5.txt 6.txt 7.txt 8.txt 9.txt [root@oldboy data]# mv `find /data -type f -name "*.txt"` /tmp/ [root@oldboy data]# ls [root@oldboy data]# ls /tmp 10.txt 2.txt 4.txt 6.txt 8.txt oldboy.txt 1.txt 3.txt 5.txt 7.txt 9.txt yum.log
***企業面試題(題目:刪除一個目錄下的所有文件,但保留一個指定文件) http://oldboy.blog.51cto.com/2561410/1650380
16、rm remove刪除目錄和文件 (***強調:刪除命令要慎用,非常危險,刪除前一定要先備份一份) -f (force) 強制 -r (遞歸recursive)用於刪除目錄
例子(1):
[root@oldboy data]# rm oldboy.txt rm: remove regular file `oldboy.txt‘? y
例子(2):
[root@oldboy data]# rm -f oldboy.txt //rm -f 無法刪除目錄
例子(3):
[root@oldboy ~]# rm -rf data
**一般來說 運維人員建議利用find來刪除文件**
例子(1):
[root@oldboy /]# echo oldboy >/data/oldboy.txt [root@oldboy /]# ls /data oldboy.txt [root@oldboy /]# find /data -type f /data/oldboy.txt [root@oldboy /]# echo oldboy >/data/a.txt [root@oldboy /]# find /data -type f /data/a.txt /data/oldboy.txt [root@oldboy /]# find /data -type f -name "oldboy.txt" /data/oldboy.txt [root@oldboy /]# find /data -type f -name "oldboy.txt" -exec rm {} \; (**exec 是指 要準備對前面所出來的資訊做什麼動作--->放在exec 後邊) [root@oldboy /]# ls /data/ a.txt 例子(2): [root@oldboy /]# ls /data a.txt b.txt c.txt [root@oldboy /]# find /data -type f -name "*.txt" /data/b.txt /data/a.txt /data/c.txt [root@oldboy /]# find /data -type f -name "*.txt" |xargs rm -f (xargs的目的是要將find出來的結果 合並成一行)
17、grep(liunx三劍客之一*****)過濾需要的內容
-v 排除內容
-B(before)除了顯示匹配的一行之外,並顯示該行之前的num行
-A(after) 除了顯示匹配的一行之外,並顯示該行之後的num行
-C(context) 除了顯示匹配的一行之外,並顯示該行之前後各num行
例子:創建test.txt文件,但我不要顯示出oldboy
答案(1):(推薦)
[root@oldboy /]# cat >>test.txt<<EOF > test > liyao > oldboy > EOF [root@oldboy /]# cat test.txt test liyao oldboy [root@oldboy /]# grep -v oldboy test.txt (-v 排除) test liyao
答案(2): (沒有必要先把文件內容呈現出來再進行過濾,只是此方法比較容易理解)
[root@oldboy /]# cat test.txt | grep -v "oldboy" test liyao
例子: C.P 題目(2) grep 20 -A 10 ett.txt
18、head 頭、頭部 讀取文件的前n行,默認前10行 -n 數字 ,習慣 -數字 忽略n
19、tail 尾巴 讀取文件的後n行,默認後10行 -n 數字 ,習慣 -數字 忽略n
20、alias 別名 查看和設置別名 例子:查看別名直接查看別名即可
作用:
(1)給危險命令加一些保護參數,防止人為誤操作。
例子:
[root@oldboy /]# alias rm=‘echo this command does not allow to use‘ [root@oldboy /]# rm this command does not allow to use
(2)把很多複雜的字符串或命令變成一個簡單的字符串或命令。
例子:
[root@oldboy /]# alias net=‘cat /etc/sysconfig/network-scripts/ifcfg-eth0 [root@oldboy /]# net DEVICE=eth0 HWADDR=00:0c:29:fe:c6:a9 TYPE=Ethernet UUID=a414c6d9-f88d-4f92-ac02-322bea0dfb6d ONBOOT=yes NM_CONTROLLED=yes BOOTPROTO=dhcp USERCTL=no PEERDNS=yes IPV6INIT=no
**若想要定義別名永久生效: 要放在這些地方
/etc/profile 全局生效
~/.bashrc 當前用戶生效
C.P :(centos linux 因別名問題引起的麻煩及解決技巧) http://oldboy.blog.51cto.com/2561410/699046
21、unalias 取消別名
22、seq sequence 序列
23、sed stream editor linux三劍客老二 流編輯器,實現對文件的增刪改替檢查
參數 -n 取消默認輸出 (我要什麼 就打印什麼) , -i 修改內容 , -e 允許多項編輯 -s 指定分隔符
p 打印 例子:sed -n ‘20,30‘p ett.txt
功能:
g-->與s聯合使用時,表示對當前行全局匹配替換;s-->常說的查找並替換,用一個字符串替換成另一個
例子:(sed 字符串替換)
[root@oldboy /]# cat oldoy.txt oldboy gongli [root@oldboy /]# sed -i ‘s#gongli#love#g‘ oldoy.txt [root@oldboy /]# cat oldoy.txt oldboy love
24、awk linux三劍客老大 過濾、輸出內容,一門語言。 NR 表示行號 例子: awk ‘19<NR && NR<31‘ ett.txt
25、useradd 添加用戶 語法:useradd 用戶名 , useradd oldboy
26、passwd 為用戶設置或修改密碼 語法:passwd 用戶名 , passwd oldboy 為oldboy修改密碼, 若直接輸入passwd 就是當前的用戶
近接用法:(非交互式更改密碼)
[root@oldboy ~]# echo "123456" | passwd --stdin oldboy Changing password for user oldboy. passwd: all authentication tokens updated successfully.
27、uname 打印系統信息 -m 32位or64位 -r 內核版本 -a 顯示所有 -n(顯示主機名)
28、hostname 顯示和設置主機名 默認是顯示主機名,設置主機名可以 hostname名子 (臨時生效)
29、runlevel 查看當前系統運行級別
30、init 切換運行級別,後面接對應級別的數字,例如:init 6 就是重啟linux的服務器)
31、shutdown(halt、init 0 ) 關機
關機 shutdown -h now shutdown -r 重啟
32、reboot (init 6) 重啟電腦
33、history 查看及清理歷史紀錄 -c清空所有 -d 刪除指定歷史紀錄
34、dmesg 命令可以系統故障信息
35、ifup和ifdown 啟動和停止網卡 ,可以接網卡名 ifup eth0
****特殊字符****:
(1)| 管道
(2).. 上一級目錄
(3). 當前目錄
(4)/ 所有目錄的頂點,也是路徑的分割符
(5)!+字母 表示調出最近一次以此字母開頭的命令
(6)!! 表示使用最近一次的操作
(7)!+數字 表示調出歷史的第幾條命令
(8)! 也有取反的意思 (find,shell編程裡面會有)
(9)~ 當前用戶的家目錄
(10)&& 並且
***題目***
(1)已知/tmp/目錄下已經存在了test.txt文件,如何執行命令才能把/mnt/test.txt拷貝到/tmp下覆蓋掉/tmp/test.txt,
而讓linux系統不提示是否覆蓋(root權限下)
答案(1):
[root@oldboy /]# \cp /mnt/test.txt /tmp/
(使用反斜線 \ 就是不使用別名)因為...
註):alias 默認下 已經有這些別名 而-i 就是確認的意思 如果要臨時取消別名: unalias cp 就可以取消別名
[root@oldboy /]# alias alias cp=‘cp -i‘ alias l.=‘ls -d .* --color=auto‘ alias ll=‘ls -l --color=auto‘ alias ls=‘ls --color=auto‘ alias mv=‘mv -i‘ alias rm=‘rm -i‘
答案(2):
[root@oldboy /]# /bin/cp /mnt/test.txt /tmp/ (使用全路徑也可以不使用別名)
答案(3):
取消別名 (重新開機後就會不見ㄌ)
[root@oldboy /]# unalias cp [root@oldboy /]# cp /mnt/test.txt /tmp/test.txt
(2)只查看ett.txt文件(100行)內第20到30行的內容 (企業常見面試題)
答案(1):
[root@oldboy /]# seq 100 > ett.txt [root@oldboy /]# head -30 ett.txt | tail -11 20 21 22 23 24 25 26 27 28 29 30
答案(2):----->最有效率的方式,要記得!
[root@oldboy /]# sed -n ‘20,30‘p ett.txt
答案(3): NR 是行號,&&意思是並且,兩邊同時成立
[root@oldboy /]# awk ‘19<NR && NR<31‘ ett.txt
答案(4):
[root@oldboy ~]# grep 20 -A 10 ett.txt
答案(5):
[root@oldboy ~]# grep 25 -C 5 ett.txt
答案(6):
[root@oldboy ~]# grep 30 -C 10 ett.txt
(3)把/oldboy目錄及其子目錄下所有以擴展明.sh結尾的文件中包含oldboy的字符串全部替換為oldgirl
答案(1):
[root@oldboy oldboy]# echo "oldboy" > test/del.sh [root@oldboy oldboy]# echo "oldboy" > test/test.sh [root@oldboy oldboy]# echo "oldboy" > test/.sh [root@oldboy oldboy]# find /oldboy -type f -name "*.sh" | xargs sed -i ‘s#oldboy#oldgirl#g‘ oldgirl oldgirl oldgirl
答案(2):
[root@oldboy oldboy]# sed -i ‘s#oldgirl#oldboy#g‘ `find /oldboy -type f -name "*.sh"` (注意這個符號` 在tab鍵上面) oldboy oldboy oldboy
Linux 特殊變量
臨時生效:
export TMOUNT=10 --->連接的超時時間控制變量 export HISTSIZE=5 --->命令行歷史紀錄數量 export HISTFILESIZE= --->命令行命令對應文件的紀錄數 ~/.bash_history
永久生效:
echo ‘export TMOUNT=300‘ >>/etc/profile echo ‘export HISTSIZE=5‘ >>/etc/proflie echo ‘export HISTFILESIZE=5‘ >>/etc/profile source /etc/profile --->(這樣可以不用重新啟動機器)
本文出自 “我的Linux之夢” 博客,请务必保留此出处http://12098022.blog.51cto.com/12088022/1945495
老男孩老師課程學習筆記----第一階段Linux命令行總結