Linux目錄結構、bash的基礎命令學習

日期: 20150823

 

Linux目錄結構

LSB(Linux StandardsBase)是一套核心標準,它保證了LINUX發行版同LINUX應用程序之間的良好結合規定了一系列標準,其中包括文件系統層級結構標準(FHS Filesystem Hierarchy Standard)

 

Linux系統根目錄下有衆多子目錄,這些目錄都參照了FHS協定

 

/

├── bin

├── boot

├── dev

├── etc

├── home

├── lib

├── lib64

├── lost+found

├── media

├── mnt

├── opt

├── proc

├── root

├── sbin

├── selinux

├── srv

├── sys

├── tmp

├── usr

└── var

 

/bin: binary供用戶使用的基本命令;OS啓動即會用到的程序

/boot:存放系統啓動相關的文件,如內核、initrd,以及grub(bootloader)

 

/dev: 存放設備文件

塊設備:隨機訪問,數據塊

字符設備:線性訪問,按字符爲單位

設備號:主設備號(major)和次設備號(minor)

 

/etc: 配置文件的存放目錄;

/etc/sysconfig:系統級別的應用配置

/etc/init.d:系統服務腳本

 

/home:用戶的家目錄,每一個用戶的家目錄通常默認爲/home/USERNAME

 

/lib: 基本共享庫;內核模塊

/lib/modules:內核模塊文件

靜態庫,  .a

動態庫, .dll, .so (shared object)

庫文件是不能單獨執行的,它因爲沒有程序的執行入口,只能被調用

/lib64: x86_64系統的庫文件

 

/Lost+Found用來存放fsck過程中部分修復的文件的

/media:掛載點目錄,通常用於掛載移動設備

/mnt:掛載點目錄,通常用於掛載額外的臨時文件系統

/opt:可選目錄,第三方程序的安裝目錄(一般不用)

/proc:僞文件系統,內核參數映射文件(用於輸出內核與進程的相關信息)

/root:管理員的家目錄;

/sbin: 管理類的基本命令

/selinux

/srv: services,系統上運行的服務用到的中間數據

/sys: 僞文件系統,輸出內核所識別的當前系統上硬件設備相關的屬性映射文件

/tmp

/usr: Universal Shared Read-onlydata 全局共享的只讀數據(可獨立分區)

/usr/bin:

/usr/sbin:

/usr/lib:

/usr/lib64:

/usr/include:(應用程序的頭文件:header files)

/usr/share:結構化的獨立數據

doc, man(應用程序的幫助文檔)

/usr/local: 現在常用的第三方程序的安裝位置

/usr/local/bin

/usr/local/sbin

/usr/local/lib

/usr/local/lib64

/usr/local/etc

/usr/local/share

/var: variable date files(存放經常需要發生變化的數據)

/var/cache: 應用程序緩存數據

/var/lib: 應用程序的狀態信息數據

/var/local: 專用於爲/usr/local下的應用程序存儲可變數據

/var/lock: 鎖文件

/var/log: 日誌文件

/var/opt: 專用於/opt

/var/spool: 應用程序的數據池

/var/run: 運行中的進程的相關數據:通常用守護進程的pid文件

 

 

Linux的文件類型:

使用ls -l 命令列出目錄內文件時,排在每行第一列的第一個字符,表示該文件的類型

[root@CentOS-6tmp]# ll /usr

total124

dr-xr-xr-x.   2 root root 36864 Aug 23 10:15 bin

 

-: 普通文件

d: 目錄文件

b: 塊設備文件

c: 字符設備文件

l: 符號鏈接文件(類似快捷方式)

p: 命名管道文件

s: 套接字文件

 

 

 

<<===================================== BASH的基礎特性】=====================================>>

bash的基礎特性(一)

 

(1)命令歷史

bash保存的過去曾經執行過的命令的列表

當前shell進程的命令歷史保存在緩衝區中;

緩衝區中的命令會在shell退出時保存至文件中用戶家目錄 .bash_history

 

history快捷方式:

!#: #爲命令歷史列表中的命令編號;可用執行第#條命令;

!!: 執行上一條命令;

!-#: 執行命令歷史列表中的倒數第#條命令;

!string: 執行命令歷史列表中的最近一次以string開頭的命令;

