1. 程式人生 > 實用技巧 >Linux基礎-1

Linux基礎-1

Linux基礎-1

Linux基本原則

  • 由目的單一的小程式組成,組合小程式完成複雜任務;
  • 一切皆檔案;
  • 儘量避免捕獲使用者介面;
  • 配置檔案儲存為純文字格式。

bash

bash是一個命令處理器,通常運行於文字視窗中,並能執行使用者直接輸入的命令。

[root@localhost ~]# echo $SHELL				// 當前使用的SHELL
/bin/bash
[root@localhost ~]# cat /etc/shells 		// 能夠使用的SHELL
/bin/sh
/bin/bash
/usr/bin/sh
/usr/bin/bash

bash支援以下特性:

  • 支援命令歷史、命令補全、目錄補全
  • 支援管道、重定向
  • 支援命令別名
  • 支援命令列編輯
  • 支援命令列展開
  • 支援檔名通配
  • 支援變數
  • 支援程式設計

bash支援的引號

``      //反引號,鍵盤左上角Esc下面的鍵,用於命令替換
""      //雙引號,弱引用,可以實現變數替換
''      //單引號,強引用,不完成變數替換
[root@localhost ~]# echo 'a'
a
[root@localhost ~]# echo "a"
a
[root@localhost ~]# echo a
a
[root@localhost ~]# a=1
[root@localhost ~]# echo $a
1
[root@localhost ~]# echo '$a'			//強引用
$a
[root@localhost ~]# echo "$a"			//弱引用
1
[root@localhost ~]# echo "a"b"
> ^C
[root@localhost ~]# echo "a\"b"			//加了轉義符"\"後,可識別
a"b
[root@localhost ~]# echo 'a'b'			
> ^C
[root@localhost ~]# echo 'a\'b'			//單引號加了轉義符"\"後也無法識別
> ^C
[root@localhost ~]# ls `mkdir {1..10}`		//反引號可以先執行命令在將結果賦予變數
1  10  2  3  4  5  6  7  8  9

bash常用操作

游標跳轉

 	Ctrl+a      //跳到命令列首
 	Ctrl+<-		//跳到離游標左邊最近單詞前面
    Ctrl+e      //跳到命令列尾
    Ctrl+-> 	//跳到離游標右邊最近的一個單詞前面
    Ctrl+w 		//刪除游標前一個字串
    Ctrl+u      //刪除游標至命令列首的內容
    Ctrl+k      //刪除游標至命令列尾的內容
    Ctrl+l      //清屏

命令歷史

history //預設只記錄1000條
[root@localhost ~]# history 
  1  echo $SHELL
  2  cat /etc/shells 
  3  history 
-d //刪除指定位置的命令歷史
[root@localhost ~]# history -d 1
  1  cat /etc/shells
  2  history  
-c //清空命令歷史
[root@localhost ~]# history -c
  1  history 

命令歷史的使用技巧

!n //執行命令歷史中的第n條命令
[root@localhost ~]# !3					// 執行第三條歷史命令
  1  echo $SHELL
  2  cat /etc/shells 
  3  history 
!-n //執行命令歷史中倒數第n條命令
[root@localhost ~]# !-1					// 執行倒數第一條歷史命令
  1  echo $SHELL
  2  cat /etc/shells 
  3  history 
!! //執行上一條命令
[root@localhost ~]# !!
  1  echo $SHELL
  2  cat /etc/shells 
  3  history
!string //執行命令歷史中最近一個以指定字串開頭的命令
[root@localhost ~]# !hi
history
  1  echo $SHELL
  2  cat /etc/shells 
  3  history
!$ //引用前一個命令的最後一個引數
[root@localhost ~]# !$
history
  1  echo $SHELL
  2  cat /etc/shells 
  3  history
esc+. //按下esc鬆開後按"."(英文的.)引用前一個命令的最後一個引數

命令、目錄補全

搜尋PATH環境變數所指定的每個路徑下以我們給出的字串開頭的可執行檔案,如果多於一個,兩次tab,可以給出列表,否則將直接補全。

[root@localhost ~]# h
halt         hdparm       hexdump      hostname     
hardlink     head         history      hostnamectl  
hash         help         hostid       hwclock    
[root@localhost ~]# cd /etc/sys
sysconfig/          sysctl.d/           system-release
sysctl.conf         systemd/            system-release-cpe

命令別名

[root@localhost ~]# cdnet
-bash: cdnet: command not found
[root@localhost ~]# alias cdnet='cd /etc/sysconfig/network-scripts/'
[root@localhost ~]# cdnet
[root@localhost network-scripts]# pwd
/etc/sysconfig/network-scripts

檔名通配

“*” //匹配任意長度的任意字元

