第3章 基本的bash shell命令

大多数Linux发行版的默认shell都是GNU bash shell。本章将介绍bash shell的一些基本特性,例如:bash手册、tab键自动补全、显示文件内容,带你逐步了解怎样用bash shell提供的基本命令来操作Linux文件和目录。

3.1 启动shell
  GNU bash shell能提供对Linux系统的交互式访问。它是作为普通程序运行的,通常是在用户登录终端时启动的。登录时系统启动的shell依赖于用户账户的配置,大多数Linux发行版的默认shell都是GNU bash shell。

  (1)/etc/passwd文件包含了所有系统用户账户列表以及每个用户的基本配置信息。以下是从/etc/passwd问件中取出的样例条目:christine:x:501:501:christine Bresnahan:/home/christine:/bin/bash 每个条目共有七个字段,字段之间用冒号分隔。最后一个字段指定了用户使用的shell程序(其余字段将在后面章节介绍),这意味着当christine登录Linux系统后,bash shell会自动启动。

  (2)尽管bash shell会在登录时自动启动,但是否会出现shell命令行界面(CLI)则依赖于所使用的登录方式:
   ①虚拟控制台终端登录:CLI自动出现;
   ②图形化桌面环境登录:需要启动一个图形化终端仿真器来进入CLI;

3.2 shell提示符
  一旦启动了终端仿真软件包或者登录Linux虚拟台,就会看到shell CLI提示符。提示符就是进入shell世界的大门,是用户输入shell命令的地方。

  (1)默认的bash shell提示符是美元符号($),这个符号表示shell在等待用户输入。不同的Linux发行版采用不同格式的提示符:
   ①在Ubuntu Linux系统上: christine@server01:~$
   ②在CentOS系统上: [christine@server01:~]$

  (2)除了作为shell的入口,提示符还能够提供其他的辅助信息。在上面的例子中:提示符中显示了当前用户ID名christine、系统名server01、当前目录~。(后续章节会介绍更多可以在提示符中显示的内容)

3.3 bash手册
  (0)相关命令:
   ①man 命令: man命令用来访问存储在Linux系统上的手册页面;
   ②man -k 关键字: 可以使用关键字搜索手册页;
   ③man 内容区域号 命令:只看各部分内容简介;
   ④info 命令:查看一些关于Linux shell、工具、GNU项目开发程序的说明文档;

  大多数Linux发行版自带用以查找shell命令及其他GNU工具信息的在线手册。man命令用来访问存储在Linux系统上的手册页面: man 命令。当使用man命令来查看命令手册页时,这些手册页是由分页程序(pager)来显示的。分页程序是一种实用工具,能够逐页显示文本,可以通过点击空格键进行翻页,或使用回车键逐行查看。另外还可以使用箭头键向前后滚动手册页的内容(假如终端仿真软件包支持箭头键功能)。读完了手册页,可以点击q键退出。
  (1)Linux手册页惯用的节名:
   ①Name:显示命令名和一段简短的描述;
   ②Synopsis:命令的语法;
   ③Configuration:命令配置信息;
   ④Description:命令的一般性描述;
   ⑤Options:命令选项描述;
   ⑥Exit Status:命令的退出状态指示;
   ⑦Return Value:命令的返回值;
   ⑧Errors:命令的错误信息;
   ⑨Environment:描述所使用的环境变量;
   ⑩Files:命令用到的文件;
   ①Versions:命令的版本信息;
   ②Conforming To:命令所遵从的标准;
   ③Notes:其他有帮助的资料;
   ④Bugs:提供提交bug的途径;
   ⑤Example:展示命令的用法;
   ⑥Authors:命令开发人员的信息;
   ⑦Copyright:命令源代码的版权状况;
   ⑧See Also:与该命令类似的其他命令;

  (2)若是忘记命令名,可以使用关键字搜索手册页: man -k 关键字。阅读第一段或者Description部分的前两段,可以学到很多技术行话,很有用。并不是每一个命令的手册页都包含表3-1中列出的所有节,还有一些命令的节名并没有在上面的节名惯用标准中列出。

  (3)在手册页的左上角和右上角,单词XTERM后的括号中有一个数字,这表示显示的手册页来自的内容区域。一个命令偶尔会在多个内容区域都有对应的手册页。man工具通常提供的是命令所对应的最低编号的内容。通过下述命令可只看各部分内容简介: man 内容区域号 命令。Linux手册页的内容区域(1-9):
   ①区域号1:可执行程序或shell命令;
   ②区域号2:系统调用;
   ③区域号3:库调用;
   ④区域号4:特殊文件;
   ⑤区域号5:文件格式与约定;
   ⑥区域号6:游戏;
   ⑦区域号7:概览、约定及杂项;
   ⑧区域号8:超级用户和系统管理员命令;
   ⑨区域号9:内核例程;

  (4)手册页不是唯一的参考资料。还有一种命名为info页面的信息。可以通过info info来了解info页面的相关内容。另外,大多数命令都可以接受-help或--help选项。
   ①--help或-help:--help或-help并不是一个独立的工具。而是作为一种命令的选项,大部分的GNU工具都具备这个选项;--help或-help选项可以用来显示一些工具的信息。
   ②man工具:用来显示系统手册页中的内容,这些内容大多数都是对命令的解释信息。通过查看系统文档中的man页可以得到程序的更多相关主题信息和Linux的更多特性。
   ③info工具:一个基于菜单页的超文本系统,由GNU项目开发并由Linux发布。info工具包括一些关于Linux shell、工具、GNU项目开发程序的说明文档。