!$: 引用上個命令的最後一個參數; ESC ——> .

 

history命令

-c: 清空列表

-d #: 刪除指定的歷史命令

-a: 追加當前會話的命令歷史至歷史文件中去;

-r:讀取歷史文件內容,並追加當前會話的命令歷史至歷史文件中去

-w:把當前會話的命令歷史追加到文件

 

命令歷史相關的環境變量:

HISTSIZE: 命令歷史中可以保存的命令的個數;

HISTFILE: 命令歷史文件;

HISTFILESIZE: 命令歷史文件可以保存的命令的個數;

HISTCONTROL: 控制命令歷史的生成;

ignoredups: 忽略記錄重複的命令;連續的相同命令才爲重複;

ignorespace: 不記錄以空白字符開頭的命令;

ignoreboth: 同時具有上面兩種特性;

 

 

(2)命令補全

在Linux系統中,輸入一個命令時如果不記得完整的命令,可先輸入該命令的前幾個字符,再按兩次TAB鍵,就會列出所有以輸入字符開頭的可用命令。

[root@CentOS-6 ~]# mkd      // 此處敲兩次TAB鍵盤,顯示下列命令

mkdict    mkdir     mkdosfs  mkdumprd 

[root@CentOS-6 ~]# mkdi    // 此處敲兩次TAB鍵盤,則顯示下列命令,逐漸縮小命中的範圍

mkdict  mkdir  

[root@CentOS-6 ~]#

 

 

bash的命令分爲兩類:

內部命令:系統內建的命令

外部命令:在系統某路徑下有一個可執行程序

 

使用type命令可識別命令屬於哪類,使用 -a選項可以查找到該命令的可執行文件

[root@CentOS-6~]# type history

history is a shell builtin

[root@CentOS-6~]#

[root@CentOS-6~]# type -a ls

lsis aliased to `ls --color=auto'

ls is /bin/ls

[root@CentOS-6~]#

 

命令搜索機制:

PATH環境變量:由冒號分割的路徑,自左而右搜索

[root@CentOS-6 ~]# echo $PATH

/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin

 

命令搜索並非每次都搜索PATH路徑,而是通過搜索hash以達到更高的效率。

hash:把此前搜索到的路徑緩存到內存中

kv: key-value

ls --> /bin/ls

 

[root@CentOS-6 ~]# hash

hits        command

  5        /bin/cat

  1        /usr/bin/man

  3        /bin/ls

  8        /usr/bin/tree

  3        /usr/bin/clear

 

 

(3)路徑補全

路徑補全:跟命令補全一樣的概念,當用戶輸入路徑名的開頭字符,連續敲TAB鍵,則會搜索指定字符串卡頭的目錄,並補全路徑。

如果該路徑名是唯一:直接補全

否則:兩次TAB,可列出

 

 

(4)命令行展開的功能

bash命令行展開能夠把一個特殊字符換成別的字符

~  展開爲當前用戶的主目錄

~USERNAME  展開爲指定用戶的家目錄

{,}  可承載一個以逗號分割的列表,並其展開爲多個路徑

 

例如:

/var/{log,cache,run} = /var/log /var/cache /var/run

 

[root@CentOS-6 tmp]# mkdir -pv x/{a,b}_{c,d}

mkdir: created directory `x'

mkdir: created directory `x/a_c'

mkdir: created directory `x/a_d'

mkdir: created directory `x/b_c'

mkdir: created directory `x/b_d'

[root@CentOS-6 tmp]#

 

 

(5)命令的執行狀態結果,由bash追蹤和保存

命令的執行結果有兩種:

命令執行結果的返回值

命令執行後的狀態返回值

 

bash使用特殊變量$? 保存最近一條命令的狀態結果,可使用 echo $?  顯示

 

bash:每個命令,狀態返回值。

成功:0

失敗:1-255,(其中12127被系統保留)

$?:

 

實例:

[root@CentOS-6 tmp]#

[root@CentOS-6 tmp]# ls /usr

bin  etc games  include  lib lib64  libexec  local sbin  share  src tmp    

                              //以上爲命令執行結果的返回值

[root@CentOS-6 tmp]# echo $?

0                                                                      //此爲命令執行後的狀態返回值,數值0表示命令執行成功

[root@CentOS-6 tmp]#

