如果您使用工具的时间足够长,则可以掌握其用途。 而且,该工具成为您自己的扩展。 想想古斯塔夫·克里姆特(Gustav Klimt)的画笔,路易斯·阿姆斯特朗(Louis Armstrong)的小号和马克·吐温(Mark Twain)的措辞。 如果您是专家,那么您的“交易工具”会毫不费力地将您的意图,精神和表达方式传达给您的媒介。

到目前为止,我希望您的技能已经达到UNIX®助手的水平。 您练习命令行kata。 当您渴望知识时,您会咨询无所不知的人的圣言。 然后,您可以设计出可以对数据进行纯粹炼金术的命令组合。 您可以在命令行上轻松自如,并且外壳感觉舒适而熟悉。

学徒的下一个阶段,Grasshopper,将是您自己的壳。

强大的外壳

您已经了解了许多定制外壳环境的技术:

  • 您可以选择要使用的UNIX Shell。 伯恩炮弹是坚固的。 Z壳等其他产品则提供了新颖和便利的功能,您可能会发现有帮助。

    要查找UNIX系统上可用的shell,请使用命令cat /etc/shells 。 要将您的外壳更改为列出的任何外壳,请使用chsh命令。 这是更改为Z shell的/ bin / zsh的示例。 (键入以粗体显示的文本。)

    $ cat /etc/shells
    /bin/bash
    /bin/csh
    /bin/ksh
    /bin/sh
    /bin/tcsh
    /bin/zsh
    $ chsh -s /bin/zsh
  • 您可以创建短别名来代替冗长的命令。
  • 环境变量 (例如PATH(控制搜索程序的位置)和TZ(指定时区))会保留您的首选项并影响您启动的所有进程。

    PATH特别有用。 例如,如果您想要或需要运行本地的,增强的Perl版本,则可以更改PATH,以使用/ usr / local / bin / perl代替/ usr / bin / perl中的(典型)标准版本。

    UNIX应用程序也经常使用环境变量进行自定义 。 例如,如果您的终端(或仿真器)具有功能,则可以使用环境变量CLICOLOR和LSCOLORS为ls (列表目录内容)的输出着色。

  • 您可以通过外壳程序的内置命令历史记录保留和重新调用命令行。 命令历史记录保留输入内容,使您可以重新运行以前的命令。 许多外壳程序还允许即时修改先前的命令以创建新命令。 例如,Bash shell使用脱字符号( ^ )进行替换:
    $ ls -l heroes.txt
    -rw-r--r--   1 strike  strike  174 Mar  1 11:25 heroes.txt
    $ ^heroes^villains
    ls -l villians.txt
    villians.txt

    在这里,古怪的命令行^heroes^villains替代紧接的先前命令英雄字恶棍 (默认值,如果没有提供历史记录列表编号命令)和运行结果, ls -l villians.txt 。 有关命令行替换的语法,请查阅您的Shell文档。

  • 如果现有的UNIX实用程序和Shell的内置功能缺少您希望定期使用的功能,则可以编写Shell脚本以(重新)执行复杂的操作。

正如您将在即将发表的“ Speaking UNIX”文章中看到的那样,您还可以下载并构建大量其他UNIX实用程序,这些实用程序通常以开源形式提供。 实际上,使用Google或Yahoo! 只需几分钟,您通常可以轻松找到并下载合适的解决方案,而无需自己创建解决方案。 (懒惰!花一些额外的空闲时间看云。)