3.4 浏览文件系统
  当登录系统并获得shell命令提示符后,用户通常位于用户的主目录。主目录是分配给用户账户的一个特有目录。用户账户在创建之后,系统通常会为其分配一个特有的目录(主目录,参见第七章)。
  (0)相关命令
   ①cd destination: 使用切换目录命令cd将shell会话切换到另一个目录,destination缺省则进入用户主目录。
   ②pwd: 使用显示当前目录命令pwd显示当前工作目录,命令返回的是绝对文件路径。

  (1)Linux文件系统
   ①windows为每个物理磁盘驱动器分配一个盘符,每个驱动器都会有自己的目录结构,以便访问存储其中的文件。Linux在路径名中不使用驱动器盘符。Linux将文件存储在单个目录结构中,这个目录被称之为虚拟目录(virtual directory)。虚拟目录将安装在PC上的所有存储设备的文件路径纳入单个目录结构中。
   ②Linux虚拟目录结构只包含一个根(root)目录的基础目录。根目录下的目录和文件会按照访问它们的目录路径列出,与windows类似。windows路径: C:\Users\Rich\Documents\test.doc 使用反斜线(\);Linux路径: /home/Rich/Documents/test.doc 使用正斜线(/);Linux中反斜线用来标识转义字符;
   ③在Linux PC上安装的第一块硬盘称为根驱动器。根驱动器包含了虚拟目录的核心,其他目录都是从那里开始构建的。Linux会在根驱动器上创建一些特别的目录,我们称之为挂载点(mount point)。挂载点是虚拟目录中用于分配额外存储设备的目录。虚拟目录会让文件和目录出现在这些挂载点目录中,然而实际上它们却存储在另外一个驱动器中。
    |—bin/
    |—etc/      |—barbara
    |—home/ ——|—jessica
    |—usr/      |—katie
    |—var/      |—rich
      Disk1        Disk2

  (2)Linux文件系统结构是从Unix文件结构演进而来。常见的目录名均基于文件系统层级标准(文件系统层级标准,filesystem hierarchy standard,FHS),很多Linux发行版都遵循FHS。常见的Linux目录名称为:
   ①/:虚拟目录的根目录,通常不会在此存储文件。
   ②/bin:二进制目录,存放许多用户级的GNU工具。
   ③/boot:启动目录,存放启动文件。
   ④/dev:设备目录,Linux在这里创建设备节点。
   ⑤/etc:系统配置文件目录。
   ⑥/home:主目录,Linux在这里创建用户目录。
   ⑦/lib:库目录,存放系统和应用程序的库文件。
   ⑧/media:媒体目录,可移动媒体设备的常用挂载点。
   ⑨/mnt:挂在目录,另一个可移动媒体设备的常用挂载点。
   ⑩/opt:可选目录,常用于存放第三方软件包和数据文件。
   ①/proc:进程目录,存放现有硬件及当前进程的相关信息。
   ②/root:root用户的主目录。
   ③/sbin:系统二进制目录,存放许多GNU管理员级工具。
   ④/run:运行目录,存放系统运行时的数据。
   ⑤/srv:服务目录,存放本地服务的相关文件。
   ⑥/sys:系统目录,存放系统硬件信息的相关文件。
   ⑦/tmp:临时目录,在该目录中创建和删除临时工作文件。
   ⑧/usr:用户二进制目录,大量用户级的GNU工具和数据文件都存储在这里。
   ⑨/var:可变目录,用以存放经常变化的文件,比如日志文件。

  (3)遍历目录:cd、pwd
   ①使用切换目录命令cd将shell会话切换到另一个目录:cd destination,destination缺省则进入用户主目录。
   ②使用显示当前目录命令pwd显示当前工作目录:pwd,命令返回的是绝对文件路径。
   ③绝对文件路径:定义了在虚拟目录结构中该目录的确切位置,从虚拟目录的根目录开始,相当于目录的全名。绝对文件路径从根目录(/)作为起始。举例:/home/Rich/Documents/
   ④相对文件路径:指定了一个基于当前位置的目标文件路径。有几个特殊字符可用于相对文件路径中:单点符(.)表示当前目录;双点符(..)表示当前目录的父目录;波浪符(~)表示用户主目录;正斜线符号(/)表示根目录。

