《Linux命令行大全》 笔记记录

1.Shell是什么

  • 当谈到命令行的时候,我们实际上指的是shell。shell是一个接收由键盘输入的命令,并将其传递给操作系统执行的程序。一般Linux提供的shell程序叫做bash(Bourne Again Shell),即bash是sh的增强版本。
  • 如果shell提示符的最后一个字符是#,而不是一个$符号,那么终端会话将享有超级用户特权。
  • 即使没有运行terminal,一些终端会话也会在图形桌面的后台运行,这叫做虚拟终端或者虚拟控制台。在绝大多数系统中,通过依次按下Ctrl-Alt-F1键到Ctrl-Alt-F6组合键可以访问大部分Linux发行版中的终端会话。

2.(文件目录)导航

  • 以“.”字符开头的文件名是隐藏的。这仅说明ls命令不会列出这些文件,除非输入ls -a
  • Linux没有文件扩展名的概念。
  • Linux创建文件名的过程,最后仅使用句号,连字符和下划线这些特殊字符。

3.Linux系统

  • 大部分命令看起来如下所示:

    command -options arguments

    • 命令后面跟有一个或多个选项
    • 命令后面还会跟有一个或多个参数,这些参数是命令作用的对象
  • ls命令的长列表字段(-l)

    • -rw-r-r--:

      • 第一个字符表示文件的类型。在不同的类型之间,开头的"-"表示该文件是一个普通文件,d表示是一个目录。
      • 紧接着的三个字符表示文件所有者的权限。
      • 再接着的三个字符表示文件所属组中成员的访问权限。
      • 最后三个字符,表示其他所有人的访问权限。
  • Linux发布了一个Linux文件系统层次标准(Linux Filesystem Hierarchy Standard)1

4.操作文件和目录

  • 类UNIX操作系统(如Linux)并不包含还原删除操作的命令。一旦使用rm命令,就彻底删除了。
  • rm命令和通配符一起使用的时候,除仔细检查输入内容外,可使用ls命令预先对通配符做出测试,这将显示欲删除的文件。
  • 硬链接由两条重要的局限性:
    1. 硬链接不能引用自身文件系统以外的文件。也就是说,链接不能引用与该链接不在同一磁盘分区的文件。
    2. 硬链接无法引用目录
  • 符号链接是为了克服硬链接的局限性而创建的。符号链接与Windows系统下的快捷方式非常相似,但是,符号链接要早于Windows的快捷方式很多年
  • 由于文件名是由链接创建的,所以一个文件通常至少有一个链接。
  • 创建硬链接时,实际上是创建了额外的名称,这些名称都指向同一数据部分。系统分配了一些列的盘块给所谓的索引节点(inode),该节点随后与文件名称部分建立关联。因此,每个硬链接都指向包含文件内容的具体索引节点。
  • 创建符号链接时,同时也创建了一个文本用来描述目标文件在哪里与符号链接有关联。
  • 大部分(对符号链接的)操作,是以链接目标作为对象的,而非链接本身。而rm命令是个例外。当删除一个链接的时候,链接本身被删除,但是目标文件依旧存在。

5.命令的使用

  • 一条命令无外乎以下4种情况:

    • 可执行程序
    • shell内置命令
    • shell函数。shell函数是合并到环境变量中的小型shell脚本。
    • alias命名。
  • which命令只适用于可执行程序,而不适用于内置命令和命令别名。

  • man命令显示的“手册文档”被分成多个部分,它不仅包括用户命令,也包括系统管理命令、程序接口、文件格式等。

  • 系统中安装的很多软件包都有自己的文档文件,它们存放在/usr/share/doc目录中。