[root@localhost ~]# ls
1    14  2   25  30  36  41  47  52  58  63  69  74  8   85  90  96
10   15  20  26  31  37  42  48  53  59  64  7   75  80  86  91  97
100  16  21  27  32  38  43  49  54  6   65  70  76  81  87  92  98
11   17  22  28  33  39  44  5   55  60  66  71  77  82  88  93  99
12   18  23  29  34  4   45  50  56  61  67  72  78  83  89  94
13   19  24  3   35  40  46  51  57  62  68  73  79  84  9   95
[root@localhost ~]# rm -rf *
[root@localhost ~]# ls

“?” //匹配任意單個字元

[root@localhost ~]# touch {1..100}
[root@localhost ~]# ls
1    14  2   25  30  36  41  47  52  58  63  69  74  8   85  90  96
10   15  20  26  31  37  42  48  53  59  64  7   75  80  86  91  97
100  16  21  27  32  38  43  49  54  6   65  70  76  81  87  92  98
11   17  22  28  33  39  44  5   55  60  66  71  77  82  88  93  99
12   18  23  29  34  4   45  50  56  61  67  72  78  83  89  94
13   19  24  3   35  40  46  51  57  62  68  73  79  84  9   95
[root@localhost ~]# ls ?
1  2  3  4  5  6  7  8  9
[root@localhost ~]# ls ??
10  15  20  25  30  35  40  45  50  55  60  65  70  75  80  85  90  95
11  16  21  26  31  36  41  46  51  56  61  66  71  76  81  86  91  96
12  17  22  27  32  37  42  47  52  57  62  67  72  77  82  87  92  97
13  18  23  28  33  38  43  48  53  58  63  68  73  78  83  88  93  98
14  19  24  29  34  39  44  49  54  59  64  69  74  79  84  89  94  99
[root@localhost ~]# ls ???
100

[] //匹配指定範圍內的任意單個字元

 [abc],[a-m],[0-9]
        [[:space:]]    //表示空白字元
        [[:punct:]]    //表示標點符號
        [[:lower:]]    //表示小寫字母
        [[:upper:]]    //表示大寫字母
        [[:alpha:]]    //表示大小寫字母
        [[:digit:]]    //表示數字
        [[:alnum:]]    //表示數字和大小寫字母
[root@localhost ~]# ls
1    14  2   25  30  36  41  47  52  58  63  69  74  8   85  90  96
10   15  20  26  31  37  42  48  53  59  64  7   75  80  86  91  97
100  16  21  27  32  38  43  49  54  6   65  70  76  81  87  92  98
11   17  22  28  33  39  44  5   55  60  66  71  77  82  88  93  99
12   18  23  29  34  4   45  50  56  61  67  72  78  83  89  94
13   19  24  3   35  40  46  51  57  62  68  73  79  84  9   95
[root@localhost ~]# ls [158]
1  5  8
[root@localhost ~]# ls [1-8]
1  2  3  4  5  6  7  8
[root@localhost ~]# ls [1-9][0-9]				//看10-99的檔案
10  15  20  25  30  35  40  45  50  55  60  65  70  75  80  85  90  95
11  16  21  26  31  36  41  46  51  56  61  66  71  76  81  86  91  96
12  17  22  27  32  37  42  47  52  57  62  67  72  77  82  87  92  97
13  18  23  28  33  38  43  48  53  58  63  68  73  78  83  88  93  98
14  19  24  29  34  39  44  49  54  59  64  69  74  79  84  89  94  99
[root@localhost ~]# ls [[:digit:]]
1  2  3  4  5  6  7  8  9

[^] //匹配指定範圍之外的任意單個字元

[root@localhost ~]# ls [^1-3]					//看除了1-3以外的檔案
4  5  6  7  8  9

環境變數

PATH //命令搜尋路徑

[root@localhost ~]# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
[root@localhost ~]# PATH=
[root@localhost ~]# echo $PATH

[root@localhost ~]# ls
-bash: ls: No such file or directory			//PATH為空後很多命令就用不了了
[root@localhost ~]# mkdir a
-bash: mkdir: No such file or directory
[root@localhost ~]# touch a
-bash: touch: No such file or directory

HISTSIZE //命令歷史緩衝區大小

[root@localhost ~]# echo $HISTSIZE				//預設是顯示1000條
1000

bash內建變數

RANDOM //儲存著0-32768之間的隨機數

[root@localhost ~]# echo $RANDOM
10685
[root@localhost ~]# echo $RANDOM
27424
[root@localhost ~]# echo $RANDOM
9735
[root@localhost ~]# echo $RANDOM
16552
[root@localhost ~]# echo $RANDOM
1271

命令型別

Linux命令分為兩種型別:

  • 內部命令(shell內建)
  • 外部命令:在檔案系統的某個路徑下有一個與命令名稱相應的可執行檔案
type //顯示指定命令屬於哪種型別
[root@localhost ~]# type cd
cd is a shell builtin
[root@localhost ~]# type ls
ls is aliased to `ls --color=auto'