首页 > 代码库 > 老男孩老師課程學習筆記----第一階段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命令行總結