当然,有了这么多的选项来微调外壳,如果您可以保留您的首选项并一次又一次地重复使用这些设置(从外壳到外壳(例如,在不同的X终端窗口中),会话到会话(当您注销并返回再次登录时),甚至跨多台计算机(假设您在多个平台上使用相同的Shell)。

Shell启动脚本提供了这种耐力。 当外壳启动并终止时,外壳分别执行一系列脚本来初始化和重置环境。 有些启动脚本是系统级的(您的系统管理员可以配置它们),而其他一些则可以自由定制。

启动脚本与Microsoft®Windows®INI文件不同。 顾名思义,启动脚本是真正的Shell脚本,即您编写的一些小程序即可完成工作。 在这种情况下,每当外壳程序启动或终止并影响外壳程序环境时,外壳程序脚本便会运行。

开始我!

通常,每个外壳程序提供几个外壳程序启动脚本,每个外壳程序指定脚本运行的顺序。 至少,您可以期待一个系统范围的启动文件和一个个人(按用户)启动文件。 将整个外壳启动序列视为一种级联:运行(可能)运行多个脚本的影响是累积的,您可以在后续脚本中取消或更改序列中早期设置的参数。

例如,您的系统管理员可能会在整个系统范围的启动文件中为整个系统设置有用的默认Shell提示符,例如,其中包括用户名,当前工作目录和命令历史记录号。 但是,您可以通过根据自己的启动脚本的喜好重设shell提示符来覆盖此文件。 否则,如果您不更改系统范围的设置,则该设置将保留在您的Shell和环境中。

通常,最早的启动脚本在系统范围内,例如/ etc / profile,由系统管理员进行管理。 系统范围的启动文件并非旨在作为入侵,而是有助于使用特定于该系统的资源。 例如,如果您的系统管理员因您解决了已知的安全漏洞而希望您使用较新版本的Secure Shell(SSH)实用程序,则他或她可以将每个用户的初始PATH变量设置为/ usr / local / bin:/ bin :/ usr / bin,它对/ usr / local / bin中的可执行文件进行优先级排序。 (如果在/ usr / local / bin中找不到该命令,则shell将继续在/ usr / bin中进行扫描。)系统范围的启动文件还用于命名打印机,显示有关计划内停机的公告以及提供新用户具有合理的Shell默认值。 (不要欺负新手。)

在运行系统级脚本(或多个脚本)之后,外壳程序将运行用户特定的启动脚本。 每个用户的文件是保留您喜欢的别名,环境设置和其他首选项的合适位置。

规划大爆炸

Shell启动脚本的数量和名称在一个外壳之间是不同的。 让我们看一下Bash shell / bin / bash的启动顺序。 Bash shell在所有UNIX和Linux®版本中都可以找到,通常是新系统和新用户的默认Shell。 它也代表了许多其他外壳,因此是一个很好的演示。 (如果使用其他外壳,请查阅其文档或手册页以获取其启动脚本的名称和处理顺序。)

Bash搜索六个启动脚本,但是每个脚本都是可选的。 即使所有六个脚本都存在并且可读,Bash在任何情况下都只执行这六个脚本的一个子集。

Bash首先执行系统范围的启动文件/ etc / profile,如果该文件存在并且用户可以读取的话。 读取该文件后,Bash将按该顺序查找〜/ .bash_profile,〜/ .bash_login,〜/ .profile和〜/ .bashrc,其中~是shell的用户主目录的缩写(也可作为$ HOME使用) )。 如果退出Bash,shell将搜索〜/ .bash_logout。

六个文件中的哪个执行取决于新Shell的“模式”。 外壳程序可以是登录外壳程序,它可以交互或可以不交互。 (登录外壳程序也是交互式外壳程序;但是,您可以强制非交互式外壳程序像登录外壳程序一样工作。稍后再介绍。)

在过去的UNIX时代(几十年前很少),您通常通过哑终端访问UNIX计算机。 您将在登录提示符下键入您的用户ID和密码,系统将为您的会话生成一个新的登录Shell。 在此环境中,登录外壳程序通过名称与其他外壳程序实例(例如运行外壳程序脚本的实例)不同:每个登录外壳程序的进程名称均带有连字符前缀,如-bash 。 这个特殊的名称(一个长期的UNIX工件)告诉外壳程序运行任何特殊的登录配置。

交互式外壳更容易解释:如果外壳响应您的输入(标准输入)并显示输出(标准输出),则它是交互式的。 今天,X终端取代了哑终端,但是外壳模式的约定和范例仍然存在。 通常,X终端将Bash生成为-bash ,这将强制Bash执行登录启动序列。

对于Bash,交互式登录Shell运行/ etc / profile(如果存在)。 (如果将Bash作为bash --login调用,则非交互式shell也将运行/ etc / profile。)接下来,交互式登录shell将查找〜/ .bash_profile并执行此脚本(如果存在且可读)。 否则,shell将继续尝试执行〜/ .bash_login。 如果后一个文件不存在或不可读,则Bash最终尝试执行〜/ .profile。 Bash仅运行一个个人启动文件,启动顺序此后立即停止。 当Bash登录shell退出时,它将执行〜/ .bash_logout。

如果Bash Shell是交互式的,而不是登录Shell,则Bash尝试读取〜/ .bashrc。 没有其他文件被执行。 如果Bash Shell是非交互式的,则它将扩展BASH_ENV环境变量的值并执行命名的文件。

