Shell终端命令行的重点知识

对于程序员来说,命令行是常用的工具,在Mac和Linux系统中,命令行使用的是Shell语言,对于常用的工具,我都喜欢选把它研究透彻,本文就是我在学习Shell语言时收集和总结的文档,为了方便大家,现分享如下:

Linux命令格式

command [options] [arguments]

其中,各符号的表示的含意如下:

  • command:命令
  • options:选项;有2种表示法:
    1. --单词:由前面2个-和2个(包含2个)以上的字母组成;
    2. -单字:前面1个-和1个字母组成;
  • argument:参数

在查看命令帮助时,会出现[],<>,|等符号,它们的含义如下:

  • []:表示是可选的;
  • <>:表示是可变化的;
  • x|y|z:表示只能选择一个;
  • -abc:表示三个参数(或任何二个)的混合使用;
  • / :或者;

帮助命令

help  <Command>

适用于内部命令

<Command>  –help/-h

适用于外部命令

man  <Command>

查看命令描述或手册页(Manual);
备注:
manual 手册是分章节的;man # Command (#表示章节号)
各个章节的所讲的内容如下:

  1. 所有用户可以使用的命令
  2. 系统内核调用,不是每个命令都有系统调用(如:man 2 read
  3. 库调用
  4. 特殊文件,如:/dev/tty1
  5. 文件格式(命令配置文件的语法,如:man 5 passwd
  6. 游戏相关
  7. 杂项
  8. 管理员命令,如:fdisk

man命令查询操作参考《vi,vim用法》中的命令模式

man命令格式符意义:

  • []:可选内容;
  • <>:必须给出内容;
  • a|b|c:多选一;
  • :可以有多个;
info <Command>

有超链接的文档,info 提供信息页,提供作者、版本,什么时候发布等更详细信息,man手册是告诉你怎么用;

README
绝大多数程序都有相应的帮助文档,保存在 /usr/share/doc 文件夹中;

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 文件的方式 来书写。

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个命令。

应该使用哪个配置文件

按照通常的规则,添加目录到你的 变量或者是定义额外的环境变量,要把这些 更改放置到 文件中(或者其替代文件中,根据不同的发行版。例如,使用文件)。对于其它的更改,要放到 文件中。除非你是系统管理员,需要为系统 中的所有用户修改默认设置,那么则限定你只能对自己主目录下的文件进行修改。当然,有可 能会更改 目录中的文件,比如说 文件,而且在许多情况下,修改这些文件也是明智 的,但是现在,我们要安全起见。

命令的查找目录

当在终端直接输入命令时,如:guobinyongMac:~ guobinyong$ ls,系统会在一些指定的目录中查找相应命令的可执行文件,然后执行查找到的可执行文件;如果命令的可执行文件不在默认的目录中,则需要在输入命令时写出命令的路径,如:

假设我需要执行命令 gby,而 gby 文件在目录./PATH/下,则需要这样输入命令:

guobinyongMac:~ guobinyong$ ./PATH/gby

这样是不太方便的,如果不想输入命令的路径,则可以把命令的所在目录配置为终端的命令查找目录;

如何配置呢?通过PATH变量!

PATH变量中保存的是命令查找路径的列表,目录之间用冒号 : 分隔;配置方法如下:
在终端的配置文件 ~/.bash_profile (如果不存在,则创建该文件)中添加如下代码:

export PATH=$PATH:新的路径     //把您要添加的路径写在$PATH:后面

常用命令

export命令

export命令Shell内建命令 export命令用于将shell变量输出为环境变量,或者将shell函数输出为环境变量。
一个变量创建时,它不会自动地为在它之后创建的shell进程所知。而命令export可以向后面的shell传递变量的值。当一个shell脚本调用并执 行时,它不会自动得到原为脚本(调用者)里定义的变量的访问权,除非这些变量已经被显式地设置为可用。export命令可以用于传递一个或多个变量的值到任何后继脚本。

语法:

export(选项)(参数)

选项:

  • -f:代表[变量名称]中为函数名称;
  • -n:删除指定的变量。变量实际上并未删除,只是不会输出到后续指令的执行环境中;
  • -p:列出所有的shell赋予程序的环境变量。

参数:

  • 变量:指定要输出或者删除的环境变量。

alias命令

Shell内建命令 alias命令用来设置指令的别名。我们可以使用该命令可以将一些较长的命令进行简化。使用alias时,用户必须使用单引号''将原来的命令引起来,防止特殊字符导致错误。
alias命令的作用只局限于该次登入的操作。若要每次登入都能够使用这些命令别名,则可将相应的alias命令存放到bash的初始化文件/etc/bashrc中。

语法:

alias(选项)(参数) 

选项:

  • -p:打印已经设置的命令别名。

参数:
命令别名设置:定义命令别名,格式为命令别名='实际命令'

示例:
alias 的基本使用方法为:

alias 新的命令='原命令 -选项/参数' 

例如:alias l='ls -lsh'将重新定义ls命令,现在只需输入 l 就可以列目录了。直接输入 alias 命令会列出当前系统中所有已经定义的命令别名。

备注:
要删除一个别名,可以使用 unalias 命令,如 unalias l。

问题解决方案

输出目录层级结构

find . -print | sed -e 's;[^/]*/;|____;g;s;____|; |;g'

多个命令在一行中执行

为了方便用户一键操作,经常会有将多个命令写在一行的需求;这种需求的实现方式有多种,如下:

方式1:命令之间用;(分号)隔开

语法

命令 ; 命令

命令会依次执行;

方式2:命令之间用&&隔开

语法

命令 && 命令

&& 是具有短路特性的逻辑与运算符;
应用在两个命令语句间表示:只有在前一个命令执行成功后,才会执行下一个;

方式3:命令之间用||隔开

语法

命令 || 命令

|| 是具有短路特性的逻辑或运算符;
应用在两个命令语句间表示:只有在前一个命令执行失败后,才会执行下一个命令;

方式4:用()包裹

语法

(命令1;命令2)

开启一个子Shell环境来执行括号中的命令。

方式5:用{}包裹

语法

{ 命令1;命令2; }

在当前的Shell中执行 {} 中的命令;

(){}的区别

相同点:

  • (){} 都是把一串的命令放在括号里面,并且命令之间用 ; 号隔开

不同点:

  • ()只是对一串命令重新开一个子shell进行执行,{}对一串命令在当前shell执行
  • ()最后一个命令可以不用分号,{}最后一个命令要用分号
  • ()里的第一个命令和左边括号不必有空格,{}的第一个命令和左括号之间必须要有一个空格
  • (){}中括号里面的某个命令的重定向只影响该命令.但括号外的重定向则影响到括号里的所有命令
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 160,999评论 4 368
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 68,102评论 1 302
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 110,709评论 0 250
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,439评论 0 217
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,846评论 3 294
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,881评论 1 224
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 32,062评论 2 317
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,783评论 0 205
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,517评论 1 248
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,762评论 2 253
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,241评论 1 264
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,568评论 3 260
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,236评论 3 241
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,145评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,941评论 0 201
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,965评论 2 283
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,802评论 2 275

推荐阅读更多精彩内容