Linux系統(tǒng)上的文件類型:
- -:常規(guī)文件,即f
- d:directory虚青,目錄文件
- b:block device它呀,塊設(shè)備文件[已block為單位,支持隨機(jī)訪問]
- c:character device, 字符設(shè)備[已character纵穿,支持線性訪問]
major number: 主設(shè)備號(hào)下隧,標(biāo)識(shí)設(shè)備類型,進(jìn)而確定要加載的驅(qū)動(dòng)程序
minor number: 次設(shè)備好谓媒,標(biāo)識(shí)同一種類型中的不同設(shè)備
早期設(shè)備號(hào)是8位二進(jìn)制(0-255)表示淆院,現(xiàn)在好像是16位 - symbolic link:符號(hào)鏈接文件
- p:pipe命名管道,
- s:socket 套接字文件
基本命令:
??命令類型:
????外部命令:文件系統(tǒng)有與之對(duì)應(yīng)的二進(jìn)制執(zhí)行程序
????內(nèi)部命令: 一般是shell自帶
????type COMMAND:
??????內(nèi)部:buildin
??????外部:顯示為命令文件路徑篙耗;
????????注意:命令還可以有別名迫筑,別名可以與原名相同,此時(shí)原名被隱藏宗弯。此時(shí)如果需要運(yùn)行原命令脯燃,則使用\COMMAND
????命令別名:
??????獲取所有命令的別名:
????????alias
??????定義別名:
????????alias NAME='COMMAND'
????????注意:進(jìn)對(duì)當(dāng)前shell有效
??????撤銷別名:
????????unalias NAME
????which命令:
??????顯示命令絕對(duì)路徑
??????which --skip-alias 忽略別名
????whereis命令:
??????顯示命令地址,man手冊地址
??????whereis -b 僅搜索二進(jìn)制程序路徑
??????whereis -m 僅搜索使用手冊文件路徑
????who命令:
??????顯示誰在登錄
??????who -b 系統(tǒng)此次啟動(dòng)的時(shí)間
??????who -r 運(yùn)行級(jí)別
????w命令:
??????增強(qiáng)版的who命令
bash的基礎(chǔ)特性
- 命令歷史:shell進(jìn)程會(huì)在會(huì)話中保存此```
本地初始化的項(xiàng)目 與 github 版本不一致, 導(dǎo)致無法提交
$ git pull origin master
- branch master -> FETCH_HEAD
fatal: 拒絕合并無關(guān)的歷史
解決方法
在pull 時(shí)候, 添加–allow-unrelated-histories參數(shù) 即可.
$ git pull origin master --allow-unrelated-histories
來自 https://github.com/itaken/python-login-demo
- branch master -> FETCH_HEAD
Merge made by the 'recursive' strategy.
LICENSE | 21 +++++++++++++++++++++
1 file changed, 21 insertions(+)
create mode 100644 LICENSE
- history 歷史命令列表
- 定制history功能蒙保,可通過環(huán)境變量實(shí)現(xiàn)
- HISTSIZE : shell 進(jìn)程可保留的命令歷史的條數(shù)
- HISTFILE : 保留歷史記錄的文件
- HISTFILESIZE : 文件的大小
- 命令語法
- history [-c] [-d 偏移量] [n]
- history -anrw [文件名]
- history -ps 參數(shù) [參數(shù)...]
- -c: 清空命令歷史
- -d offset: 刪除指定歷史命令
- -r: 從文件讀取歷史命令至歷史列表中
- -w: 把歷史列表中的命令追加至歷史文件中
- history n:顯示最近的n條命令
- 使用歷史列表中的命令
- !n : 使用歷史列表中的第n條命令(中間沒有空格)
- !! : 在一次執(zhí)行上一次命令
- **!STRING** : 再一次執(zhí)行命令列表中最近一個(gè)與STRING開頭的命令
- **注意命令的重復(fù)執(zhí)行有時(shí)需要冪等性支持**
- 調(diào)用上一條命令最后一個(gè)參數(shù)
- **esc+.**
- **!$**
- **alt+.**
- 控制命令歷史記錄的方式:
- HISTSCONTROL :
- ignoredups: 忽略重復(fù)的命令
- ignorespace: 忽略已空白字符的命令
- ignoreboth: 以上兩者同時(shí)生效
- 修改環(huán)境變量的值
- NAME='value' 該方式僅對(duì)當(dāng)前進(jìn)程有效
2. 命令補(bǔ)全
3. 目錄管理命令
- mkdir: make dir
- -p : 自動(dòng)按需創(chuàng)建父目錄
- -v : 顯示詳細(xì)創(chuàng)建過程
- -m : 設(shè)置權(quán)限
- rmdir : remove empty directories
- -p : 刪除某目錄后辕棚,如果其父目錄為空則一并刪除
- -v : 顯示詳細(xì)過程
- 問題1:如何創(chuàng)建/tmp/x/y1, /tmp/x/y2, /tmp/x/y1/a ,tmp/x/y1/b
- 問題2:如何創(chuàng)建 a_c, a_d, b_c, b_d;
---
###bash 基礎(chǔ)特性:命令行展開
- ~ : 自動(dòng)展開為用戶的家目錄,或制定用戶的家目錄
- {} : 可承載已逗號(hào)分割的路徑列表邓厕,并能夠展開為多個(gè)路徑逝嚎,花括號(hào)還可以嵌套
- 例如: /tmp/{a,b}    相當(dāng)于 /tmp/a    /tmp/b
- 問題1: mkdir -pv /tmp/x/{y1/{a,b},y2}
- 問題2:mkdir -pv {a,b}_{c,d}
- 問題3:創(chuàng)建如下目錄結(jié)構(gòu):
- /tmp/mysysroot/
- bin
- sbin
- etc
- sysconfig
- network-scripts
- usr
- bin
- sbin
- local
- bin
- sbin
- etc
- lib
- lib
- lib64
- var
- cache
- log
- run
mkdir -pv /tmp/mysysroot/{bin,sbin,etc/sysconfig/network-scripts,usr/{bin,sbin,local/{bin,sbin,etc,lib},lib,lib64},var/{cache,log,run}}
tree /tmp/mysysroot
tree : 顯示目錄樹狀結(jié)構(gòu)
---
bash 基礎(chǔ)特性:命令的執(zhí)行狀態(tài)結(jié)果
- 命令執(zhí)行的狀態(tài)結(jié)果
- bash通過狀態(tài)返回值來輸出此結(jié)果
- 成功: 0
- 失敗: 1-255
- 命令完成之后,其狀態(tài)返回值保存于bash的特殊變量$?中详恼;
- 命令正常執(zhí)行時(shí)补君,有的還會(huì)有命令返回值
- 根據(jù)命令及功能不同,結(jié)果各不相同
- 引用命令的執(zhí)行結(jié)果
- $(COMMAND)
- 或 `COMMAND`
---
### bash 基礎(chǔ)特性:引用
- 強(qiáng)引用: '' ,其內(nèi)部的任何子串都直接顯示
- 弱引用:"" 昧互, 進(jìn)行變量替換
- 命令引用: ``或$()
---
### bash 基礎(chǔ)特性:快捷鍵
- ctrl + a: 跳轉(zhuǎn)至命令行首部
- ctrl + e: 跳轉(zhuǎn)至命令行尾部
- ctrl + u: 刪除命令行首至光標(biāo)處所有內(nèi)容
- ctrl + k: 刪除命令行尾至光標(biāo)出所有內(nèi)容
- ctrl + l : 清屏
---
### bash基礎(chǔ)特性 globing: 文件名通配
- 一種匹配模式 : 元字符
- * : 匹配任意長度的任意字串
- ? : 匹配
- [] : 匹配指定范圍內(nèi)的任意單個(gè)字符
- 有幾種特殊格式
- [a-z] , [A-Z]: 默認(rèn)不區(qū)分大小寫
- [0-9] : 所有數(shù)字
- [a-z0-9] : 所有數(shù)字和字母
- [[:upper:]] : 所有大寫字母 **外城中括號(hào)表示范圍挽铁,與上面三個(gè)例子中括號(hào)意思一致**
- [[:lower:]] : 所有小寫字母
- [[:alpha:]] : 所有字母
- [[:digit:]] : 所有數(shù)字
- [[:alpha:][:digit:]] : 所有數(shù)字和所有字母
- [[:alnum:]] : 所有數(shù)字和所有字母
- [[:space:]] : 所有空白字符
- [[:punct:]] : 所有標(biāo)點(diǎn)符號(hào)
- [^] : 匹配指定范圍外的任意單個(gè)字符
- 例如: [^[:upper:]] : 匹配大寫字母之外的所有字符;[^0-9] : 匹配所有數(shù)字之外的所有字符敞掘、 [^[:alnum:]] : 匹配所有非正常字符的任意字符
- 練習(xí)
1. 顯示/var 目錄下所有l(wèi)開頭叽掘,已一個(gè)小寫字母結(jié)尾,且中間出現(xiàn)一位任意字符的文件或目錄
2. 顯示/etc目錄下已任意一位數(shù)字開頭玖雁,且已非數(shù)字結(jié)尾的文件或目錄
3. 顯示/etc目錄下已非字母開頭更扁,后面根一個(gè)字母及其它任意長度任意字符的文件或目錄
4. 復(fù)制/etc目錄下所有已m開頭已非數(shù)字結(jié)尾的文件或目錄,至/tmp/xiang目錄
5. 復(fù)制/usr/share/man 目錄下所有已man開頭赫冬,后跟一個(gè)數(shù)字結(jié)尾的文件或目錄至/tmp/man目錄下
6. 復(fù)制/etc目錄下所有已.conf結(jié)尾且已m浓镜、n、r劲厌、p開頭的文件或目錄至/tmp/conf.d/目錄下
---
1. ls -d /var/l?[[:lower:]]
2. ls /etc/[0-9]*[^0-9] 或者 ls /etc/[0-9]*[^[digit]]
3. ls /etc/[^[:alpha:]][[:alpha:]]* -d 或 ls /etc/[^a-z][a-z]*
4. cp /etc/m*[^[:digit:]] -r /tmp/benbenxiang
5. cp /usr/share/man/man[0-9] -r /tmp/benbenxiang/
6. cp /etc/[mnrp]*.conf -r /tmp/benbenxiang/conf.d/
---
### bash基礎(chǔ)特性:IO重定向及管道
程序:指令+數(shù)據(jù)
可用于輸入的設(shè)備:
    文件竖哩、鍵盤設(shè)備、網(wǎng)卡等
可用于輸出的設(shè)備:
    文件系統(tǒng)上的常規(guī)文件脊僚、網(wǎng)卡等。
程序有三種數(shù)據(jù)流:
    輸入的數(shù)據(jù)流: <-- 標(biāo)準(zhǔn)輸入(stdin), 默認(rèn)情況是鍵盤
    輸出數(shù)據(jù)流: --> 標(biāo)準(zhǔn)輸出(stdout),默認(rèn)顯示器
    錯(cuò)誤輸出流: --> 錯(cuò)誤輸出(stderr),默認(rèn)顯示器
fd file descriptor: 文件描述符
    標(biāo)準(zhǔn)輸入:0
    標(biāo)準(zhǔn)輸出:1
    錯(cuò)誤輸出:2
**IO重定向**
    輸出重定向:>
         特性:覆蓋輸出重定向
    輸出重定向:>>
        特性:追加輸出
    set -C : 僅對(duì)當(dāng)前進(jìn)程有效
        禁止覆蓋輸出重定向至已存在的文件
     強(qiáng)行覆蓋輸出: >|
    set +C : 關(guān)閉上述特性
    錯(cuò)誤輸出重定向(覆蓋):2>
    錯(cuò)誤輸出重定向(追加):2>>
    合并正常輸出流和錯(cuò)誤輸出流
         (1):&> (覆蓋)或 &>> (追加)
         (2) :COMMAND > /path/somefile 2>&1
          :COMMAND >> /path/somefile 2>&1
        特殊設(shè)備: /dev/null :數(shù)據(jù)黑洞
    輸入重定向:<
    tr 命令
        tr [option]... SET1 [SET2]
            吧輸入的數(shù)據(jù)當(dāng)中的自負(fù),凡是在SET1定義范圍內(nèi)出現(xiàn)的辽幌,統(tǒng)統(tǒng)對(duì)位轉(zhuǎn)換為SET2出現(xiàn)的字符增淹。
        用法1:
            tr SET1 SET2 < /PATH/FROM/SOMEFILE
        用法2:
            tr -d SET1 < /PATH/FROM/SOMEFILE
            **注意: 不修改源文件**
     << : Here Document (此處創(chuàng)建文檔)
        cat << EOF ... EOF
        cat > /PATH/TO/SOMEFILE << EOF ... EOF
    管道: 鏈接程序,實(shí)現(xiàn)將前一個(gè)命令的輸出直接定向后一個(gè)程序當(dāng)作輸入數(shù)據(jù)流
         COMMAND | COMMAND2 | COMMAND3 | ...
        tee命令:COMMAND | tee /PATH/TO/SOMEFILE | tr 'a-z' 'A-Z'
            tee將輸入流輸出一份到文件乌企,并且又輸出一份到管道虑润。
    練習(xí)1: 把/etc/passwd文件的前6行的信息轉(zhuǎn)換為大寫字母并輸出
     head -n 6 /etc/passwd | tr 'a-z' 'A-Z'
**命令總結(jié):tr tee**