一个多月都没有记录东西了,最近的生活着实是有点废!不过好在系统的看了一本书《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
命令也支持通配符,这在系统因负载过大而变得很慢时很有用
监测磁盘空间
- 挂载、卸载存储媒体
mount
和umount
df
命令可以让你很方便地查看所有已挂载磁盘的使用情况,du
命令可以显示某个特定目录(默认情况下是当前目录)的磁盘使用情况。
处理数据文件
- 排序数据
sort
命令 - 搜索数据
grep
:grep [options] pattern [file]
- 压缩归档数据
tar
:tar -zxvf filename.tgz
3. 理解shell
shell的父子关系
进程就是正在运行的程序。bash shell是一个程序,当它运行的时候,就成为了一个进程。一个运行着的shell就是某种进程而已。
图1:子shell的嵌套关系
进程列表
你可以在一行中指定要依次运行的一系列命令。这可以通过命令列表来实现,只需要在命令之间加入分号(;)即可。命令列表要想成为进程列表,这些命令必须包含在括号里。
注:进程列表是一种命令分组(command grouping)。另一种命令分组是将命令放入花括号中,并在命令列表尾部加上分号(;)。语法为
{ command; }
。使用花括号进行命令分组并不会像进程列表那样创建出子shell。
shell 的内建命令
外部命令,有时候也被称为文件系统命令,是存在于bash shell之外的程序。当外部命令执行时,会创建出一个子进程。
内建命令和外部命令的区别在于前者不需要使用子进程来执行。它们已经和shell编译成了一体,作为shell工具的组成部分存在。不需要借助外部程序文件来运行。内建命令的执行速度要更快,效率也更高。
命令别名:
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
命令删除元素的结果