[root@CentOS-6 tmp]# ls /usrr

ls: cannot access /usrr: Nosuch file or directory

   //以上是故意輸錯目錄名,所以命令執行失敗

[root@CentOS-6 tmp]#

[root@CentOS-6 tmp]# echo $?

2                                                                     //此爲命令執行後的狀態返回值,數值2表示命令執行失敗

[root@CentOS-6 tmp]#

 

 

(6)命令別名

命令別名:命令的另一個引用符號,由bash程序維護

直接輸入alias可顯示當前系統上所有已定義的命令別名

 

定義別名:alias 別名=‘原始命令’  

例如:alias cls='clear'

 

取消定義的別名:unalias 別名

例如:unalias cls

 

如果別名同原命令名:想直接執行原命令,則需在命令前加\,表示使用命令本身,而不是別名

~/.bashrc#如果要使指定的別名永久生效,則修改此文件,把命令別名添加爲此文件內容。

 

 

 

bash的基礎特性(二)

 

1)globing

bash中的文件名通配

通配符:

*:匹配任意長度的任意字符

?:匹配任意單個字符

[^] #(脫字符)匹配指定範圍之外的任意單個字符

[]:匹配指定字符範圍內的任意單個字符,不區分大小寫

[abc], [a-m], [a-z], [A-Z], [0-9], [a-zA-Z], [0-9a-zA-Z]

[:space:]  空白字符

[:punct:]  標點符號

[:lower:]  小寫字母

[:upper:]  大寫字母

[:alpha:]  大小寫字母

[:digit:]  數字

[:alnum:]  數字和大小寫字母

 

# man 7 glob  查看globing幫助手冊

 

 

2)組合鍵

bash中有衆多的快捷鍵,熟練掌握它們將會提高工作效率

光標跳轉:

Ctrl+a:跳到命令行首

Ctrl+e:跳到命令行尾

Ctrl+f:光標往前跳一個字符

Ctrl+b:光標往後跳一個字符

刪除OR粘貼:

Ctrl+d:刪除光標所在字符

Ctrl+u: 剪切光標至命令行首的內容

Ctrl+k: 剪切光標至命令行尾的內容

Ctrl+y:粘貼所剪切的內容

 

Ctrl+l #清屏

Ctrl+c #終止命令

Ctrl+z #暫停命令(把進程放在後臺運行) 

輸入jobs 查看後臺運行命令

輸入fg 回到前臺運行

Ctrl+r #搜索歷史

 

 

3)IO重定向和管道

輸入輸出重定向

I/O: 設備, 寄存器

 

INPUT:標準輸入:stdin, 0

OUPUT:標準輸出:stdout, 1

     標準錯誤:stderr,2

 

輸入重定向:<,<<

<: 輸入重定向(基本用不上,以下命令 < 都可省略)

cat < /etc/passwd 

tr 'a-z' 'A-Z' < /etc/passwd

<< EOF: 此處創建文件, Here Document

常用於在腳本中創建文件或生成菜單;

 

#!/bin/bash

#

cat > /tmp.menu.txt << EOF

a: a is asshole

b: b is bastard

c: c is cadger

d: d is damn

EOF

 

輸出重定向:>,>>

>: 覆蓋輸出

>>: 追加輸出

set -C:禁止使用覆蓋重定向至已經存在的文件;

set +C: 關閉上述特性;

>|:在-C特性下,強制使用覆蓋重定向;

 

/dev/null: bit bucket,位桶

 

錯誤重定向:2>,2>>

2>: 覆蓋

2>>: 追加

 

 

同時重定標準輸出和錯誤輸出:

COMMAND > /path/to/outfile 2> /path/to/errfile

 

重定向標準輸出或錯誤輸出至同一個文件

COMMAND &> /path/to/somefile 

COMMAND > /path/to/somefile 2>&1 

 

 

管道

管道:把一個命令的執行結果傳遞給下一條命令,作爲下一條命令的參數

 

COMMAND1 | COMMAND2 | COMMAND3 | ...

不能在管道中傳遞變量,尤其不能在前面的命令中生成變量

 

tee的用法:

cat /etc/rc.d/rc.sysinit | tee /tmp/a.out | wc -l

分叉輸出:tee,命令不會處理,會送到下一個管道


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章