一个多月都没有记录东西了,最近的生活着实是有点废!不过好在系统的看了一本书《Linux命令行与shell脚本编程大全(第3版)》,负罪感少了点,目前(11.03)还没看完但是准备把看过的内容精简整理下,记录在此!


1. 基本的bash Shell命令

启动shell

GNU bash shell能提供对Linux系统的交互式访问。/etc/passwd文件包含了所有系统用户账户列表以及每个用户的基本配置信息。每个条目有七个字段,字段之间用冒号分隔。

bash手册

大多数Linux发行版自带用以查找shell命令及其他GNU工具信息的在线手册。man命令用来访问存储在Linux系统上的手册页面。阅读手册还能学习到很多技术行话。读完了手册页,可以点击q键退出。

基本命令

之前已经写过有基本命令的相关文章:浏览文件系统及查看文件内容文件和目录列表。下面是一些琐碎的点。

Linux将文件存储在单个目录结构中,这个目录被称为虚拟目录(virtual directory)。虚拟目录将安装在PC上的所有存储设备的文件路径纳入单个目录结构中。Linux使用正斜线(/)而不是反斜线(\)在文件路径中划分目录。在Linux中,反斜线用来标识转义字符。在Linux PC上安装的第一块硬盘称为根驱动器。根驱动器包含了虚拟目录的核心,其他目录都是从那里开始构建的。

2. 更多的bash shell命令

本部分包括Linux系统管理命令,演示如何通过命令行命令来探查Linux 系统的内部信息,最后介绍一些可以用来操作系统上数据文件的命令

“资源管理器”

说起资源管理器,Windows用户不会陌生,程序卡了,管理器界面结束进程,over!对于Linux而言,ps命令就是工具中的瑞士军刀,它能输出运行在系统上的所有程序的许多信息。默认情况下, ps 命令只会显示运行在当前控制台下的属于当前用户的进 程。但该命令的不足之处是它只能显示某个特定时间点的信息。这个时候就需要top命令了,它能够实时显示,可以说和“资源管理器”有的像了!

结束进程则用到以下命令:

  • kill:通过进程ID(PID)给进程发信号,因此你只能用进程的PID而不能用命令名来结束进程。
  • kill all:它支持通过进程名而不是PID来结束进程。 killall 命令也支持通配符,这在系统因负载过大而变得很慢时很有用

监测磁盘空间

  1. 挂载、卸载存储媒体 mountumount
  2. df 命令可以让你很方便地查看所有已挂载磁盘的使用情况, du命令可以显示某个特定目录(默认情况下是当前目录)的磁盘使用情况。

处理数据文件

  1. 排序数据 sort命令
  2. 搜索数据 grepgrep [options] pattern [file]
  3. 压缩归档数据 tartar -zxvf filename.tgz

3. 理解shell

shell的父子关系

进程就是正在运行的程序。bash shell是一个程序,当它运行的时候,就成为了一个进程。一个运行着的shell就是某种进程而已。

图1:子shell的嵌套关系

进程列表

  • 你可以在一行中指定要依次运行的一系列命令。这可以通过命令列表来实现,只需要在命令之间加入分号(;)即可。命令列表要想成为进程列表,这些命令必须包含在括号里。

  • :进程列表是一种命令分组(command grouping)。另一种命令分组是将命令放入花括号中,并在命令列表尾部加上分号(;)。语法为{ command; } 。使用花括号进行命令分组并不会像进程列表那样创建出子shell。

shell 的内建命令

  1. 外部命令,有时候也被称为文件系统命令,是存在于bash shell之外的程序。当外部命令执行时,会创建出一个子进程

  2. 内建命令和外部命令的区别在于前者不需要使用子进程来执行。它们已经和shell编译成了一体,作为shell工具的组成部分存在。不需要借助外部程序文件来运行。内建命令的执行速度要更快,效率也更高。

  3. 命令别名alias,命令别名允许你为常用的命令(及其参数)创建另一个名称,从而将输入量减少到最低。

3. Linux环境变量

bash shell用一个叫作环境变量(environment variable)的特性来存储有关shell会话和工作环境的信息。这项特性允许你在内存中存储数据,以便程序或shell中运行的脚本能够轻松访问到它们。

在bash shell中,环境变量分为两类:

  • 全局变量
  • 局部变量

设置局部用户定义变量

  • 通过等号给环境变量赋值,值可以是数值字符串。引用环境变量的值,则只要通过美元符号就可以:$variable如果要给变量赋一个含有空格的字符串值,必须用单引号来界定字符串的首和尾。

  • 变量名、等号和值之间没有空格,这一点非常重要。如果在赋值表达式中加上了空格,bash shell就会把值当成一个单独的命令

设置全局环境变量

  • 先创建一个局部环境变量,然后再把它导出到全局环境中,这个可通过 export 命令来完成,变量名前面不需要加$
  • 修改子shell中全局环境变量并不会影响到父shell中该变量的值
  • 子shell无法使用 export 命令改变父shell中全局环境变量的值

删除环境变量

  • 可以用 unset 命令完成这个操作。在 unset 命令中引用环境变量时,记住不要使用 $(引用变量不需要用美元符号)

默认的 shell 环境变量

  • 默认情况下,bash shell会用一些特定的环境变量来定义系统环境
  • 所有的环境变量名均使用大写字母

设置 PATH 环境变量

PATH 环境变量定义了用于进行命令和程序查找的目录。类似于Windows中的环境变量,当你在其中添加某个EXE文件的路径就可以在“命令行”中直接运行。

  • PATH 中的目录使用冒号分隔
  • 引用原来的 PATH 值,把新的搜索目录添加到现有的 PATH 环境变量中,无需从头定义
  • 如果希望子shell也能找到你的程序的位置,一定要记得把修改后的 PATH 环境变量导出
  • 文件以点号开头,这说明它们是隐藏文件(不会在通常的 ls 命令输出列表中出现)

数组变量

环境变量有一个很酷的特性就是,它们可作为数组使用。要给某个环境变量设置多个值,可以把值放在括号里,值与值之间用空格分隔。

  • 索引单个数组元素用方括号
  • 环境变量数组的索引值都是从零开始,要显示整个数组变量,可用星号作为通配符放在索引值的位置
  • 注意使用unset命令删除元素的结果