当然,您可以通过从Bash的标准脚本中调用自己的脚本来提供其他设置。 特殊的shell缩写. (或其同义词source )执行另一个shell脚本。 例如,如果要在交互式登录外壳程序和交互式非登录外壳程序之间共享〜/ .bashrc中的设置,请放置以下命令:

. ~/.bashrc

在〜/ .bash_profile中。 当外壳程序遇到dot命令时,它将立即执行命名的外壳程序脚本。

窥视外壳

探索启动顺序的最佳方法是创建一些简单的Shell启动文件。 例如,如果运行ssh farfaraway ls命令,SSH在远程系统上产生的远程shell名为farfaraway是登录shell吗? 交互式外壳? 让我们找出答案。

列表1 , 2 , 3 ,和4示出了样品/ etc / profile中,〜/ .bash_profile中,〜/ .bashrc中,和〜/ .bash_logout中的文件,分别。 (如果这些文件已经存在,请在继续练习之前进行备份。您需要计算机上的超级用户特权才能更改/ etc / profile。)使用喜欢的文本编辑器来创建文件,如图所示。

清单1显示了一个示例/ etc / profile脚本。 该文件是第一个运行的启动文件(如果存在并且可读)。

清单1.示例/ etc / profile文件
echo "Executing /etc/profile."
PATH="/bin:/sbin:/usr/bin:/usr/sbin"
export PATH

清单1在脚本开始时回显了一条消息,并设置了一个最小的PATH变量。 同样,如果外壳是交互式登录外壳,则此文件将运行。 例如,启动一个新的X终端。 您应该会看到以下内容:

Last login: Tue Apr 17 21:06:23 on ttyp1
Executing /etc/profile
(Interactive, login shell)
Executing /Users/strike/.bash_profile
(Interactive, login shell)
Including /Users/strike/.aliases
strike @ blackcat 1 $

好! 这是在X终端中启动新的登录Shell时的预期顺序。 注意shell提示:它反映了用户名,短主机名(第一个点之前的所有内容)和命令号。

如果在提示符下键入logoutexit ,则应该看到以下内容:

strike @ blackcat 31 $ logout
Executing /Users/strike/.bash_logout
(Interactive, login shell)

如前所述,交互式登录Shell运行〜/ .bash_logout。

清单2显示了一个〜/ .bash_profile文件示例。 此文件是用于在启动时自定义外壳程序的一个选项。

清单2:〜/ .bash_profile文件样本
echo "Executing $HOME/.bash_profile"
echo '(Interactive, login shell)'PS1='\u @ \h \# \$ '
export PS1PAGER=/usr/bin/less
export PAGER. .aliases

接下来,让我们看看从提示启动新外壳时会发生什么。 新的外壳程序是交互式的,但不是登录外壳程序。 根据规则,〜/ .bashrc是唯一可以运行的文件。

strike @ blackcat 1 $ bash
Executing /Users/strike/.bashrc
(Interactive shell)
blackcat:~ strike$

而且,实际上,〜/ .bashrc是唯一要执行的文件。 证明在提示中-底部的提示是默认的Bash提示,而不是〜/ .bash_profile中定义的提示。

要测试注销脚本,请键入exit (您不能在非登录shell中键入logout )。 您应该看到:

blackcat:~ strike$ exit
exit
Executing $HOME/.bash_logout
(Interactive, login shell)
strike @ blackcat 2 $

交互式登录外壳终止时,它将执行〜/ .bash_logout。 您可能会使用此功能来删除临时文件,将文件作为一种简单的备份方法进行复制,甚至可能启动rsync来分发在当前会话中所做的所有更改。

清单3显示了一个〜/ .bashrc文件示例。 该文件是非交互式Bash Shell实例的初始化文件。

清单3:示例〜/ .bashrc文件
echo "Executing $HOME/.bashrc"
echo "(Interactive shell)"PATH="/usr/local/bin:$PATH"
export PATH

这是另一个实验:运行SSH时会得到哪种外壳? 让我们尝试两种变体。 (您可以简单地使用SSH返回本地计算机,其工作方式与从远程计算机上运行SSH的方式相同。)首先,使用SSH登录到远程计算机:

strike @ blackcat 1 $ ssh blackcat
Last login: Tue Apr 17 21:17:35 2007
Executing /etc/profile
(Interactive, login shell)
Executing /Users/strike/.bash_profile
(Interactive, login shell)
Including /Users/strike/.aliases
strike @ blackcat 1 $