6.重定向

  • 程序的运行结果,一般发送到了标准输出stdout
  • 程序的状态信息,一般发送到了标准错误stderr
  • 许多程序可以从一个标准输入stdin的设备获得输入。默认情况下,标准输入链接到键盘
  • 使用重定向操作符>,可以把标准输出导入文件,而不是打印在屏幕上
  • 使用重定向操作符>>,会把重定向的标准输出追加到文件的末尾,而不是重写文件
  • 因为标准错误的文件描述符的索引是2,所以标准错误的重定向操作符是2>
  • 系统提供了一个称作是位桶(bit bucket)的特殊文件,它接受输入但是不对任何输入做处理

7.透过shell看世界

扩展

  • 路径名扩展,pathname expression。通过通配符来实现扩展的机制,叫做路径名扩展。
  • 波浪线扩展。
  • 算数扩展。
  • 花括号扩展。一般用于创建一系列的文件和目录。
  • 参数扩展。
  • 命令替换。

引用

  • 双引号。双引号使得单词分割,路径名扩展,波浪线扩展,花括号扩展都失去作用。但是参数扩展,算数扩展,命令替换仍然生效。
  • 单引号。单引号会抑制所有的扩展。
  • 转义字符。反斜杠称为转义字符。

8.高级键盘技巧

  • shell提供了一种专门用来扩展历史记录项的功能 -- 使用!字符.

9.权限

  • 在UNIX术语中,所有用户是指整个世界(world)。
  • 用户账户定义在/etc/passwd文件中,用户组定义在/etc/group文件中,文件/etc/shadow保存了用户的密码信息。
  • 文件类型:

    属性 文件类型
    - 普通文件
    d 目录文件
    l 符号链接。符号链接后面的文件模式属性都是rwxrwxrwx但是这是伪权限。符号链接的目标文件的权限才是真权限。
    c 字符设备文件。该文件类型表示以字节流处理数据的设备,如终端或调制解调器。
    b 块设备文件。该文件类型表示以数据块方式处理数据的设备,如硬盘驱动或者光盘驱动。
  • 常用的八进制文件模式就下面几种:

    • 7(rwx)
    • 6(rw-)
    • 5(r-x)
    • 4(r--)
    • 0(---)
  • 符号表示法

    • +表示添加一种权限
    • -表示删除一种权限
    • =表示只有指定的权限可用,其它所有的权限都被删除
  • umask命令设置的掩码值只能在当前shell会话中生效,在当前的shell会话结束后,则必须重新设置。

10.进程

  • 一个程序的运行可以触发其它程序的运行,在进程系统中这种情况被表述为父进程创建子进程。
  • TTY是teletype(电传打印机)的缩写,代表了进程的控制终端(controlling terminal)。
  • top命令:
    • x选项,告知ps显示所有的进程,不管它运行在哪个终端。tty列显示x,代表没有控制终端
    • 输出结果中添加了一个命名为STAT(state,而不是stats)的列,代表进程的当前状态.
  • 使进程在后台运行:
    • 命令后面加上&符号即可在后台运行
    • jobs命令,可以查看该终端下所有后台运行的进程
    • fg命令,可以让后台运行的进程回到前台来运行
  • 信号:
    • 使用kill,向进程发送信号,可以终止进程。默认是SIGTERM(15)
    • 如果要强制杀死,可以使用kill -9 pid

11.环境

  • shell变量和环境变量

    • shell变量是由bash存放的少量数据
    • 环境变量就是除此之外的所有其它变量
    • set命令会同时显示shell变量和环境变量,而printenv命令只会显示环境变量
  • 在用户输入命令后,shell不会搜索整个目录来寻找可执行文件,而是会搜索PATH变量中存储的目录列表

  • 一般来说,在PATH中添加目录,或者定义额外的环境变量这些操作,需要放入到.bash_profile文件中。其它的操作应该放在.bashrc文件.

  • 扩展名为.bak, .sav, .old, .orig是常用的标示备份文件的方法.

12.VIM

基本操作我已经熟悉,这章略过.

13.定制提示符

  • 提示符是由名为PS1(prompt string 1的缩写)这个环境变量来定义的。

14.软件包管理

pass

15.存储介质

  • etc/fstab文件内容列出了系统启动时挂载的设备(通常是硬盘分区)
  • 卸载设备能确保缓存中的所有剩余数据写入设备,从而设备能够安全移除。