3.5 文件和目录列表(1s)
  ls基本列表功能是按照字母排序顺序显示当前目录下的文件和目录(按列排序而不是按行排序)。如果用户用的是支持彩色的终端仿真器,ls命令还可以用不同的颜色来区分不同类型的文件。LS_COLORS环境变量控制着这个功能。
  (0)相关命令
   ①ls: 显示当前目录下的文件和目录。

  (1)ls命令格式化输出信息的选项:-F -a -R -l。shell命令的选项可以分开输入,也可以进行合并,比如:ls -FR。
   ①-F:区分文件和目录。在目录后面加了正斜线(/),在可执行文件后面加了星号(*)。
   ②-a:将隐藏文件和普通文件以及目录一起显示出来。隐藏文件一般以点号开头。
   ③-R:递归选项,列出了当前目录下子目录中的文件。若目录较多,则输出会很长。
   ④-l:长列表格式的输出。输出的第一行显示了在目录中包含的总块数。在此之后,每一行都包含了关于文件(或目录)的下列信息:
    1°文件类型(目录d、文件-、字符型文件c、块设备b)
    2°文件权限(参见第6章)
    3°文件的硬链接总数
    4°文件属主的用户名
    5°文件属组的组名
    6°文件的大小(以字节为单位)
    7°文件的上次修改时间
    8°文件名或目录名。

  (2)过滤输出列表:通配符(?、*、[])和过滤器。ls支持在命令中定义过滤器。这个过滤器是一个进行简单文本匹配的字符串,用来决定应该在输出中显示哪些文件或目录。ls命令能够识别“标准通配符”,并在过滤器中用它们进行模式匹配。
   ①当用户指定特定文件的名称作为过滤器时,ls命令只显示该文件的信息。
   ②在过滤器中使用问号(?)代表一个字符;
   ③在过滤器中使用星号(*)代表零个或多个字符;
   ④在过滤器中使用方括号([])。[ai]代表a或者i;[a-i]代表a-i中的某个;[!a]除了a之外的任一个。
   ⑤在过滤器中使用问号(?)、星号(*)、方括号([])被称为文件扩展匹配(file globbing),指的是使用通配符进行模式匹配的过程。通配符正式的名称为元字符通配符(metacharacter wildcards)。除了上述符号,还有更多的元字符通配符可用作文件扩展匹配(感兴趣可自行扩展)。

