鸟哥的Linux私房菜学习笔记(三)

Vim

由于vim的快捷键过多,就直接贴链接了 知乎原文

BASH

认识bash

bash是Linux默认的shell,其有一下功能

  • 命令编辑/修改能力(history)
  • 命令与文档补全能力([tab])
  • 命名别名设定功能(alias)
  • 工作控制、前景背景控制(job control,foreground,background)
  • 程序化脚本(shell scripts)
  • 万用字元(wildcard)

可以使用type查询指令是否为Bash Shell的内建命令,用法如下

$ type [-tpa] name:不加任何選項與參數時,type 會顯示出 name 是外部指令還是 bash 內建指令
-t  :當加入 -t 參數時,type 會將 name 以底下這些字眼顯示出他的意義:file    :表示為外部指令;alias   :表示該指令為命令別名所設定的名稱;builtin :表示該指令為 bash 內建的指令功能;
-p  :如果後面接的 name 為外部指令時,才會顯示完整檔名;
-a  :會由 PATH 變數定義的路徑中,將所有含 name 的指令都列出來,包含 alias

在bash中可以使用 反斜杠:\ 来跳过紧接着的下一个字符,以此来实现在命令行的多行书写,例如

$ cp /var/spool/mail/root /etc/crontab \
> /etc/fstab /root

此外还有一下快捷键

^u 从游标向前删除指令串
^k 从游标向后删除指令串
^a 将游标移动到最前面
^e 将游标移动到最后面

Shell中的变量

查看某个变量

$ echo $HOME
或
$ echo ${HOME}

变量的设定遵循以下规则

  • 变量即变量的内容使用 = 来连接,例如 [myname=VBird]

  • 变量名称只能是字母与数字,但开头不能是数字

  • 变量内容含有空格时,可以使用『"』或『’』将其包裹

    • 双引号内如含有$等,可以使其保持原有特性
    • 单引号内的特殊字符一律视为纯文字
  • 如果在执行指令时还需要引用其他额外的指令,可以使用『`(指令)`』(反引号)或『$(指令)』的格式

  • 为变量增加内容时,可以使用**"变量名称"或变量名称"或变量名称"或{变量名称}**后面直接连接需要添加的内容的方法

  • 如果变量需要在子程序执行,需要使用export将其变为全局变量

  • 使用unset取消变量的设定

一些与变量操作有关的函数

  • env,列出所有的环境变量(系统的)及其内容

  • set,列出所有变量,包含环境变量即自定义变量,其中包含一些较为常用的内容,包括

    • PS1:提示字元的设定:
    • ?:变量$?代表的是上一个执行的指令所回传的值,当对齐进行echo时可以在屏幕上显示,如果上一个指令成功执行,则其为0;如果发生错误,则其为错误代码
  • export

  • declare,设定变量的类型

    $ declare [-aixr] variable-a  :將後面名為 variable 的變數定義成為陣列 (array) 類型
    -i  :將後面名為 variable 的變數定義成為整數數字 (integer) 類型
    -x  :用法與 export 一樣,就是將後面的 variable 變成環境變數;
    -r  :將變數設定成為 readonly 類型,該變數不可被更改內容,也不能 unset
    
  • 阵列(array)类型变量

    var[index]=content
    
  • 变量内容的删除与取代

命令别名

  • alias,unalias,命令别名设定

    $ alias lm='ls -al | more'$ unalias lm
    

    使用alias后面不加参数时,会将设置的所有有别名的内容输出

bash环境通用操作

  • bash预设的组合键

  • 万用字元与特殊符号

  • 其余特殊符号

资料流重导向