如您所料,运行SSH访问远程计算机会启动一个新的登录Shell。 接下来,在远程计算机上运行命令时会发生什么? 答案是:

strike @ blackcat 3 $ ssh blackcat ls
Executing /Users/strike/.bashrc
(Interactive shell)
villians.txt
heroes.txt

使用SSH远程运行命令会生成非登录交互式外壳。 为什么互动? 因为远程命令的标准输入和标准输出已绑定到您的键盘和显示器,尽管使用了SSH魔术。

清单4显示〜/ .bash_logout。 该文件在外壳终止时运行。

清单4:示例〜/ .bash_logout文件
echo "Executing $HOME/.bash_logout"
echo "(Interactive, login shell)"

启动文件的有用提示

您使用Shell的次数越多,则可以将首选项保留在启动文件中而受益匪浅。 以下是一些有关组织Bash设置的有用提示和建议。 (您可以将类似的策略应用于其他shell。)

  • 如果您有要在每个shell中使用的设置(例如PATH)(无论其模式如何),请将这些设置放在〜/ .bashrc中,并使用source从〜/ .bash_profile中访问文件。
  • 如果您在多台计算机上拥有帐户(并且您的主目录未通过网络文件系统[NFS]在它们之间共享),请使用rsync使Shell启动文件在网络上的所有计算机之间保持同步。
  • 如果根据所使用的主机应用某些首选项(例如,如果一个系统具有特殊资源,则使用不同的PATH),请将这些设置放在单独的文件中,并在shell启动过程中使用source来访问它。 如果选择使用rsync管理文件,请从文件分发列表中省略特定于主机的文件。

    当然,您也可以创建一个全局脚本,并使用条件语句和环境变量HOSTNAME选择适当的设置。 (HOSTNAME由外壳程序自动设置,并捕获标准主机名。)例如,以下是启动文件中常见的有用片段:

    case $HOSTNAME inlab.area51.org)      PATH=/opt/rocketscience/bin:$PATHPS1='\u @ \h \# \$ 'export $PS1;;alien.area51.org)PATH=/opt/alien/sw/bin:$PATH;;saucer*)PATH=/opt/saucer/bin:$PATHPAGER=lessexport $PAGER;;*) PATH=/usr/local/bin:$PATH
    esacexport $PATH

    这里的构造是一个switch语句,用于将$ HOSTNAME的值与四个可能的值进行比较:lab.area51.org,Alien.area51.org,该模式匹配以文字字符串saucer*开头的任何主机名(例如碟型火星会匹配;主机名(例如sauce.tomato.org不会)以及其他所有内容。 在这里,对于Bash,星号(*)被解释为shell运算符,而不是正则表达式运算符。 当对其中一种模式进行匹配时,将执行与该模式相关联的语句。 与其他switch语句不同,Bash的情况仅运行一组语句。

最后,查看其他用户的Shell启动文件以获取灵感并节省汗水。 (不过,有些用户保护了这些文件及其主目录,这使您无法浏览。)Joe会有一个很酷,有用的提示吗? 询问如何实现同一件事。 Jeanette是否具有功能强大的键盘加速器或大量环境变量,以从实用程序中获得特殊功能? 与她聊天,询问有关食谱的信息。 想法和代码的最佳来源来自经验丰富的命令行从业人员。

自定义您的外壳

调节器和改装器,团结起来! 您可以广泛地自定义外壳,找到所需的设置或一系列设置后,将它们保存在启动文件中以再次使用。 使用rsync或类似工具将环境从一台计算机传播到另一台计算机。

您的课程已完成。 是时候购买更多片了。


翻译自: https://www.ibm.com/developerworks/aix/library/au-speakingunix10/index.html

自定义控件 自定义属性_自定义您的外壳相关推荐

  1. Day06_动态组件_插槽_自定义指令_tabbar案例

    Day06_动态组件_插槽_自定义指令_tabbar案例 文章目录 Day06_动态组件_插槽_自定义指令_tabbar案例 知识点自测 今日学习目标 1. 组件进阶 1.0 组件进阶 - 动态组件 ...

  2. 带你一起瞧瞧自定义属性以及自定义View的使用

    都说Android技术博大精深,Android控件强大无比,想想也确实如此.随着Android的不断发展,Android控件日趋强大以及完善化.But,有些还是满足不了公司多变的需求.遇到这种情况,咋 ...

  3. linux 自定义外壳,管道在自定义的linux外壳

    尝试实现我自己的Linux外壳几个基本功能,当然是时候实现管道的问题.更具体的管道工程大部分,尽管似乎放弃了最后一个论点.例如,如果我要运行命令管道在自定义的linux外壳 ps ax | grep ...

  4. 【Electron】Electron开发入门(八):自定义electron框架外壳(shell)的菜单(Menu)...

    1.自定义electron框架外壳(shell)的菜单(Menu) electron的main.js里代码: const Menu = require('electron').Menu; var te ...

  5. [导入]Asp.net 2.0 自定义控件开发[创建自定义浮动菜单FloadMenu控件][示例代码下载]...

    Asp.net 2.0 自定义控件开发[创建自定义浮动菜单FloadMenu控件][示例代码下载] 文章来源:http://blog.csdn.net/chengking/archive/2007/0 ...

  6. php设置用户头像,php制作圆形用户头像的实例_自定义封装类源代码

    思路 使用图层的方法设计,共需要创建3个图像层 1.底层:最后生成的图像 2.真实用户头像:作为中间层,用户上传的真实头像图片 3.圆形蒙版:作为最上层,在蒙版中绘制圆形,并设置为透明 如图: 代码如 ...

  7. paddle2.0高层API实现人脸关键点检测(人脸关键点检测综述_自定义网络_paddleHub_趣味ps)

    paddle2.0高层API实现人脸关键点检测(人脸关键点检测综述_自定义网络_paddleHub_趣味ps) 本文包含了: - 人脸关键点检测综述 - 人脸关键点检测数据集介绍以及数据处理实现 - ...

  8. jsf 自定义属性_如何在JSF中实现自定义密码强度指示器

    jsf 自定义属性 使用JavaScript验证密码强度是一项常见任务. 在本文中,我将展示如何向基于JSF的Web应用程序添加密码强度指示器. 的 PrimeFaces中的密码组件已经具有密码强度的 ...

  9. ztree 自定义参数_zTree树插件使用方法及自定义控件实践_蓝戒的博客

    zTree简介: zTree 是一个依靠 jQuery 实现的多功能 "树插件".优异的性能.灵活的配置.多种功能的组合是 zTree 最大优点. 实践版本:zTree-verso ...

最新文章

  1. 书评:测试驱动开发的艺术
  2. QT_QSlider的总结
  3. C++ Socket 实例
  4. boost any 实现万能容器_全面剖析 C++ Boost 智能指针!| CSDN 博文精选
  5. 3dtiles加载调度原理分析
  6. Dell T630,插一个显示器,设置中看到两个显示器
  7. Atitit 现代信息检索 Atitit 重要章节 息检索建模 检索评价 第8章 文本分类 Line 210: 第9章 索引和搜索 第11章 Web检索 第13章 结构化文本检索 目录 L
  8. 全网最详细的Intel CPU体系结构分析(内核源码)
  9. 千呼万唤始出来,犹抱琵琶半遮面——python变量和数据类型
  10. android微信7,微信7.0安卓版之初体验
  11. 基因家族的鉴定-基于windows系统上的本地blast
  12. MySQL索引(详细,1万字长文)
  13. rsync运行时出现skipping non-regular file
  14. 微信小程序开发自学笔记 —— 九、微信开发者工具
  15. python-gitlab
  16. 桌面显卡天梯图2023年2月 台式机显卡天梯图2023
  17. 平行时空 平行宇宙 多元宇宙
  18. dotnet 读 WPF 源代码笔记 创建 SolidColorBrush 性能没有想象那么差
  19. 咱们程序要预防腰椎间盘突出
  20. 飞猪未来景区多地智慧亮相 春节出游目的地马上安排

热门文章

  1. HTML转义字符对照表(部分)
  2. TexturePacker命令行拉起参数
  3. 《互联网理财一册通》一一1.3 开通网上银行
  4. nginx配置IP白名单
  5. 计算机~通信领域几百本常用电子书合集
  6. 洛谷P2698 [USACO12MAR]Flowerpot S
  7. 第10章第21节:使用Ribbons 2生成漂亮的随机线条背景 [PowerPoint精美幻灯片实战教程]
  8. 致敬贝叶斯以及自己对贝叶斯的一些见解
  9. 壹号本 深度 linux,壹号本4代迷你笔记本开箱,10.1英寸大小,平板电脑二合一设计...
  10. 三星I9220刷机包 新蜂ROM V4.1 高级设置 全透明天气插件