3.6 处理文件
  (0)相关命令
   ①touch filename: 创建空文件。
   ②cp source destination: 复制文件。
   ③mv source destination: 重命名/移动文件。
   ④rm filename: 删除文件。
   ⑤ln source destination: 硬链接文件。
   ⑥ln -s source destination: 软链接文件。

  (1)创建空文件:touch filename
   ①touch命令创建了你指定的新文件filename,并将你的用户名作为文件的属主。文件的大小为0,因为touch命令只创建了一个空文件。
   ②若指定的新文件filename已经存在,则会改变文件filename的修改时间(不会改变其内容)。
   ③touch -a filename只改变文件filename的访问时间。ls -l --time=atime filename(--time=atime filename选项显示文件的访问时间)。

  (2)复制文件:cp source destination
   ①当source和destination参数都是文件名时,cp命令将源文件复制成一个新文件,并且以destination命名。若destination是个目录,则文件将被复制到destination目录,与源文件同名。新文件就像全新的文件一样,有新的修改时间。
   ②若目标文件已经存在,cp命令可能未必会提醒。加上-i选项,强制询问是否覆盖已有文件。若不回答y,文件复制将不会继续。而cp命令的-R参数可以递归的复制整个目录的内容。
   ③cp命令的源文件source支持通配符。

  (3)重命名/移动文件:mv source destination
   ①可以使用mv命令移动/重命名文件,也可以移动/重命名整个目录。文件移动只会改变文件的位置和名称。文件的inode编号、时间戳和文件内容等不会改变。
   ②mv命令使用-i参数,在试图覆盖已有文件时,会得到提示。
   ③mv命令的源文件/目录source支持通配符。

  (4)删除文件:rm filename
   ①文件删除没有回收站或者垃圾站,一旦删除便无法找回。
   ②filename支持通配符。
   ③选项-i在删除文件时会得到提示;选项-r递归删除目录及其内容;选项-f强制删除,忽略不存在的文件,无需提示;选项-d删除空目录。

  (5)链接文件(ln):如果需要在系统上维护同一文件的两份或着多份副本,除了保存多份单独的物理文件副本(复制文件),还可以采用保存一份物理文件和多个虚拟副本的方法。这种虚拟副本称为链接,分为符号链接(软连接)和硬链接。链接是目录中指向文件真实位置的占位符。
   ①创建符号链接为ln -s source destination:符号链接是一个实实在在的文件,类似于windows系统的快捷模式,它指向存放在虚拟目录结构中某个地方的另一个文件。这两个通过符号链接在一起的文件彼此的内容、大小和文件inode编号均不相同。
   ②创建符号链接为ln source destination:硬链接会创建独立的虚拟文件,其中包含了原始文件的物理信息和物理位置。它们本质上是同一个文件,使用硬链接文件等同于使用源文件。带有硬链接的文件共享inode编号、大小相同、硬链接数+1。删除硬链接(等同于删除源文件),文件硬连接-1,当硬链接为0时,文件才会被真正删除。
   ③只能对处于同一存储媒体的文件创建硬链接。想在不同存储媒体的文件间创建链接,只能使用软连接。要创建连接,原始文件必须存在。
   ④使用ls -i选项可以查看文件的inode编号。linux上的inode编号是索引节点的编号,索引节点中储存文件的元信息,比如文件的创建者、文件的创建日期、文件的大小、文件内容在存储介质中的位置等等。Unix/Linux系统内部不使用文件名,而使用inode号码来识别文件。对于系统来说,文件名只是inode号码便于识别的别称或者绰号。

  (6)制表键自动补全:tab
   ①在使用命令时,很容易输错命令、目录名、文件名。"制表键(tab)自动补全"允许在输入命令、目录名、文件名时使用制表键(tab),让shell帮忙自动补全内容。
   ②一般来说,tab键可以补全命令、目录名、文件名。

