bash基础特性

Linux系统上的文件类型:

  1. -:常规文件,即f
  2. d:directory,目录文件
  3. b:block device,块设备文件[已block为单位,支持随机访问]
  4. c:character device, 字符设备[已character,支持线性访问]
    major number: 主设备号,标识设备类型,进而确定要加载的驱动程序
    minor number: 次设备好,标识同一种类型中的不同设备
    早期设备号是8位二进制(0-255)表示,现在好像是16位
  5. symbolic link:符号链接文件
  6. p:pipe命名管道,
  7. s:socket 套接字文件

基本命令:
  命令类型:
    外部命令:文件系统有与之对应的二进制执行程序
    内部命令: 一般是shell自带
    type COMMAND:
      内部:buildin
      外部:显示为命令文件路径;
        注意:命令还可以有别名,别名可以与原名相同,此时原名被隐藏。此时如果需要运行原命令,则使用\COMMAND
    命令别名:
      获取所有命令的别名:
        alias
      定义别名:
        alias NAME='COMMAND'
        注意:进对当前shell有效
      撤销别名:
        unalias NAME
    which命令:
      显示命令绝对路径
      which --skip-alias 忽略别名
    whereis命令:
      显示命令地址,man手册地址
      whereis -b 仅搜索二进制程序路径
      whereis -m 仅搜索使用手册文件路径
    who命令:
      显示谁在登录
      who -b 系统此次启动的时间
      who -r 运行级别
    w命令:
      增强版的who命令


