Shell终端命令行的重点知识
对于程序员来说,命令行是常用的工具,在Mac和Linux系统中,命令行使用的是Shell语言,对于常用的工具,我都喜欢选把它研究透彻,本文就是我在学习Shell语言时收集和总结的文档,为了方便大家,现分享如下:
1. 命令格式
command [options] [arguments]
其中,各符号的表示的含意如下:
command:命令
options:选项;有2种表示法:
--
单词:由前面2个“-”和2个(包含2个)以上的字母组成;-
单字:前面1个“-”和1个字母组成;argument:参数
在查看命令帮助时,会出现[],<>,|
等符号,它们的含义如下:
[]:表示是可选的;
<>:表示是可变化的;
x|y|z:表示只能选择一个;
-abc:表示三个参数(或任何二个)的混合使用;
/ :或者;
2. 帮助命令
help <Command>
适用于内部命令
<Command> –help/-h
适用于外部命令
man <Command>
查看命令描述或手册页(Manual);
备注:
manual 手册是分章节的;man # Command (#表示章节号)
各个章节的所讲的内容如下:
- 所有用户可以使用的命令
- 系统内核调用,不是每个命令都有系统调用(如:man 2 read)
- 库调用
- 特殊文件,如:/dev/tty1
- 文件格式(命令配置文件的语法,如:man 5 passwd)
- 游戏相关
- 杂项
- 管理员命令,如:fdisk
man命令查询操作参考《vi,vim用法》中的命令模式
man命令格式符意义:
[]:可选内容;
<>:必须给出内容;
a|b|c:多选一;
…:可以有多个;
info <Command>
有超链接的文档,info是信息页,提供作者、版本,什么时候发布等更详细信息,man手册是告诉你怎么用;
README
绝大多数程序都有相应的帮助文档,保存在/usr/share/doc文件夹中;
3. Shell的启动配置文件
当我们登录系统后,启动 bash 程序,并且会读取一系列称为启动文件的配置脚本,这些文 件定义了默认的可供所有用户共享的 shell 环境。然后是读取更多位于我们自己主目录中的启 动文件,这些启动文件定义了用户个人的 shell 环境。精确的启动顺序依赖于要运行的 shell 会 话类型。有两种 shell 会话类型:一个是登录 shell 会话,另一个是非登录 shell 会话。
登录 shell 会话会提示用户输入用户名和密码;例如,我们启动一个虚拟控制台会话。当我 们在 GUI 模式下运行终端会话时,非登录 shell 会话会出现。
登录 shell 会读取一个或多个启动文件,正如表 12 - 2 所示:
登录shell会话的启动文件.png
非登录 shell 会话会读取以下启动文件:
非登录shell会话的启动文件.png
除了读取以上启动文件之外,非登录 shell 会话也会继承它们父进程的环境设置,通常是一 个登录 shell。
浏览一下你的系统,看一看系统中有哪些启动文件。记住-因为上面列出的大多数文件名 都以圆点开头(意味着它们是隐藏文件),你需要使用带 “-a” 选项的 ls 命令。
在普通用户看来,文件 ∼/.bashrc 可能是最重要的启动文件,因为它几乎总是被读取。非 登录 shell 默认会读取它,并且大多数登录 shell 的启动文件会以能读取 ∼/.bashrc 文件的方式 来书写。
4. Mac系统的Shell的配置文件
打开mac终端,输入:
echo $SHELL
如果输出的是csh或者是tcsh,那么你用的就是C Shell。
如果输出的是bash,sh,zsh,那么你的用的可能就是Bourne Shell的一个变种。
Mac OS X 10.2之前默认的是C Shell。
Mac OS X 10.3之后默认的是Bourne Shell。
在这里只介绍Bourne Shell(sh)关于配置文件的等级。
在Bourne Shell下有三种配置文件,如下:
/ ect/profile
/ect/bashrc
~/.bash_profile
注意:
有些文章说:Linux里边是.bashrc 而MAC 是.bash_profile,所以Mac下只需要设置profile和.bash_profile。
但是我发现mac下也有/ect/bashrc配置文件
它们的作用如下:
- /ect/profile(一般不建议修改这个文件)
全局(公有)配置,不管是哪个用户,登陆是都会读取该文件。
- ~/.bash_profile
一般在这个文件中添加用户级环境变量;
若bash shell是以login方式执行时,才会读取此文件。该文件仅仅执行一次默认情况下,他设置一些环境变量。
在.bash_profile中设置的配置信息只有在打开终端的时候执行有效,终端关闭后,之前的设置的命令则无效; - /ect/bashrc(mac没有此配置文件)
全局(公有)配置,bash shell执行时,不管是何种方式,都会读取此文件。
可以加入mysqlstart、mysql和mysqladmin命令的别名,保证每一个用户都可以使用这3个命令。
5. 应该使用哪个配置文件
按照通常的规则,添加目录到你的 变量或者是定义额外的环境变量,要把这些 更改放置到 文件中(或者其替代文件中,根据不同的发行版。例如, 使 用 文件)。对于其它的更改,要放到 文件中。除非你是系统管理员,需要为系统 中的所有用户修改默认设置,那么则限定你只能对自己主目录下的文件进行修改。当然,有可 能会更改 目录中的文件,比如说 文件,而且在许多情况下,修改这些文件也是明智 的,但是现在,我们要安全起见。
6. 命令的查找目录
当在终端直接输入命令时,如:guobinyongMac:~ guobinyong$ ls
,系统会在一些指定的目录中查找相应命令的可执行文件,然后执行查找到的可执行文件;如果命令的可执行文件不在默认的目录中,则需要在输入命令时写出命令的路径,如:
假设我需要执行命令gby,而gby文件在目录./PATH/
下,则需要这样输入命令:
guobinyongMac:~ guobinyong$ ./PATH/gby
这样是不太方便的,如果不想输入命令的路径,则可以把命令的所在目录配置为终端的命令查找目录;
如何配置呢?通过PATH变量!
PATH变量中保存的是命令查找路径的列表,目录之间用冒号 :
分隔;配置方法如下:
在终端的配置文件~/.bash_profile
(如果不存在,则创建该文件)中添加如下代码:
export PATH=$PATH:新的路径 //把您要添加的路径写在$PATH:后面
7. 重点命令讲解
export命令
export命令Shell内建命令 export命令用于将shell变量输出为环境变量,或者将shell函数输出为环境变量。
一个变量创建时,它不会自动地为在它之后创建的shell进程所知。而命令export可以向后面的shell传递变量的值。当一个shell脚本调用并执 行时,它不会自动得到原为脚本(调用者)里定义的变量的访问权,除非这些变量已经被显式地设置为可用。export命令可以用于传递一个或多个变量的值到任何后继脚本。
语法:
export(选项)(参数)
选项:
-f:代表[变量名称]中为函数名称;
-n:删除指定的变量。变量实际上并未删除,只是不会输出到后续指令的执行环境中;
-p:列出所有的shell赋予程序的环境变量。
参数:
变量:指定要输出或者删除的环境变量。