当不想将正确的或错误的资料全部输出在命令行时,就可以使用重导向将其写入指定的文件中,资料流重导向可以分为以下三种(一个符号与两个符号的区别为:一个为覆盖写入,两个为累加写入

  • 标准输入(stdin):代号0,使用 < 或 <<
  • 标准输出(stdout):代号1,使用 > 或 >>
  • 标准错误输出(stderr):代号2,使用 2> 或 2>>

使用便准输出的一个例子是

$ ll / > ~/rootfile       #命令行无输出,文件被写入指定文件

如果想将stdout和stderr写入不同的文件

$ find /home -name .bashrc > list_right 2> list_error

不将输出内容写入文件,但是不想在命令行上看到错误信息的输出时,可以使用stderr将错误的信息重定向到“黑洞装置” /dev/null 之中去

$ find /home -name .bashrc 2> /dev/null

如果要将stdout和stderr写入同一个文件夹,则可以使用

[dmtsai@study ~]$ find /home -name .bashrc &> list

对于stdin,其与前两者存在一定的差别。在使用 < 时可以在命令行上直接使用文档的内容

$ cat > catfile < ~/.bashrc
$ ll catfile ~/.bashrc
-rw-r--r--. 1 dmtsai dmtsai 231 Mar  6 06:06 /home/dmtsai/.bashrc
-rw-rw-r--. 1 dmtsai dmtsai 231 Jul  9 18:58 catfile
# 在这个例子中,先使用cat创建文件,在使用<写入内容,类似于cp的功能

而 << 代表的时结束的字元,例如

[dmtsai@study ~]$ cat > catfile << "eof"
> This is a test.
> OK now stop
> eof  <==輸入這關鍵字,立刻就結束而不需要輸入 [ctrl]+d$ cat catfile
This is a test.
OK now stop     <==只有這兩行,不會存在關鍵字那一行!

命令执行的判断依据:; && ||

  • cmd;cmd——不考虑指令相关性的联系下达指令
  • cmd1 && cmd2——若cmd1正确执行($?=0),才执行cmd2
  • cmd1 || cmd2——若cmd1执行完且为错误,才执行cmd2

管线命令

与前文不同的时,管线命令使用的是『 | 』这个界定符号。管线只能处理经由前面一个指令传来的正确信息(stdout),管线命令的处理示意图如下

管线后面连接的必须是可以接受stdin的指令,例如less,more,head,tail。

管线的信息处理命令

  • cut——按要求切断传入的信息

    $ cut -d'分隔字元' -f fields <==用於有特定分隔字元
    $ cut -c 字元區間            <==用於排列整齊的訊息-d  :後面接分隔字元。與 -f 一起使用;
    -f  :依據 -d 的分隔字元將一段訊息分割成為數段,用 -f 取出第幾段的意思;
    -c  :以字元 (characters) 的單位取出固定字元區間;# 例子
    $ echo ${PATH} | cut -d ':' -f 5
    
  • grep——分析输入的信息,如果复合要求就取出

    $ grep [-acinv] [--color=auto] '搜尋字串' filename-a :將 binary 檔案以 text 檔案的方式搜尋資料
    -c :計算找到 '搜尋字串' 的次數
    -i :忽略大小寫的不同,所以大小寫視為相同
    -n :順便輸出行號
    -v :反向選擇,亦即顯示出沒有 '搜尋字串' 內容的那一行!
    --color=auto :可以將找到的關鍵字部分加上顏色的顯示喔!
    

管线的排序命令

  • sort——依据不同的资料类型进行排序,默认使用字符进行排序

    $ sort [-fbMnrtuk] [file or stdin]-f  :忽略大小寫的差異,例如 A 與 a 視為編碼相同;
    -b  :忽略最前面的空白字元部分;
    -M  :以月份的名字來排序,例如 JAN, DEC 等等的排序方法;
    -n  :使用『純數字』進行排序(預設是以文字型態來排序的);
    -r  :反向排序;
    -u  :就是 uniq ,相同的資料中,僅出現一行代表;
    -t  :分隔符號,預設是用 [tab] 鍵來分隔;
    -k  :以那個區間 (field) 來進行排序的意思$ cat /etc/passwd | sort
    abrt:x:173:173::/etc/abrt:/sbin/nologin
    adm:x:3:4:adm:/var/adm:/sbin/nologin
    alex:x:1001:1002::/home/alex:/bin/bash$ cat /etc/passwd | sort -t ':' -k 3
    root:x:<u>0<u></u>:0:root:/root:/bin/bash
    dmtsai:x:1000:1000:dmtsai:/home/dmtsai:/bin/bash
    alex:x:1001:1002::/home/alex:/bin/bash
    arod:x:1002:1003::/home/arod:/bin/bash
    
  • uniq——将排序后的资料仅列出一个显示

    [dmtsai@study ~]$ uniq [-ic]-i  :忽略大小寫字元的不同;
    -c  :進行計數
    
  • wc——列出字数、行数、字元数

    $ wc [-lwm]-l  :僅列出行;
    -w  :僅列出多少字(英文單字);
    -m  :多少字元;
    

tee 双通道重导向

​ 既会写入指定的文件夹,又会在屏幕上显示出输出

$ tee [-a] file-a  :以累加 (append) 的方式,將資料加入 file 當中!

字元转换命令

  • tr——删除或替换文字

    $ tr [-ds] SET1 ...-d  :刪除訊息當中的 SET1 這個字串;
    -s  :取代掉重複的字元!# 例子
    $ last | tr '[a-z]' '[A-Z]' # 將 last 輸出的訊息中,所有的小寫變成大寫字元$ cat ~/passwd | tr -d '\r' > ~/passwd.linux
    
  • col——将 [tab] 转换为空格

    $ col [-xb]-x  :將 tab 鍵轉換成對等的空白鍵
    
  • join——将两个文档中,有相同内容的一行合在一起

  • paste/expand懒得写了

split 分割命令

$ split [-bl] file PREFIX-b  :後面可接欲分割成的檔案大小,可加單位,例如 b, k, m 等;
-l  :以行數來進行分割。
PREFIX :代表前置字元的意思,可作為分割檔案的前導文字。# 例子
$ cd /tmp; split -b 300k /etc/services services
$ ll -k services*
-rw-rw-r--. 1 dmtsai dmtsai 307200 Jul  9 22:52 servicesaa
-rw-rw-r--. 1 dmtsai dmtsai 307200 Jul  9 22:52 servicesab
-rw-rw-r--. 1 dmtsai dmtsai  55893 Jul  9 22:52 servicesac$ cat services* >> servicesback #将多个小文档合成一个

xargs 参数代换

其本质是让本身不能直接接受stdin输入的指令可以在管线中使用

[dmtsai@study ~]$ xargs [-0epn] command-0  :不仅可以将分隔符从默认的空格变成 NULL,还会将单引号、双引号、反斜线等统统默认为是普通字符;除了可以使     用-0选项外,其实还可以使用-d选项来指定任何一个符号作为分隔符
-e  :這個是 EOF (end of file) 的意思。後面可以接一個字串,當 xargs 分析到這個字串時,就會停止繼續工作!
-p  :在執行每個指令的 argument 時,都會詢問使用者的意思;
-n  :後面接次數,每次 command 指令執行時,要使用幾個參數的意思。當 xargs 後面沒有接任何的指令時,預設是以 echo 來進行輸出喔!

在管线命令当中,常常会使用到前一个指令的 stdout 作为这次的 stdin ,某些指令需要用到文档名称 (例如 tar) 来进行处理时,该 stdin 与 stdout 可以利用减号 “-” 来替代

$ mkdir /tmp/homeback
$ tar -cvf - /home | tar -xvf - -C /tmp/homeback

上述的例子的含义为:将 /home 里面的文档打包,但打包的资料不是进行记录,而是传送到 stdout;经过管线后,将 tar -cvf - /home 传送给后面的 tar -xvf -

鸟哥的Linux私房菜学习笔记(三)相关推荐

  1. 鸟哥的linux私房菜运维篇,鸟哥的Linux私房菜学习笔记之SAMBA

    鸟哥的Linux私房菜学习笔记之SAMBA 发布时间:2020-06-24 01:44:50 来源:51CTO 阅读:185 作者:tomshen NFS仅能让Unix/linux之间共享数据,CIF ...

  2. 鸟哥的Linux私房菜学习笔记(2)登录与在线求助

    以管理员身份运行VMware Player,点击之前安装好的CentOS 7版本的虚拟机,会出现以下界面:  这是我建立的一般账户,ROOT由于身份比较特殊,所以没有被列出来.  点击 "未 ...

  3. 鸟哥linux群,【鸟哥的linux私房菜-学习笔记】linux的帐号与群组

    linux的帐号与群组 使用者标识符: UID 与 GID ID 与账号的对应就在 /etc/passwd 当中: 计算机只认得ID(即数字),并不能区别账号: 每个登陆的使用者至少都会取得两个 ID ...

  4. 鸟哥的linux私房菜学习笔记《二十》bash简介

    shell的功能: 提供用户操作系统的一个接口. 系统上合法的shell要写在/etc/shells这个文件,因为系统某些服务在运行过程中会去检查用户能够使用的shells,而这些shell的查询就是 ...

  5. Linux管道命令——《鸟哥的Linux私房菜》笔记

    Linux管道命令--<鸟哥的Linux私房菜>笔记 0 前言 看完书之后,总感觉不记录下来的话,很快就会忘了,然后又需要重新到处翻书找资料,所以还是把内容记录下来,方便以后复习.本文大部 ...

  6. 鸟哥的Linux私房菜学习心得-基础操作

    <鸟哥的Linux私房菜>特别适合新手作为Linux的入门教材,即使没有计算机知识基础也能学明白,鸟哥算是很用心了.半个月来学习了鸟哥主页教程的基础篇,感觉良好,因此特意写下学习的感受,以 ...

  7. 鸟哥的 Linux 私房菜学习总结(超赞!!!)

    我是技术搬运工,好东西当然要和大家分享啦.原文地址 常用操作以及概念 求助 1. --help 指令的基本用法与选项介绍. 2. man man 是 manual 的缩写,将指令的具体信息显示出来. ...

  8. 鸟哥的Linux私房菜读书笔记:Linux磁盘与文件系统管理

    系统管理员很重要的任务之一就是管理好自己的磁盘文件系统, 每个分区不可太大也不能太小, 太大会造成磁盘容量的浪费, 太小则会产生文件无法储存的困扰. 前面谈到的文件权限与属性中, 这些权限与属性分别记 ...

  9. 鸟哥的Linux私房菜 读书笔记

    个人表示,每次看电子档,都会从头开始读,话说会一直读不完.以前会有手抄板的读书笔记,但是不方便携带.现在就开始电子档的读书笔记吧. 1. Kernel 必须管理的事项有: * 系统呼叫接口(syste ...

  10. 鸟哥的Linux私房菜 命令笔记2

    which:寻找执行档 which [-a] command -a:all将所有从$PATH目录中可以找到的指令均列出来,而不止第一个被找到的指令名称 which ifconfig which whi ...

最新文章

  1. Objective-C:OC内部可变对象和不可变对象的深(复制)拷贝问题思考:
  2. linux批量安装 五大开源软件挨个看,Linux批量安装 五大开源软件挨个看(1)(5)
  3. matlab中sum(w.),matlab中sum
  4. python实现表格_python 实现绘制整齐的表格
  5. 如何发布自己的 Composer 包
  6. Android SQLite服务--创建、增删改查
  7. 优必选发布新一代大型机器人Walker X
  8. ecshop 邮件模板 html,给ecshop后台增加新的邮件模板
  9. CONTINUAL LEARNING FOR AUTOMATED AUDIO CAPTIONING USING THE LEARNING WITHOUT FORGETTING APPROACH
  10. 微星小飞机界面翻译_软件 | 第二款翻译利器推荐
  11. 获取常用3500字的书法图片
  12. 想知道“照片识别文字”的技巧吗?快看这几个方法
  13. php怎么获取图片信息,PHP获取图片信息exif
  14. 最简单的让IjkPlayer自动旋转带有rotation视频的方法
  15. BGP公网成本节省50%秘笈,共享流量包、共享带宽包,便宜到阿里云快哭了
  16. nginx使用ngx_shared_memory_add和ngx_slab_alloc等在共享内存里创建一棵红黑树
  17. Android studio2.3版本 用小米手机无法调试,用模拟器正常调试。Application Installation Failed
  18. 基于微服务架构的直播平台搭建【一】
  19. [渝粤教育] 西南科技大学 经济型数控系统设计 在线考试复习资料
  20. 下列关于python运算符的使用描述正确的是_以下关于 Python 字符串的描述中,正确的是( )...

热门文章

  1. 计算机九宫格游戏怎么玩,《九宫格数独》怎么玩 数独玩法介绍
  2. c语言课后答案详解,c语言课后练习题答案详解_0.doc
  3. 计算机管理键盘驱动一直黄标,教你键盘驱动程序显示黄色感叹号的处理办法
  4. WEB密码安全输入控件
  5. 《计算机操作系统(慕课版)》(汤小丹著)课后习题答案
  6. 如何彻底删掉360安全卫士,删除顽固的DLL文件
  7. Visual Basic Script 程序参考手册-学习第1天:初步认识VBS,编写第一个Hello World程序,解决中文字符乱码问题,推荐参考书
  8. VS无法启动程序调试监视器未能启动
  9. 因子分析在SPSS中的应用
  10. Windows下使用CMD下载网络文件