bash的基础特性

  1. 命令历史:shell进程会在会话中保存此```
    本地初始化的项目 与 github 版本不一致, 导致无法提交

$ git pull origin master

  • branch master -> FETCH_HEAD
    fatal: 拒绝合并无关的历史
    解决方法

在pull 时候, 添加–allow-unrelated-histories参数 即可.

$ 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功能,可通过环境变量实现
        - HISTSIZE : shell 进程可保留的命令历史的条数
        - HISTFILE : 保留历史记录的文件
        - HISTFILESIZE : 文件的大小
    -  命令语法
        - history [-c] [-d 偏移量] [n] 
        -  history -anrw [文件名] 
        - history -ps 参数 [参数...]
        - -c: 清空命令历史
        - -d offset: 删除指定历史命令
        - -r: 从文件读取历史命令至历史列表中
        - -w: 把历史列表中的命令追加至历史文件中
        - history n:显示最近的n条命令
    - 使用历史列表中的命令
        - !n : 使用历史列表中的第n条命令(中间没有空格)
        - !! : 在一次执行上一次命令
        - **!STRING** : 再一次执行命令列表中最近一个与STRING开头的命令
        - **注意命令的重复执行有时需要幂等性支持**
    - 调用上一条命令最后一个参数
        - **esc+.** 
        - **!$**
        - **alt+.**
    - 控制命令历史记录的方式:
        - HISTSCONTROL : 
            - ignoredups: 忽略重复的命令
            - ignorespace: 忽略已空白字符的命令
            - ignoreboth: 以上两者同时生效
    - 修改环境变量的值
        - NAME='value' 该方式仅对当前进程有效
2. 命令补全
3. 目录管理命令
    - mkdir: make dir
        - -p : 自动按需创建父目录
        - -v :   显示详细创建过程
        - -m : 设置权限
    - rmdir : remove empty directories
        - -p : 删除某目录后,如果其父目录为空则一并删除
        - -v : 显示详细过程
    - 问题1:如何创建/tmp/x/y1, /tmp/x/y2, /tmp/x/y1/a ,tmp/x/y1/b
    - 问题2:如何创建 a_c, a_d, b_c, b_d;
---
###bash 基础特性:命令行展开
- ~ : 自动展开为用户的家目录,或制定用户的家目录
- {} : 可承载已逗号分割的路径列表,并能够展开为多个路径,花括号还可以嵌套
    - 例如: /tmp/{a,b}    相当于 /tmp/a       /tmp/b
- 问题1: mkdir -pv /tmp/x/{y1/{a,b},y2}
- 问题2:mkdir -pv {a,b}_{c,d}
- 问题3:创建如下目录结构:
    - /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 : 显示目录树状结构
---
bash 基础特性:命令的执行状态结果
- 命令执行的状态结果
    - bash通过状态返回值来输出此结果
        - 成功: 0
        - 失败: 1-255
    - 命令完成之后,其状态返回值保存于bash的特殊变量$?中;  
- 命令正常执行时,有的还会有命令返回值
    - 根据命令及功能不同,结果各不相同
- 引用命令的执行结果
    - $(COMMAND)
    - 或 `COMMAND`
---
### bash 基础特性:引用
- 强引用: ''   ,其内部的任何子串都直接显示
- 弱引用:""  , 进行变量替换
- 命令引用: ``或$()
---
### bash 基础特性:快捷键
- ctrl + a: 跳转至命令行首部
- ctrl + e: 跳转至命令行尾部
- ctrl + u: 删除命令行首至光标处所有内容
- ctrl + k: 删除命令行尾至光标出所有内容
- ctrl + l : 清屏
---
### bash基础特性 globing: 文件名通配
- 一种匹配模式 : 元字符
    - * : 匹配任意长度的任意字串
    - ? : 匹配
    - [] : 匹配指定范围内的任意单个字符
        - 有几种特殊格式
            - [a-z] , [A-Z]:  默认不区分大小写
            - [0-9] : 所有数字
            - [a-z0-9] : 所有数字和字母
            - [[:upper:]] : 所有大写字母    **外城中括号表示范围,与上面三个例子中括号意思一致**
            - [[:lower:]] : 所有小写字母
            - [[:alpha:]] : 所有字母
            - [[:digit:]] : 所有数字
            - [[:alpha:][:digit:]] : 所有数字和所有字母
            - [[:alnum:]] : 所有数字和所有字母
            - [[:space:]] : 所有空白字符
            - [[:punct:]] : 所有标点符号
    - [^] : 匹配指定范围外的任意单个字符
        - 例如: [^[:upper:]] : 匹配大写字母之外的所有字符;[^0-9] : 匹配所有数字之外的所有字符、 [^[:alnum:]] : 匹配所有非正常字符的任意字符
    - 练习
        1. 显示/var 目录下所有l开头,已一个小写字母结尾,且中间出现一位任意字符的文件或目录
        2. 显示/etc目录下已任意一位数字开头,且已非数字结尾的文件或目录
        3. 显示/etc目录下已非字母开头,后面根一个字母及其它任意长度任意字符的文件或目录
        4. 复制/etc目录下所有已m开头已非数字结尾的文件或目录,至/tmp/xiang目录
        5. 复制/usr/share/man 目录下所有已man开头,后跟一个数字结尾的文件或目录至/tmp/man目录下
        6. 复制/etc目录下所有已.conf结尾且已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基础特性:IO重定向及管道
程序:指令+数据
可用于输入的设备:
    文件、键盘设备、网卡等
可用于输出的设备:
    文件系统上的常规文件、网卡等。
程序有三种数据流:
&emsp;&emsp;&emsp;&emsp;输入的数据流: <-- 标准输入(stdin), 默认情况是键盘
&emsp;&emsp;&emsp;&emsp;输出数据流: --> 标准输出(stdout),默认显示器
&emsp;&emsp;&emsp;&emsp;错误输出流: --> 错误输出(stderr),默认显示器

fd file descriptor: 文件描述符
&emsp;&emsp;&emsp;&emsp;标准输入:0
&emsp;&emsp;&emsp;&emsp;标准输出:1
&emsp;&emsp;&emsp;&emsp;错误输出:2

**IO重定向**
&emsp;&emsp;&emsp;&emsp;输出重定向:>  
&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;  特性:覆盖输出重定向
&emsp;&emsp;&emsp;&emsp;输出重定向:>>
&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;特性:追加输出
&emsp;&emsp;&emsp;&emsp;set -C : 仅对当前进程有效
&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;禁止覆盖输出重定向至已存在的文件
&emsp;&emsp;&emsp;&emsp; 强行覆盖输出: >|
&emsp;&emsp;&emsp;&emsp;set +C : 关闭上述特性
&emsp;&emsp;&emsp;&emsp;错误输出重定向(覆盖):2> 
&emsp;&emsp;&emsp;&emsp;错误输出重定向(追加):2>> 

&emsp;&emsp;&emsp;&emsp;合并正常输出流和错误输出流
&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;&emsp; (1):&> (覆盖)或 &>> (追加)
&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;&emsp; (2)  :COMMAND > /path/somefile 2>&1
&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;:COMMAND >> /path/somefile 2>&1

&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;特殊设备: /dev/null   :数据黑洞

&emsp;&emsp;&emsp;&emsp;输入重定向:< 
&emsp;&emsp;&emsp;&emsp;tr 命令
&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;tr [option]... SET1 [SET2]
&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;吧输入的数据当中的自负,凡是在SET1定义范围内出现的,统统对位转换为SET2出现的字符。
&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;用法1:
&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;tr SET1 SET2 < /PATH/FROM/SOMEFILE
&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;用法2:
&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;tr -d SET1 < /PATH/FROM/SOMEFILE
&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;**注意: 不修改源文件**
&emsp;&emsp;&emsp;&emsp; << : Here Document (此处创建文档)
&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;cat << EOF ... EOF
&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;cat > /PATH/TO/SOMEFILE << EOF ... EOF

&emsp;&emsp;&emsp;&emsp;管道:  链接程序,实现将前一个命令的输出直接定向后一个程序当作输入数据流
&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;&emsp; COMMAND | COMMAND2 | COMMAND3 | ...

&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;tee命令:COMMAND | tee /PATH/TO/SOMEFILE | tr 'a-z' 'A-Z'
&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;tee将输入流输出一份到文件,并且又输出一份到管道。

&emsp;&emsp;&emsp;&emsp;练习1: 把/etc/passwd文件的前6行的信息转换为大写字母并输出
&emsp;&emsp;&emsp;&emsp; head -n 6 /etc/passwd | tr 'a-z' 'A-Z'
**命令总结:tr tee**












©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 220,367评论 6 512
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,959评论 3 396
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 166,750评论 0 357
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,226评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,252评论 6 397
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,975评论 1 308
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,592评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,497评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 46,027评论 1 319
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,147评论 3 340
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,274评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,953评论 5 347
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,623评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,143评论 0 23
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,260评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,607评论 3 375
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,271评论 2 358

推荐阅读更多精彩内容