3.7 处理目录
  (0)相关命令
   ①mkdir New_Dir: 在Linux中创建空目录。
   ②rmdir New_Dir: 在Linux中删除空目录。

  (1)创建目录(mkdir)
   ①在Linux中创建空目录:mkdir New_Dir
   ②-p选项可以根据需要创建缺失的父目录: mkdir -p dir1/dir2/New_Dir

  (2)删除目录(rmdir)
   ①在Linux中删除空目录:rmdir New_Dir
   ②默认情况下,rmdir只能删除空目录,要先把目录下的文件删除才能删目录。
   ③rmdir并无-i选项来询问是否删除目录。可使用rm命令的-r选项了来递归的删除目录下的文件和目录本身。

3.8 查看文件内容
  (0)相关命令
   ①file myfile: 查看文件是什么类型的。
   ②cat file: 示文本文件中所有数据。
   ③more file: 分页显示文本文件的内容。
   ④less file: 分页显示文本文件的内容,more命令的进阶。
   ⑤tail file: 显示文件最后几行的内容(文件的尾部)。
   ⑥head file: 显示文件最前几行的内容(文件的头部)。

  (1)查看文件类型(file)
   ①file命令能够探测文件的内容,查看文件是什么类型的:file myfile。
   ②几种常见的文件类型:ASCII text(ASCII字符编码)、directory(目录)、symbolic link to 'xx'(xx的硬链接)、Bourne-Again shell script,ASCII text executable(脚本文件)。

  (2)查看整个文件内容(cat、more、less)
   ①cat命令(cat file)是显示文本文件中所有数据的得力工具。对大型文件来说,cat命令有点繁琐。文件的文本会在显示器上一晃而过。cat命令一旦运行,便无法控制后面的操作。
    1°-n参数会给所有的行加上行号。
    2°-b参数会给有文本的行加上行号,忽略换行符。
    3°-T参数会忽略制表符,-T参数会用^I字符组合替换文本中所有制表符。
   ②more命令(more file):more命令会显示文本文件的内容,但会在显示每页数据之后停下来。more命令底部显示了一个标签,其表明了当前浏览文本文件的位置。more命令是分页工具,可通过空格键或回车键以逐行向前的方式浏览文本文件,按q键退出。
   ③less命令(less file):less命令是more命令的进阶,一次显示一屏的文本文件。除了支撑和more命令相同的命令集,它还包括更多的选项。其中一组特性是能够识别上下键以及上下翻页键(假如终端配置正确)。

  (3)查看部分文件(tail、head)
   ①tail命令(tail file)会显示文件最后几行的内容(文件的尾部)。默认情况下会显示文件的末尾10行。
    1°-n参数来修改所显示的行数(-数字也可以)。tail -n 5 file 等同于 tail -5 file。
    2°-f参数是tail命令的一个突出特性。允许在其他进程使用该文件时查看文件的内容。tail命令会保持活动状态并不断显示添加到文件中的内容。这是实时监测系统日志的绝妙方式。
   ②head命令(head file)会显示文件最前几行的内容(文件的头部)。默认情况下会显示文件的头部10行。
    1°-n参数来修改所显示的行数(-数字也可以)。head -n 5 file 等同于 head -5 file。
    2°文件的开头通常不会改变,head命令不支持-f参数特性。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值