16.网络

  • ping命令会向指定的网络主机发送特殊网络数据包IMCP ECHO_REQUEST.
  • eh0是以太网端口,lo是系统用来访问自己的回环虚拟接口,也就是localhost。
  • SSH协议解决了于远程主机进行安全通信的两个基本问题:第一,该协议能验证远程主机的身份是否真实,从而避免中间人攻击;第二,该协议将本机于远程主机之间的通信内容全部加密。
  • ssh命令除了能开启远程系统上的shell会话之外,还能直接执行单个命令。

17.文件搜索

  • locate命令的搜索数据库是由另一个叫做updatedb的程序创建,这个程序通常用cron定时执行,所以有时locate查找的结果不是最新的

  • locate程序查找文件仅仅是依据文件名,而find程序则是依据文件的各种数据在既定的目录(递归其下面的子目录)里面查找。

18.归档与备份

  • gzip命令用于压缩一个或多个文件,文件后缀名一般是.gz
  • bzip2是由Julian Seward开发,和gzip命令相仿,但是使用不同的压缩算法。该算法具有高质量的数据压缩能力,但是压缩的速度却降低了。使用bzip2压缩后的文件以.bz2为后缀名.
  • 归档是一个聚集众多文件并将它们组合成一个大文件的过程,它通常作为系统备份的一部分。
  • tar是类UNIX系统中用于归档文件的经典工具。tar是tape archived饿缩写。
  • 使用tar进行解压缩,除非使用超级用户的名义执行命令,否则提取出来的文件和目录的所有权属于执行命令的用户,而不是文件的原始作者。
  • zip命令即是压缩工具,也是文件归档工具。Linux用户主要使用zip程序与Windows系统交换文件,而不是将其用于压缩或者归档文件。
  • 关于zip,有一点需要注意(与tar命令相反),即如果指定的归档文件已经存在,那么zip仅仅会更新而不会取而代之。
  • 针对类UNIX系统,使用rsync命令可以进行文件同步。该命令使用rsync远程更新协议,这个协议允许rsync命令快速检测到本地和远程系统上两个目录之间的不同,从而以最少数量的复制动作以完成两个目录之间的同步.
  • rsync命令不支持远程系统和远程系统之间的复制.

19.正则表达式

已经熟悉,略过.

20.文本处理

  • sort命令可以允许多个文件作为其输入参数
  • uniq参数近针对已排序的输入数据进行去重
  • diffpatch是代码提交更新中最主要使用的两个命令,包括git命令也有用到.

21.格式化输出

pass

22.打印

pass

23.编译程序

  • ./configure其实是执行源代码树下的一个shell脚本,它的任务就是分析生成环境。大多数的源代码都包含这个脚本
  • make程序的作用就是输入Makefile,该文件描述生成最后可执行程序时的各部件之间的联系和依赖关系.
  • 一般打包好的源代码都包含一个特殊的make target程序,就是make install.这个程序的目的是把在系统目录下安装最后生成的可执行程序.

24 ~ 35. shell脚本语言相关内容

阅读了一遍书中内容,暂时没有内容学shell,只要保持大概看得懂就行了。

36.其它命令

  • 组命令使用花括号括起来,子shell使用圆括号
  • 子shell在当前shell的子拷贝中执行命令,而组命令在当前shell执行所有命令。在子shell退出的时候,复制的环境变量也就消失了。
  • 在一个好的设计中,脚本应该针对用户注销和关闭电脑的情况下作出反应,做一些比如删除临时文件的清理工作。trap命令可以针对不同的SIGNAL作出反应.
  • wait命令可以让父脚本暂停,直到指定的进程(比如子脚本)结束.
  • 命名管道,可以建立两个进程之间的通信。

猜你喜欢

转载自www.cnblogs.com/thomaszdxsn/p/linux-ming-ling-xing-da-quan-bi-ji-ji-lu.html