标签 命令行 下的文章

PHP是一个开源服务器端脚本语言,最初这三个字母代表的是“Personal Home Page”,而现在则代表的是“PHP:Hypertext Preprocessor”,它是个递归首字母缩写。它是一个跨平台脚本语言,深受C、C++和Java的影响。

Run PHP Codes in Linux Command Line

在 Linux 命令行中运行 PHP 代码

PHP的语法和C、Java以及带有一些PHP特性的Perl变成语言中的语法十分相似,它当下大约正被2.6亿个网站所使用,当前最新的稳定版本是PHP版本5.6.10。

PHP是HTML的嵌入脚本,它便于开发人员快速写出动态生成的页面。PHP主要用于服务器端(而Javascript则用于客户端)以通过HTTP生成动态网页,然而,当你知道可以在Linux终端中不需要网页浏览器来执行PHP时,你或许会大为惊讶。

本文将阐述PHP脚本语言的命令行方面。

1. 在安装完PHP和Apache2后,我们需要安装PHP命令行解释器。

# apt-get install php5-cli          [Debian 及类似系统]
# yum install php-cli               [CentOS 及类似系统]

接下来我们通常要做的是,在/var/www/html(这是 Apache2 在大多数发行版中的工作目录)这个位置创建一个内容为 <?php phpinfo(); ?>,名为 infophp.php 的文件来测试(PHP是否安装正确),执行以下命令即可。

# echo '<?php phpinfo(); ?>' > /var/www/html/infophp.php

然后,将浏览器访问 http://127.0.0.1/infophp.php ,这将会在网络浏览器中打开该文件。

Check PHP Info

检查PHP信息

不需要任何浏览器,在Linux终端中也可以获得相同的结果。在Linux命令行中执行/var/www/html/infophp.php,如:

# php -f /var/www/html/infophp.php

Check PHP info from Commandline

从命令行检查PHP信息

由于输出结果太大,我们可以通过管道将上述输出结果输送给 less 命令,这样就可以一次输出一屏了,命令如下:

# php -f /var/www/html/infophp.php | less

Check All PHP Info

检查所有PHP信息

这里,‘-f‘选项解析并执行命令后跟随的文件。

2. 我们可以直接在Linux命令行使用phpinfo()这个十分有价值的调试工具而不需要从文件来调用,只需执行以下命令:

# php -r 'phpinfo();'

PHP Debugging Tool

PHP调试工具

这里,‘-r‘ 选项会让PHP代码在Linux终端中不带<>标记直接执行。

3. 以交互模式运行PHP并做一些数学运算。这里,‘-a‘ 选项用于以交互模式运行PHP。

# php -a

Interactive shell

php > echo 2+3;
5
php > echo 9-6;
3
php > echo 5*4;
20
php > echo 12/3;
4
php > echo 12/5;
2.4
php > echo 2+3-1;
4
php > echo 2+3-1*3;
2
php > exit

输入 ‘exit‘ 或者按下 ‘ctrl+c‘ 来关闭PHP交互模式。

Enable PHP Interactive Mode

启用PHP交互模式

4. 你可以仅仅将PHP脚本作为shell脚本来运行。首先,创建在你当前工作目录中创建一个PHP样例脚本。

# echo -e '#!/usr/bin/php\n<?php phpinfo(); ?>' > phpscript.php

注意,我们在该PHP脚本的第一行使用#!/usr/bin/php,就像在shell脚本中那样(/bin/bash)。第一行的#!/usr/bin/php告诉Linux命令行用 PHP 解释器来解析该脚本文件。

其次,让该脚本可执行:

# chmod 755 phpscript.php

接着来运行它,

# ./phpscript.php

5. 你可以完全靠自己通过交互shell来创建简单函数,这你一定会被惊到了。下面是循序渐进的指南。

开启PHP交互模式。

# php -a

创建一个函数,将它命名为 addition。同时,声明两个变量 $a$b

php > function addition ($a, $b)

使用花括号来在其间为该函数定义规则。

php > {

定义规则。这里,该规则讲的是添加这两个变量。

php { echo $a + $b;

所有规则定义完毕,通过闭合花括号来封装规则。

php {}

测试函数,添加数字4和3,命令如下:

php > var_dump (addition(4,3));

样例输出

7NULL

你可以运行以下代码来执行该函数,你可以测试不同的值,你想来多少次都行。将里头的 a 和 b 替换成你自己的值。

php > var_dump (addition(a,b));

php > var_dump (addition(9,3.3));

样例输出

12.3NULL

Create PHP Functions

创建PHP函数

你可以一直运行该函数,直至退出交互模式(ctrl+z)。同时,你也应该注意到了,上面输出结果中返回的数据类型为 NULL。这个问题可以通过要求 php 交互 shell用 return 代替 echo 返回结果来修复。

只需要在上面的函数的中 ‘echo‘ 声明用 ‘return‘ 来替换

替换

php { echo $a + $b;

php { return $a + $b;

剩下的东西和原理仍然一样。

这里是一个样例,在该样例的输出结果中返回了正确的数据类型。

PHP Functions

PHP函数

永远都记住,用户定义的函数不会从一个shell会话保留到下一个shell会话,因此,一旦你退出交互shell,它就会丢失了。

希望你喜欢此次教程。保持连线,你会获得更多此类文章。保持关注,保持健康。请在下面的评论中为我们提供有价值的反馈。点赞并分享,帮助我们扩散。

还请阅读: 12个Linux终端中有用的的PHP命令行用法——第二部分


via: http://www.tecmint.com/run-php-codes-from-linux-commandline/

作者:Avishek Kumar 译者:GOLinux 校对:wxy

本文由 LCTT 原创翻译,Linux中国 荣誉推出

在我们的关于 shell 基础的指导下, 得到一个更灵活,功能更强大且多彩的命令行界面

为何要这样做?

  • 使得在 shell 提示符下过得更轻松,高效
  • 在失去连接后恢复先前的会话
  • Stop pushing around that fiddly rodent!

bash1

这是我的命令行提示符的设置。对于这个小的终端窗口来说,这或许有些长。但你可以根据你的喜好来调整它。

作为一个 Linux 用户, 你可能熟悉 shell (又名为命令行)。 或许你需要时不时的打开终端来完成那些不能在 GUI 下处理的必要任务,抑或是因为你处在一个将窗口铺满桌面的环境中,而 shell 是你与你的 linux 机器交互的主要方式。

在上面那些情况下,你可能正在使用你所使用的发行版本自带的 Bash 配置。 尽管对于大多数的任务而言,它足够好了,但它可以更加强大。 在本教程中,我们将向你展示如何使得你的 shell 提供更多有用信息、更加实用且更适合工作。 我们将对提示符进行自定义,让它比默认情况下提供更好的反馈,并向你展示如何使用炫酷的 tmux 工具来管理会话并同时运行多个程序。 并且,为了让眼睛舒服一点,我们还将关注配色方案。那么,进击吧,少女!

让提示符更美妙

大多数的发行版本配置有一个非常简单的提示符,它们大多向你展示了一些基本信息, 但提示符可以为你提供更多的内容。例如,在 Debian 7 下,默认的提示符是这样的:

mike@somebox:~$

上面的提示符展示出了用户、主机名、当前目录和账户类型符号(假如你切换到 root 账户, $ 会变为 #)。 那这些信息是在哪里存储的呢? 答案是:在 PS1 环境变量中。 假如你键入 echo $PS1, 你将会在这个命令的输出字符串的最后有如下的字符:

\u@\h:\w$

这看起来有一些丑陋,并在瞥见它的第一眼时,你可能会开始尖叫,认为它是令人恐惧的正则表达式,但我们不打算用这些复杂的字符来煎熬我们的大脑。这不是正则表达式,这里的斜杠是转义序列,它告诉提示符进行一些特别的处理。 例如,上面的 u 部分,告诉提示符展示用户名, 而 w 则展示工作路径.

下面是一些你可以在提示符中用到的字符的列表:

  • d 当前的日期
  • h 主机名
  • n 代表换行的字符
  • A 当前的时间 (HH:MM)
  • u 当前的用户
  • w (小写) 整个工作路径的全称
  • W (大写) 工作路径的简短名称
  • $ 一个提示符号,对于 root 用户为 # 号
  • ! 当前命令在 shell 历史记录中的序号

下面解释 wW 选项的区别: 对于前者,你将看到你所在的工作路径的完整地址,(例如 /usr/local/bin),而对于后者, 它则只显示 bin 这一部分。

现在,我们该怎样改变提示符呢? 你需要更改 PS1 环境变量的内容,试试下面这个:

export PS1="I am \u and it is \A $"

现在,你的提示符将会像下面这样:

I am mike and it is 11:26 $

从这个例子出发,你就可以按照你的想法来试验一下上面列出的其他转义序列。 但等等 – 当你登出后,你的这些努力都将消失,因为在你每次打开终端时,PS1 环境变量的值都会被重置。解决这个问题的最简单方式是打开 .bashrc 配置文件(在你的家目录下) 并在这个文件的最下方添加上完整的 export 命令。在每次你启动一个新的 shell 会话时,这个 .bashrc 会被 Bash 读取, 所以你的加强的提示符就可以一直出现。你还可以使用额外的颜色来装扮提示符。刚开始,这将有点棘手,因为你必须使用一些相当奇怪的转义序列,但结果是非常漂亮的。 将下面的字符添加到你的 PS1字符串中的某个位置,最终这将把文本变为红色:

\[\e[31m\]

你可以将这里的 31 更改为其他的数字来获得不同的颜色:

  • 30 黑色
  • 32 绿色
  • 33 黄色
  • 34 蓝色
  • 35 洋红色
  • 36 青色
  • 37 白色

所以,让我们使用先前看到的转义序列和颜色来创造一个提示符,以此来结束这一小节的内容。深吸一口气,弯曲你的手指,然后键入下面这只“野兽”:

export PS1="(\!) \[\e[31m\] \[\A\] \[\e[32m\]\u@\h \[\e[34m\]\w \[\e[30m\]$"

上面的命令提供了一个 Bash 命令历史序号、当前的时间、彩色的用户或主机名组合、以及工作路径。假如你“野心勃勃”,利用一些惊人的组合,你还可以更改提示符的背景色和前景色。非常有用的 Arch wiki 有一个关于颜色代码的完整列表:http://tinyurl.com/3gvz4ec

Shell 精要

假如你是一个彻底的 Linux 新手并第一次阅读这份杂志,或许你会发觉阅读这些教程有些吃力。 所以这里有一些基础知识来让你熟悉一些 shell。 通常在你的菜单中, shell 指的是 Terminal、 XTerm 或 Konsole, 当你启动它后, 最为实用的命令有这些:

ls (列出文件名); cp one.txt two.txt (复制文件); rm file.txt (移除文件); mv old.txt new.txt (移动或重命名文件);

cd /some/directory (改变目录); cd .. (回到上级目录); ./program (在当前目录下运行一个程序); ls > list.txt (重定向输出到一个文件)。

几乎每个命令都有一个手册页用来解释其选项(例如 man ls – 按 Q 来退出)。在那里,你可以知晓命令的选项,这样你就知道 ls -la 展示一个详细的列表,其中也列出了隐藏文件, 并且在键入一个文件或目录的名字的一部分后, 可以使用 Tab 键来自动补全。

Tmux: 针对 shell 的窗口管理器

在文本模式的环境中使用一个窗口管理器 – 这听起来有点不可思议, 是吧? 然而,你应该记得当 Web 浏览器第一次实现分页浏览的时候吧? 在当时, 这是在可用性上的一个重大进步,它减少了桌面任务栏的杂乱无章和繁多的窗口列表。 对于你的浏览器来说,你只需要一个按钮便可以在浏览器中切换到你打开的每个单独网站, 而不是针对每个网站都有一个任务栏或导航图标。 这个功能非常有意义。

若有时你同时运行着几个虚拟终端,你便会遇到相似的情况; 在这些终端之间跳转,或每次在任务栏或窗口列表中找到你所需要的那一个终端,都可能会让你觉得麻烦。 拥有一个文本模式的窗口管理器不仅可以让你像在同一个终端窗口中运行多个 shell 会话,而且你甚至还可以将这些窗口排列在一起。

另外,这样还有另一个好处:可以将这些窗口进行分离和重新连接。想要看看这是如何运行的最好方式是自己尝试一下。在一个终端窗口中,输入 screen (在大多数发行版本中,它已经默认安装了或者可以在软件包仓库中找到)。 某些欢迎的文字将会出现 – 只需敲击 Enter 键这些文字就会消失。 现在运行一个交互式的文本模式的程序,例如 nano, 并关闭这个终端窗口。

在一个正常的 shell 对话中, 关闭窗口将会终止所有在该终端中运行的进程 – 所以刚才的 Nano 编辑对话也就被终止了, 但对于 screen 来说,并不是这样的。打开一个新的终端并输入如下命令:

screen -r

瞧,你刚开打开的 Nano 会话又回来了!

当刚才你运行 screen 时, 它会创建了一个新的独立的 shell 会话, 它不与某个特定的终端窗口绑定在一起,所以可以在后面被分离并重新连接(即 -r 选项)。

当你正使用 SSH 去连接另一台机器并做着某些工作时, 但并不想因为一个脆弱的连接而影响你的进度,这个方法尤其有用。假如你在一个 screen 会话中做着某些工作,并且你的连接突然中断了(或者你的笔记本没电了,又或者你的电脑报废了——不是这么悲催吧),你只需重新连接或给电脑充电或重新买一台电脑,接着运行 screen -r 来重新连接到远程的电脑,并在刚才掉线的地方接着开始。

现在,我们都一直在讨论 GNU 的 screen,但这个小节的标题提到的是 tmux。 实质上, tmux (terminal multiplexer) 就像是 screen 的一个进阶版本,带有许多有用的额外功能,所以现在我们开始关注 tmux。 某些发行版本默认包含了 tmux; 在其他的发行版本上,通常只需要一个 apt-get、 yum installpacman -S 命令便可以安装它。

一旦你安装了它过后,键入 tmux 来启动它。接着你将注意到,在终端窗口的底部有一条绿色的信息栏,它非常像传统的窗口管理器中的任务栏: 上面显示着一个运行着的程序的列表、机器的主机名、当前时间和日期。 现在运行一个程序,同样以 Nano 为例, 敲击 Ctrl+B 后接着按 C 键, 这将在 tmux 会话中创建一个新的窗口,你便可以在终端的底部的任务栏中看到如下的信息:

0:nano- 1:bash*

每一个窗口都有一个数字,当前呈现的程序被一个星号所标记。 Ctrl+B 是与 tmux 交互的标准方式, 所以若你敲击这个按键组合并带上一个窗口序号, 那么就会切换到对应的那个窗口。你也可以使用 Ctrl+B 再加上 N 或 P 来分别切换到下一个或上一个窗口 – 或者使用 Ctrl+B 加上 L 来在最近使用的两个窗口之间来进行切换(有点类似于桌面中的经典的 Alt+Tab 组合键的效果)。 若需要知道窗口列表,使用 Ctrl+B 再加上 W。

目前为止,一切都还好:现在你可以在一个单独的终端窗口中运行多个程序,避免混乱(尤其是当你经常与同一个远程主机保持多个 SSH 连接时)。 当想同时看两个程序又该怎么办呢?

针对这种情况, 可以使用 tmux 中的窗格。 敲击 Ctrl+B 再加上 % , 则当前窗口将分为两个部分:一个在左一个在右。你可以使用 Ctrl+B 再加上 O 来在这两个部分之间切换。 这尤其在你想同时看两个东西时非常实用, – 例如一个窗格看指导手册,另一个窗格里用编辑器看一个配置文件。

有时,你想对一个单独的窗格进行缩放,而这需要一定的技巧。 首先你需要敲击 Ctrl+B 再加上一个 :(冒号),这将使得位于底部的 tmux 栏变为深橙色。 现在,你进入了命令模式,在这里你可以输入命令来操作 tmux。 输入 resize-pane -R 来使当前窗格向右移动一个字符的间距, 或使用 -L 来向左移动。 对于一个简单的操作,这些命令似乎有些长,但请注意,在 tmux 的命令模式(前面提到的一个分号开始的模式)下,可以使用 Tab 键来补全命令。 另外需要提及的是, tmux 同样也有一个命令历史记录,所以若你想重复刚才的缩放操作,可以先敲击 Ctrl+B 再跟上一个分号,并使用向上的箭头来取回刚才输入的命令。

最后,让我们看一下分离和重新连接 - 即我们刚才介绍的 screen 的特色功能。 在 tmux 中,敲击 Ctrl+B 再加上 D 来从当前的终端窗口中分离当前的 tmux 会话。这使得这个会话的一切工作都在后台中运行、使用 tmux a 可以再重新连接到刚才的会话。但若你同时有多个 tmux 会话在运行时,又该怎么办呢? 我们可以使用下面的命令来列出它们:

tmux ls

这个命令将为每个会话分配一个序号; 假如你想重新连接到会话 1, 可以使用 tmux a -t 1. tmux 是可以高度定制的,你可以自定义按键绑定并更改配色方案, 所以一旦你适应了它的主要功能,请钻研指导手册以了解更多的内容。

tmux

上图中, tmux 开启了两个窗格: 左边是 Vim 正在编辑一个配置文件,而右边则展示着指导手册页。

Zsh: 另一个 shell

选择是好的,但标准同样重要。 你要知道几乎每个主流的 Linux 发行版本都默认使用 Bash shell – 尽管还存在其他的 shell。 Bash 为你提供了一个 shell 能够给你提供的几乎任何功能,包括命令历史记录,文件名补全和许多脚本编程的能力。它成熟、可靠并文档丰富 – 但它不是你唯一的选择。

许多高级用户热衷于 Zsh, 即 Z shell。 这是 Bash 的一个替代品并提供了 Bash 的几乎所有功能,另外还提供了一些额外的功能。 例如, 在 Zsh 中,你输入 ls ,并敲击 Tab 键可以得到 ls 可用的各种不同选项的一个大致描述。 而不需要再打开 man page 了!

Zsh 还支持其他强大的自动补全功能: 例如,输入 cd /u/lo/bi 再敲击 Tab 键, 则完整的路径名 /usr/local/bin 就会出现(这里假设没有其他的路径包含 u, lobi 等字符)。 或者只输入 cd 再跟上 Tab 键,则你将看到着色后的路径名的列表 – 这比 Bash 给出的简单的结果好看得多。

Zsh 在大多数的主要发行版本上都可以得到了; 安装它后并输入 zsh 便可启动它。 要将你的默认 shell 从 Bash 改为 Zsh, 可以使用 chsh 命令。 若需了解更多的信息,请访问 www.zsh.org

“未来”的终端

你或许会好奇为什么包含你的命令行提示符的应用被叫做终端。 这需要追溯到 Unix 的早期, 那时人们一般工作在一个多用户的机器上,这个巨大的电脑主机将占据一座建筑中的一个房间, 人们通过某些线路,使用屏幕和键盘来连接到这个主机, 这些终端机通常被称为“哑终端”, 因为它们不能靠自己做任何重要的执行任务 – 它们只展示通过线路从主机传来的信息,并输送回从键盘的敲击中得到的输入信息。

今天,我们在自己的机器上执行几乎所有的实际操作,所以我们的电脑不是传统意义下的终端,这就是为什么诸如 XTerm、 Gnome Terminal、 Konsole 等程序被称为“终端模拟器” 的原因 – 他们提供了同昔日的物理终端一样的功能。事实上,在许多方面它们并没有改变多少。诚然,现在我们有了反锯齿字体,更好的颜色和点击网址的能力,但总的来说,几十年来我们一直以同样的方式在工作。

所以某些程序员正尝试改变这个状况。 Terminology (http://tinyurl.com/osopjv9), 它来自于超级时髦的 Enlightenment 窗口管理器背后的团队,旨在让终端步入到 21 世纪,例如带有在线媒体显示功能。你可以在一个充满图片的目录里输入 ls 命令,便可以看到它们的缩略图,或甚至可以直接在你的终端里播放视频。 这使得一个终端有点类似于一个文件管理器,意味着你可以快速地检查媒体文件的内容而不必用另一个应用来打开它们。

接着还有 Xiki (www.xiki.org),它自身的描述为“命令的革新”。它就像是一个传统的 shell、一个 GUI 和一个 wiki 之间的过渡;你可以在任何地方输入命令,并在后面将它们的输出存储为笔记以作为参考,并可以创建非常强大的自定义命令。用几句话是很能描述它的,所以作者们已经创作了一个视频来展示它的潜力是多么的巨大(请看 Xiki 网站的截屏视频部分)。

并且 Xiki 绝不是那种在几个月之内就消亡的昙花一现的项目,作者们成功地进行了一次 Kickstarter 众筹,在七月底已募集到超过 $84,000。 是的,你没有看错 – $84K 来支持一个终端模拟器。这可能是最不寻常的集资活动了,因为某些疯狂的家伙已经决定开始创办它们自己的 Linux 杂志 ......

下一代终端

许多命令行和基于文本的程序在功能上与它们的 GUI 程序是相同的,并且常常更加快速和高效。我们的推荐有: Irssi (IRC 客户端); Mutt (mail 客户端); rTorrent (BitTorrent); Ranger (文件管理器); htop (进程监视器)。 若给定在终端的限制下来进行 Web 浏览, Elinks 确实做的很好,并且对于阅读那些以文字为主的网站例如 Wikipedia 来说。它非常实用。

微调配色方案

在《Linux Voice》杂志社中,我们并不迷恋那些养眼的东西,但当你每天花费几个小时盯着屏幕看东西时,我们确实认识到美学的重要性。我们中的许多人都喜欢调整我们的桌面和窗口管理器来达到完美的效果,调整阴影效果、摆弄不同的配色方案,直到我们 100% 的满意(然后出于习惯,摆弄更多的东西)。

但我们倾向于忽视终端窗口,它理应也获得我们的喜爱,并且在 http://ciembor.github.io/4bit 你将看到一个极其棒的配色方案设计器,对于所有受欢迎的终端模拟器(XTerm, Gnome Terminal, Konsole 和 Xfce4 Terminal 等都是支持的应用。),它可以输出其设定。移动滑块直到你看到配色方案最佳, 然后点击位于该页面右上角的 得到方案 按钮。

相似的,假如你在一个文本编辑器,如 Vim 或 Emacs 上花费了很多的时间,使用一个精心设计的调色板也是非常值得的。 Solarized http://ethanschoonover.com/solarized 是一个卓越的方案,它不仅漂亮,而且因追求最大的可用性而设计,在其背后有着大量的研究和测试。


via: http://www.linuxvoice.com/linux-101-power-up-your-shell-8/

作者:Ben Everard 译者:FSSlc 校对:wxy

本文由 LCTT 原创翻译,Linux中国 荣誉推出

我们一直以常规的方式完成一个任务,直到我们知道有更好的处理方法。作为 Linux 技巧和绝招系列 的后续,我会在这里介绍能在各个方面给你帮助的 4 个小技巧。开始吧!

有用的 Linux 小技巧

4 个有用的 Linux 小技巧

1. 假设你要创建一个类似于下面很长的/复杂的目录树。实现这最有效的方法是什么呢?

类似下面要实现的目录树结构。

$ cd /home/$USER/Desktop
$ mkdir tecmint
$ mkdir tecmint/etc
$ mkdir tecmint/lib
$ mkdir tecmint/usr
$ mkdir tecmint/bin
$ mkdir tecmint/tmp
$ mkdir tecmint/opt
$ mkdir tecmint/var
$ mkdir tecmint/etc/x1
$ mkdir tecmint/usr/x2
$ mkdir tecmint/usr/x3
$ mkdir tecmint/tmp/Y1
$ mkdir tecmint/tmp/Y2
$ mkdir tecmint/tmp/Y3
$ mkdir tecmint/tmp/Y3/z

上述情况可以简单地通过运行下面一行命令来实现。

$ mkdir -p /home/$USER/Desktop/tecmint/{etc/x1,lib,usr/{x2,x3},bin,tmp/{Y1,Y2,Y3/z},opt,var}

你可以用 tree 命令验证。如果没有安装你可以使用 apt 或 yum 安装 ‘tree’ 软件包。

$ tree tecmint

检查目录结构

检查目录结构

我们可以用上面的方式创建任意复杂的目录树结构。注意这仅仅是一个普通的命令,但是用 ‘{}’ 来创建层级目录。需要的时候如果在 shell 脚本中使用是非常有用的。

2. 在桌面(/home/$USER/Desktop)创建一个文件(例如 test)并填入以下内容。

ABC
DEF
GHI
JKL
MNO
PQR
STU
VWX
Y
Z

这种情况一个普通用户会怎么做呢?

a. 他首先会创建文件,最好使用 touch 命令,例如:

$ touch /home/$USER/Desktop/test

b. 他会用一个文本编辑器打开文件,这可能是 nano、vim 或其它编辑器。

$ nano /home/$USER/Desktop/test

c. 然后他会将上面的内容输入到文件中,保存并退出。

忽略他/她使用的时间,他至少需要 3 步来执行上面的情况。

一个经验丰富的 Linux 用户会怎么做呢?他会在终端中输入下面的文本然后就完成所有任务。他不需要单独执行每一步。

cat << EOF > /home/$USER/Desktop/test
ABC
DEF
GHI
JKL
MNO
PQR
STU
VWX
Y
Z
EOF

你可以用 ‘cat’ 命令检查是否成功创建了文件和内容。

$ cat /home/avi/Desktop/test

检查文件内容

3. 我们经常在 Linux 中处理归档文件(尤其是 TAR 包)。很多情况下我们会在某些位置,而不是在 Downloads 目录中使用 TAR 包。这种情况下我们怎么做呢?

在这种情况下我们通常会做两件事。

a. 复制/移动 tar 包到目标位置并解压,例如:

$ cp firefox-37.0.2.tar.bz2 /opt/
或
$ mv firefox-37.0.2.tar.bz2 /opt/

b. cd 到 /opt/ 目录。

$ cd /opt/

c. 解压 tar 包。

# tar -jxvf firefox-37.0.2.tar.bz2 

我们也可以采用另外一种方式。

我们也可以在 Tar 包所在位置解压并复制/移动解压后的文件到所需的目标位置,例如:

$ tar -jxvf firefox-37.0.2.tar.bz2 
$ cp -R firefox/  /opt/
或
$ mv firefox/ /opt/

不管哪种方式都需要两步才能完成任务。专业的人可以只用一步就完成这个任务:

$ tar -jxvf firefox-37.0.2.tar.bz2 -C /opt/

-C 选项提取文件到指定目录(这里是 /opt/)。

这并不是关于选项(-C)的问题,而是习惯的问题。养成使用带 -C 选项 tar 命令的习惯。这会使你的工作更加轻松。从现在开始不要再移动归档文件或复制/移动解压后的文件了,在 Downloads 文件夹保存 tar 包并解压到你想要的任何地方吧。

4. 常规方式我们怎样杀掉一个进程?

最普遍的方法,我们首先用 ps -A 命令列出所有进程,然后通过管道输入到 grep 来查找进程/服务(假如 apache2),如下:

$ ps -A | grep -i apache2

输出样例

 1006 ?        00:00:00 apache2
 2702 ?        00:00:00 apache2
 2703 ?        00:00:00 apache2
 2704 ?        00:00:00 apache2
 2705 ?        00:00:00 apache2
 2706 ?        00:00:00 apache2
 2707 ?        00:00:00 apache2

上面的输出显示了所有正在运行 apache2 的进程以及它们的 PID,然后你可以使用这些 PID 在下面命令的帮助下杀掉 apache2。

# kill 1006 2702 2703 2704 2705 2706 2707

然后交叉检查是否还有名称中包含 ‘apache2’ 的进程/服务在运行,如下:

$ ps -A | grep -i apache2

实际上我们可以使用类似 pgrep 和 pkill 的工具以一种更容易理解的方式实现。你可以使用 pgrep 找到和一个进程相关的信息。假如你要找和 apache2 相关的进程信息,你只需要运行:

$ pgrep apache2

输出样例

15396
15400
15401
15402
15403
15404
15405

你也可以通过运行下面命令列出进程名称以及 pid。

$ pgrep -l apache2

输出样例

15396 apache2
15400 apache2
15401 apache2
15402 apache2
15403 apache2
15404 apache2
15405 apache2

用 pkill 杀掉进程非常简单。你只需要输入想要杀死的资源名称。我写了一篇关于 pkill 的博文,你可以参考: http://www.tecmint.com/how-to-kill-a-process-in-linux/

用 pkill 杀死一个进程(例如 apache2),你只需要输入以下命令:

# pkill apache2

你可以通过运行下面命令验证是否杀掉了 apache2。

$ pgrep -l apache2

它没有输出任何东西并返回到窗口意味着没有名称中包含 apache2 的进程在运行。

这就是我要说的所有东西。上面讨论的点肯定远远不够,但也肯定对你有所帮助。我们不仅仅是介绍教程使你学到一些新的东西,更重要的是想告诉你 ‘在同样的情况下如何变得更有效率’。在下面的评论框中告诉我们你的反馈吧。保持联系,继续评论。


via: http://www.tecmint.com/mkdir-tar-and-kill-commands-in-linux/

作者:Avishek Kumar 译者:ictlyh 校对:wxy

本文由 LCTT 原创翻译,Linux中国 荣誉推出

图形桌面总是很养眼的,它增强了可视化体验,有时也能够提升了某些软件的功能,让软件变得更有趣。但是,在命令行下工作也不需要总是很古板,如果您想在命令行下寻找些乐趣,那么有很多命令给您带来趣味。

Linux是个有趣的操作系统。它提供大量的小型开源工具,从平淡无奇的软件到稀奇古怪的应用。正是这些工具的功能和琳琅满目的选择帮助Linux脱颖而出。让我们一起来看看下面这七个小工具吧。

七彩虹:lolcat

lolcat

lolcat是一个用于将文件或标准输入连接到标准输出(类似常见的cat)的程序,但是它会为输出添加七彩的颜色。

lolcat通常和其他诸如toilet或figlet等生成文本的应用结合使用。这个软件不应被误认为是一个或多个猫的图像的宏。

lolcat由Moe编写。

网址: github.com

牛郎的牛:cowsay

cowsay

cowsay是一个可配置的开源软件,它用ASCII码生成奶牛的图片,并可以在对话气泡中显示消息。cowsay是用Perl写的。

cowsay并不仅仅只能显示奶牛。它能生成预先制作的图片或者其他动物,包括鸭子、考拉、麋鹿、小马、绵羊、剑龙和火鸡,以及奶酪、雪人和骷髅。

有一个叫cowthink的应用,与对话的气泡不同,它能在生成奶牛的同时生成思考的气泡。

功能包括:

  • 让脚本变得更有趣
  • Borg模式
  • 可以更改奶牛看起来的样子,比如让奶牛看起来贪婪、偏执、固执、疲倦、古怪、年轻等
  • 图形版变体:xcowsay

网址: nog.net

傻狗:doge

doge

doge是一个简单的每日信息脚本,它基于有些愚蠢但很有趣的doge的梗。它随机的打印一些在语法上有误的句子,有时这些句子基于您电脑中的东西。

doge是一个在2013年非常流行的互联网潮流元素(梗)。这个梗通常由一幅日本柴犬的图片和彩色的文字组成。这些文字故意用一种蹩脚的语气写成了一些互联网的独白。

  • 随机的用不同的颜色和蹩脚的英语写下随机的句子
  • 终端中的柴犬效果非常棒
  • 可以获得系统数据,比如主机名、运行中的程序、当前用户、$EDITOR
  • 如果您安装了lolcat,您可以用它作为点缀: while true; do doge | lolcat -a -d 100 -s 100 -p 1; done
  • 支持标准输入: ls /usr/bin | doge 将显示一些 /usr/bin下的可执行文件。哇噢,还有许多命令行的开关可以过滤词语以及控制词语的频率。

网址: github.com/thiderman/doge

水族箱:ASCIIQuarium

Asciiquarium

ASCIIQuarium是一个以ASCII码方式画出的水族馆/海洋动画。享受生活在您电脑中水底的奇妙生物吧。

想运行ASCIIQuarium,您需要安装Perl的curses包以及Term::Animation模块。请使用sudo apt-get install libcurses-perl来安装前者,使用sudo cpan Term::Animation来安装后者。两个命令都需要在终端中运行。

功能包括:

  • 五彩的鱼儿
  • 有趣的动画,包括钓鱼钩
  • 还有许多的天鹅、鸭子、海豚和船只

网址: www.robobunny.com

蒸汽机车:sl

sl

sl是一个有趣的终端应用,它为那些意外的错将ls输成sl的用户显示一个动画。

我打字通常非常草率,更喜欢速度而不是准确性。但错别字在命令行中是非常危险的。因此sl扮演了一个提醒者,提醒我们注意错误输入的这种坏习惯。它总是会让人咯咯的笑。

功能包括:

  • 使用 -F, 火车在飞翔
  • 使用 -l, 显示一个小型的火车
  • 使用 -a, 看上去发生了意外

网址: github.com/mtoyoda/sl

火焰:aafire

aafire

aafire在终端中显示燃烧的ASCII火焰。它展示了aalib库的强大能力,一个ascii艺术库显示出来。

网址: aa-project.sourceforge.net/aalib

矩阵:CMatrix

CMatrix

CMatrix是一个基于ncurses的程序,它模拟《黑客帝国》(一部电影)中的画面。如果您在一个山洞里度过了上个15年,那么您可能不知道这部1999年的美国科幻电影,主角为 Keanu Reeves, Laurence Fishburne, Carrie-Anne Moss, Hugo Weaving和 Joe Pantoliano。

它可以在终端设置为132x300的情况下工作,并且可以以同样的速率进行滚动或者以用户定义的速度进行异步的滚动。

功能包括:

  • 修改文本颜色
  • 使用粗体字符
  • 异步滚动
  • 使用老式的滚动效果
  • 屏幕保护程序模式

网址: www.asty.org/cmatrix


via: http://www.linuxlinks.com/article/20150614112018846/Humor.html

译者:wwy-hust 校对:Caroline

本文由 LCTT 原创翻译,Linux中国 荣誉推出

curl -s 'https://raw.githubusercontent.com/jlevy/the-art-of-command-line/master/README.md' | egrep -o '<code>\w+</code>' | tr -d '`' | cowsay -W50

流畅地使用命令行是一个常被忽略的技能,或被认为是神秘的奥义。但是,它会以明显而微妙的方式改善你作为工程师的灵活度和生产力。这是我在 Linux 上工作时发现的有用的命令行使用小窍门和笔记的精粹。有些小窍门是很基础的,而有些是相当地特别、复杂、或者晦涩难懂。这篇文章不长,但是如果你可以使用并记得这里的所有内容,那么你就懂得很多了。

其中大部分最初出现Quora上,但是考虑到兴趣所在,似乎更应该放到 Github 上,这里的人比我更能提出改进建议。如果你看到一个错误,或者更好的某种东西,请提交问题或 PR!(当然,提交前请看看必读小节和已有的 PR/Issue。)

必读

范围:

  • 本文是针对初学者和专业人员的,选题目标是覆盖面广(全都很重要)、有针对性(大多数情况下都给出具体实例)而简洁(避免不必要内容以及你能在其它地方轻松找到的离题的内容)。每个小窍门在某种情形下都很必需的,或者能比替代品大大节省时间。
  • 这是为 Linux 写的。绝大部分条目都可以同样应用到 MacOS(或者甚至 Cygwin)。
  • 主要针对交互式 Bash,尽管大多数小窍门也可以应用到其它 shell,以及常规 Bash 脚本。
  • 包括了“标准的”UNIX 命令以及那些需要安装的软件包(它们很重要,值得安装)。

注意:

  • 为了能在一篇文章内展示尽量多的东西,一些具体的信息会被放到引用页里。你可以使用 Google 来获得进一步的内容。(如果需要的话,)你可以使用 apt-get/yum/dnf/pacman/pip/brew 来安装这些新的程序。
  • 使用 Explainshell 来获取命令、参数、管道等内容的解释。

基础

  • 学习基本 Bash 技能。实际上,键入man bash,然后至少浏览一遍所有内容;它很容易理解,没那么长。其它 shell 也不错,但是 Bash 很强大,而且到处都可以找到(如果在你自己的笔记本上学习 zsh、fish 之类,会在很多情形下受到限制,比如使用现存的服务器时)。
  • 至少学好一种基于文本的编辑器。理想的一个是 Vim(vi),因为在终端中编辑时随时都能找到它(即使大多数时候你在使用 Emacs、一个大型的 IDE、或一个现代的时髦编辑器)。
  • 学习怎样使用 man 来阅读文档(好奇的话,用 man man 来列出分区号,比如 1 是常规命令,5 是文件描述,8 用于管理员)。用 apropos 找到帮助页。了解哪些命令不是可执行程序,而是 Bash 内置的,你可以用 helphelp -d 得到帮助。
  • 学习使用 >< 来进行输出和输入重定向,以及使用 | 来管道重定向,学习关于 stdout 和 stderr 的东西。
  • 学习 *(也许还有 ?{...} )文件通配扩展和应用,以及双引号 " 和单引号 ' 之间的区别。(更多内容请参看下面关于变量扩展部分)。
  • 熟悉 Bash 作业管理:&ctrl-zctrl-cjobsfgbgkill 等等。
  • 掌握ssh,以及通过 ssh-agentssh-add 等进行无密码验证的基础技能。
  • 基本的文件管理:lsls -l(特别是,知道ls -l各个列的意义),lessheadtailtail -f(或者更好的less +F),lnln -s(知道硬链接和软链接的区别,以及硬链接相对于软链接的优势),chownchmoddu(用于查看磁盘使用率的快速摘要:du -sk *)。文件系统管理:dfmountfdiskmkfslsblk
  • 基本的网络管理: ipifconfigdig
  • 熟知正则表达式,以及各种使用grep/egrep的选项。-i-o-A-B 选项值得掌握。
  • 学会使用 apt-getyumdnfpacman(这取决于你的发行版)来查找并安装软件包。确保你可以用 pip 来安装基于 Python 的命令行工具(下面的一些东西可以很容易地通过 pip 安装)。

日常使用

  • 在Bash中,使用 tab 补完参数,使用 ctrl-r 来搜索命令历史。
  • 在Bash中,使用 ctrl-w 来删除最后的单词,使用 ctrl-u 来删除整行,返回行首。使用 alt-balt-f 来逐词移动,使用 ctrl-k 来清除到行尾的内容,以及使用 ctrl-l 清屏。参见 man readline 来查看 Bash 中所有默认的键盘绑定,有很多。例如,alt-. 可以循环显示先前的参数,而alt- 扩展通配。(LCTT 译注:关于 Bash 下的快捷键,可以参阅: </article-5660-1.html> )
  • 另外,如果你喜欢 vi 风格的键盘绑定,可以使用 set -o vi
  • 要查看最近用过的命令,请使用 history 。 有许多缩写形式,比如 !$(上次的参数)和!!(上次的命令),虽然使用 ctrl-ralt-. 更容易些。(LCTT 译注:关于历史扩展功能,可以参阅: </article-5658-1.html> )
  • 返回先前的工作目录: cd -
  • 如果你命令输入到一半,但是改变主意了,可以敲 alt-# 来添加一个 # 到开头,然后将该命令作为注释输入(或者使用快捷键 ctrl-a#enter 输入)。然后,你可以在后面通过命令历史来回到该命令。
  • 使用 xargs(或 parallel),它很强大。注意,你可以控制每行(-L)执行多少个项目,以及并行执行(-P)。如果你不确定它是否会做正确的事情,可以首先使用 xargs echo。同时,使用 -I{} 也很方便。样例:
  find . -name '*.py' | xargs grep some_function
  cat hosts | xargs -I{} ssh root@{} hostname
  • pstree -p 对于显示进程树很有帮助。
  • 使用 pgreppkill 来按名称查找进程或给指定名称的进程发送信号(-f 很有帮助)。
  • 掌握各种可以发送给进程的信号。例如,要挂起进程,可以使用 kill -STOP [pid]。完整的列表可以查阅 man 7 signal
  • 如果你想要一个后台进程一直保持运行,使用 nohupdisown
  • 通过 netstat -lntpss -plat 检查哪些进程在监听(用于 TCP,对 UDP 使用 -u 替代 -t)。
  • lsof来查看打开的套接字和文件。
  • 在 Bash 脚本中,使用 set -x 调试脚本输出。尽可能使用严格模式。使用 set -e 在遇到错误时退出。也可以使用 set -o pipefail,对错误进行严格处理(虽然该话题有点微妙)。对于更复杂的脚本,也可以使用 trap
  • 在 Bash 脚本中,子 shell(写在括号中的)是组合命令的便利的方式。一个常见的例子是临时移动到一个不同的工作目录,如:
  # 在当前目录做些事
  (cd /some/other/dir; other-command)
  # 继续回到原目录
  • 注意,在 Bash 中有大量的各种各样的变量扩展。检查一个变量是否存在:${name:?error message}。例如,如果一个Bash脚本要求一个单一参数,只需写 input_file=${1:?usage: $0 input_file}。算术扩展:i=$(( (i + 1) % 5 ))。序列: {1..10}。修剪字符串:${var%suffix}${var#prefix}。例如,if var=foo.pdf ,那么 echo ${var%.pdf}.txt 会输出 foo.txt
  • 命令的输出可以通过 <(some command) 作为一个文件来处理。例如,将本地的 /etc/hosts 和远程的比较:
  diff /etc/hosts <(ssh somehost cat /etc/hosts)
  • 了解 Bash 中的“嵌入文档”,就像在 cat <<EOF ... 中。
  • 在 Bash 中,通过:some-command >logfile 2>&1 同时重定向标准输出和标准错误。通常,要确保某个命令不再为标准输入打开文件句柄,而是将它捆绑到你所在的终端,添加 </dev/null 是个不错的做法。
  • man ascii 可以得到一个不错的ASCII表,带有十六进制和十进制值两种格式。对于常规编码信息,man unicodeman utf-8man latin1 将很有帮助。
  • 使用 screentmux 来复用屏幕,这对于远程 ssh 会话尤为有用,使用它们来分离并重连到会话。另一个只用于保持会话的最小可选方案是 dtach
  • 在 ssh 中,知道如何使用 -L-D(偶尔也用-R)来打开端口通道是很有用的,如从一台远程服务器访问网站时。
  • 为你的 ssh 配置进行优化很有用;例如,这个 ~/.ssh/config 包含了可以避免在特定网络环境中连接被断掉的情况的设置、使用压缩(这对于通过低带宽连接使用 scp 很有用),以及使用一个本地控制文件来开启到同一台服务器的多通道:
  TCPKeepAlive=yes
  ServerAliveInterval=15
  ServerAliveCountMax=6
  Compression=yes
  ControlMaster auto
  ControlPath /tmp/%r@%h:%p
  ControlPersist yes
  • 其它一些与 ssh 相关的选项对会影响到安全,请小心开启,如各个子网或主机,或者在信任的网络中:StrictHostKeyChecking=noForwardAgent=yes
  • 要获得八进制格式的文件的权限,这对于系统配置很有用而用 ls 又没法查看,而且也很容易搞得一团糟,可以使用像这样的东西:
  stat -c '%A %a %n' /etc/timezone
  • 对于从另一个命令的输出结果中交互选择值,可以使用percol
  • 对于基于另一个命令(如git)输出的文件交互,可以使用fpp (路径选择器)。
  • 要为当前目录(及子目录)中的所有文件构建一个简单的 Web 服务器,让网络中的任何人都可以获取,可以使用: python -m SimpleHTTPServer 7777 (使用端口 7777 和 Python 2)。

处理文件和数据

  • 要在当前目录中按名称定位文件,find . -iname '*something*'(或者相类似的)。要按名称查找任何地方的文件,使用 locate something(但请记住,updatedb 可能还没有索引最近创建的文件)。
  • 对于源代码或数据文件进行的常规搜索(要比 grep -r 更高级),使用 ag
  • 要将 HTML 转成文本:lynx -dump -stdin
  • 对于 Markdown、HTML,以及各种类型的文档转换,可以试试 pandoc
  • 如果你必须处理 XML,xmlstarlet 虽然有点老旧,但是很好用。
  • 对于 JSON,使用jq
  • 对于 Excel 或 CSV 文件,csvkit 提供了 in2csvcsvcutcsvjoincsvgrep 等工具。
  • 对于亚马逊 S3 ,s3cmd 会很方便,而 s4cmd 则更快速。亚马逊的 aws 则是其它 AWS 相关任务的必备。
  • 掌握 sortuniq,包括 uniq 的 -u-d 选项——参见下面的单行程序。
  • 掌握 cutpastejoin,它们用于处理文本文件。很多人会使用 cut,但常常忘了 join
  • 了解 tee,它会将 stdin 同时复制到一个文件和 stdout,如 ls -al | tee file.txt
  • 知道 locale 会以微妙的方式对命令行工具产生大量的影响,包括排序的顺序(整理)以及性能。大多数安装好的 Linux 会设置 LANG 或其它 locale 环境变量为本地设置,比如像 US English。但是,你要明白,如果改变了本地环境,那么排序也将改变。而且 i18n 过程会让排序或其它命令的运行慢好多倍。在某些情形中(如像下面那样的设置操作或唯一性操作),你可以安全地整个忽略缓慢的 i18n 过程,然后使用传统的基于字节的排序顺序 export LC_ALL=C
  • 了解基本的改动数据的 awksed 技能。例如,计算某个文本文件第三列所有数字的和:awk '{ x += $3 } END { print x }'。这可能比 Python 的同等操作要快3倍,而且要短3倍。
  • 在一个或多个文件中,替换所有出现在特定地方的某个字符串:
  perl -pi.bak -e 's/old-string/new-string/g' my-files-*.txt
  • 要立即根据某个模式对大量文件重命名,使用 rename。对于复杂的重命名,repren 可以帮助你达成。
  # 恢复备份文件 foo.bak -> foo:
  rename 's/\.bak$//' *.bak
  # 完整的文件名、目录名 foo -> bar:
  repren --full --preserve-case --from foo --to bar .
  • 使用 shuf 来从某个文件中打乱或随机选择行。
  • 了解 sort 的选项。知道这些键是怎么工作的(-t-k)。特别是,注意你需要写-k1,1来只通过第一个字段排序;-k1意味着根据整行排序。
  • 稳定排序(sort -s)会很有用。例如,要首先按字段2排序,然后再按字段1排序,你可以使用 sort -k1,1 | sort -s -k2,2
  • 如果你曾经需要在 Bash 命令行中写一个水平制表符(如,用于 -t 参数的排序),按ctrl-v [Tab],或者写$'\t'(后面的更好,因为你可以复制/粘贴)。
  • 对源代码进行补丁的标准工具是 diffpatch。 用 diffstat 来统计 diff 情况。注意 diff -r 可以用于整个目录,所以可以用 diff -r tree1 tree2 | diffstat 来统计(两个目录的)差异。
  • 对于二进制文件,使用 hd 进行简单十六进制转储,以及 bvi 用于二进制编辑。
  • 还是用于二进制文件,strings(加上 grep 等)可以让你找出一点文本。
  • 对于二进制文件的差异(delta 压缩),可以使用 xdelta3
  • 要转换文本编码,试试 iconv 吧,或者对于更高级的用途使用 uconv;它支持一些高级的 Unicode 的东西。例如,这个命令可以转换为小写并移除所有重音符号(通过扩展和丢弃):
  uconv -f utf-8 -t utf-8 -x '::Any-Lower; ::Any-NFD; [:Nonspacing Mark:] >; ::Any-NFC; ' < input.txt > output.txt
  • 要将文件分割成几个部分,来看看 split(按大小分割)和 csplit(按格式分割)吧。
  • 使用 zlesszmorezcatzgrep 来操作压缩文件。

系统调试

  • 对于 Web 调试,curlcurl -I 很方便灵活,或者也可以使用它们的同行 wget,或者更现代的 httpie
  • 要了解磁盘、CPU、网络的状态,使用 iostatnetstattop(或更好的 htop)和(特别是)dstat。它们对于快速获知系统中发生的状况很好用。
  • 对于更深层次的系统总览,可以使用 glances。它会在一个终端窗口中为你呈现几个系统层次的统计数据,对于快速检查各个子系统很有帮助。
  • 要了解内存状态,可以运行 freevmstat,看懂它们的输出结果吧。特别是,要知道“cached”值是Linux内核为文件缓存所占有的内存,因此,要有效地统计“free”值。
  • Java 系统调试是一件截然不同的事,但是对于 Oracle 系统以及其它一些 JVM 而言,不过是一个简单的小把戏,你可以运行 kill -3 <pid>,然后一个完整的堆栈追踪和内存堆的摘要(包括常规的垃圾收集细节,这很有用)将被转储到stderr/logs。
  • 使用 mtr 作路由追踪更好,可以识别网络问题。
  • 对于查看磁盘满载的原因,ncdu 会比常规命令如 du -sh * 更节省时间。
  • 要查找占用带宽的套接字和进程,试试 iftopnethogs 吧。
  • (Apache附带的)ab工具对于临时应急检查网络服务器性能很有帮助。对于更复杂的负载测试,可以试试 siege
  • 对于更仔细的网络调试,可以用 wiresharktsharkngrep
  • 掌握 straceltrace。如果某个程序失败、挂起或崩溃,而你又不知道原因,或者如果你想要获得性能的大概信息,这些工具会很有帮助。注意,分析选项(-c)和使用 -p 关联运行进程。
  • 掌握 ldd 来查看共享库等。
  • 知道如何使用 gdb 来连接到一个运行着的进程并获取其堆栈追踪信息。
  • 使用 /proc。当调试当前的问题时,它有时候出奇地有帮助。样例:/proc/cpuinfo/proc/xxx/cwd/proc/xxx/exe/proc/xxx/fd//proc/xxx/smaps
  • 当调试过去某个东西为何出错时,sar 会非常有帮助。它显示了 CPU、内存、网络等的历史统计数据。
  • 对于更深层的系统和性能分析,看看 stap (SystemTap),perf) 和 sysdig 吧。
  • 确认是正在使用的 Linux 发行版版本(支持大多数发行版):lsb_release -a
  • 每当某个东西的行为异常时(可能是硬件或者驱动器问题),使用dmesg

单行程序

这是将命令连成一行的一些样例:

  • 有时候通过 sort/uniq 对文本文件做交集、并集和差集运算时,这个例子会相当有帮助。假定 ab 是已经进行了唯一性处理的文本文件。这会很快,而且可以处理任意大小的文件,总计可达数千兆字节。(Sort不受内存限制,不过如果 /tmp 放在一个很小的根分区的话,你可能需要使用 -T 选项。)也可参见上面关于LC_ALL的注解和 -u 选项(参见下面例子更清晰)。
sh cat a b | sort | uniq > c # c 是 a 和 b 的并集 
cat a b | sort | uniq -d > c # c 是 a 和 b 的交集 
cat a b b | sort | uniq -u > c # c 是 a 减去 b 的差集
  • 使用 grep . * 来可视化查看一个目录中的所有文件的所有内容,例如,对于放满配置文件的目录: /sys/proc/etc
  • 对某个文本文件的第三列中所有数据进行求和(该例子可能比同等功能的Python要快3倍,而且代码也少于其3倍):
  awk '{ x += $3 } END { print x }' myfile
  • 如果想要查看某个文件树的大小/日期,该例子就像一个递归ls -l,但是比ls -lR要更容易读懂:
  find . -type f -ls
  • 只要可以,请使用 xargsparallel。注意,你可以控制每行(-L)执行多少个项目,以及并行执行(-P)。如果你不确定它是否会做正确的事情,可以首先使用 xargs echo。同时,使用 -I{} 也很方便。样例:
  find . -name '*.py' | xargs grep some_function
  cat hosts | xargs -I{} ssh root@{} hostname
  • 比如说,你有一个文本文件,如 Web 服务器的日志,在某些行中出现了某个特定的值,如 URL 中出现的 acct_id 参数。如果你想要统计有多少个 acct_id 的请求:
cat access.log | egrep -o 'acct_id=[0-9]+' | cut -d= -f2 | sort | uniq -c | sort -rn
  • 运行该函数来获得来自本文的随机提示(解析Markdown并从中提取某个项目):
function taocl() {
    curl -s https://raw.githubusercontent.com/jlevy/the-art-of-command-line/master/README.md |
      pandoc -f markdown -t html |
      xmlstarlet fo --html --dropdtd |
      xmlstarlet sel -t -v "(html/body/ul/li[count(p)>0])[$RANDOM mod last()+1]" |
      xmlstarlet unesc | fmt -80
  }

晦涩难懂,但却有用

  • expr:实施算术或布林操作,或者求正则表达式的值
  • m4:简单的宏处理器
  • yes:大量打印一个字符串
  • cal:漂亮的日历
  • env:(以特定的环境变量设置)运行一个命令(脚本中很有用)
  • look:查找以某个字符串开头的英文单词(或文件中的行)
  • cutpaste 以及 join:数据处理
  • fmt:格式化文本段落
  • pr:格式化文本为页/列
  • fold:文本折行
  • column:格式化文本为列或表
  • expandunexpand:在制表符和空格间转换
  • nl:添加行号
  • seq:打印数字
  • bc:计算器
  • factor:分解质因子
  • gpg:加密并为文件签名
  • toe:terminfo 条目表
  • nc:网络调试和数据传输
  • socat:套接字中继和 tcp 端口转发(类似 netcat
  • slurm:网络流量可视化
  • dd:在文件或设备间移动数据
  • file:识别文件类型
  • tree:以树形显示目录及子目录;类似 ls,但是是递归的。
  • stat:文件信息
  • tac:逆序打印文件
  • shuf:从文件中随机选择行
  • comm:逐行对比分类排序的文件
  • hdbvi:转储或编辑二进制文件
  • strings:从二进制文件提取文本
  • tr:字符转译或处理
  • iconvuconv:文本编码转换
  • splitcsplit:分割文件
  • units:单位转换和计算;将每双周(fortnigh)一浪(浪,furlong,长度单位,约201米)转换为每瞬(blink)一缇(缇,twip,一种和屏幕无关的长度单位)(参见: /usr/share/units/definitions.units)(LCTT 译注:这都是神马单位啊!)
  • 7z:高比率文件压缩
  • ldd:动态库信息
  • nm:目标文件的符号
  • ab:Web 服务器基准测试
  • strace:系统调用调试
  • mtr:用于网络调试的更好的路由追踪软件
  • cssh:可视化并发 shell
  • rsync:通过 SSH 同步文件和文件夹
  • wiresharktshark:抓包和网络调试
  • ngrep:从网络层摘取信息
  • hostdig:DNS查询
  • lsof:处理文件描述符和套接字信息
  • dstat:有用的系统统计数据
  • glances:高级,多个子系统概览
  • iostat:CPU和磁盘使用率统计
  • htop:top的改进版
  • last:登录历史
  • w:谁登录进来了
  • id:用户/组身份信息
  • sar:历史系统统计数据
  • iftopnethogs:按套接口或进程的网络使用率
  • ss:套接口统计数据
  • dmesg:启动和系统错误信息
  • hdparm:SATA/ATA 磁盘操作/改善性能
  • lsb_release:Linux 发行版信息
  • lsblk:列出块设备,以树形展示你的磁盘和分区
  • lshw:硬件信息
  • fortuneddatesl:嗯,好吧,它取决于你是否认为蒸汽机车和 Zippy 引用“有用”

更多资源

免责声明

除了非常小的任务外,其它都写出了代码供大家阅读。伴随力量而来的是责任。事实是,你在Bash中做的,并不意味着是你所应该做的!;)


via: https://github.com/jlevy/the-art-of-command-line

作者:jlevy 译者:GOLinux 校对:wxy

本文由 LCTT 原创翻译,Linux中国 荣誉推出

这里,我们来看Linux命令行实用技巧的下一个部分。如果你错过了Linux Tracks之前的文章,可以从这里找到。

本篇中,我们将会介绍6个命令行小技巧,包括使用Netcat命令创建Linux命令行聊天,从某个命令的输出中对某一列做加法,移除Debian和CentOS上多余的包,从命令行中获取本地与远程的IP地址,在终端获得彩色的输出与解码各样的颜色,最后是Linux命令行里井号标签的使用。让我们来一个一个地看一下。

Linux Commandline Chat Server

6个实用的命令行技巧

1. 创建Linux命令行聊天服务

我们大家使用聊天服务都有很长一段时间了。对于Google Chat,Hangout,Facebook Chat,Whatsapp,Hike和其他一些应用与集成的聊天服务,我们都很熟悉了。那你知道Linux的nc命令可以使你的Linux机器变成一个聊天服务器,而仅仅只需要一行命令吗。什么是nc命令,它又是怎么工作的呢?

nc即Linux netcat命令。nc就像瑞士军刀一样,内建了大量的功能。nc可用做调式工具,调查工具,使用TCP/UDP读写网络连接,DNS正向/反向查询等等。

nc主要用在端口扫描,文件传输,后台和端口监听。nc可以使用任何闲置的端口和任何本地网络源地址。

使用nc命令(在192.168.0.7的服务器上)创建一个命令行即时信息传输服务器。

$ nc -l -vv -p 11119

对上述命令的解释。

  • -v : 显示冗余信息
  • -vv : 显示更多的冗余信息
  • -p : 本地端口号

你可以用任何其他的本地端口号替换11119。

接下来在客户端机器(IP地址:192.168.0.15),运行下面的命令初始化聊天会话(这里需要上面提到的信息服务器正在运行)。

$ nc 192.168.0.7:11119

Linux Commandline Chat with nc Command

注意:你可以按下ctrl+c终止会话,同时nc聊天是一个一对一的服务。

2. Linux中如何统计某一列的总值

如何在终端里统计某个命令的输出中其中一列的数值总和,

‘ls -l’命令的输出。

$ ls -l

Sum Numerical Values

注意到第二列代表软连接的数量,第五列则是文件的大小。假设我们需要汇总第五列的数值。

仅仅列出第五列的内容。我们会使用‘awk’命令做到这点。‘$5’即代表第五列。

$ ls -l | awk '{print $5}'

List Content Column

现在,通过管道连接,使用awk打印出第五列数值的总和。

$ ls -l | awk '{print $5}' | awk '{total = total + $1}END{print total}'

Sum and Print Columns

在Linux里如何移除废弃包

废弃包是指那些作为其他包的依赖而被安装,但是当源包被移除之后就不再需要的包。

假设我们安装了一个叫gtprogram的软件包,其依赖是gtdependency。除非我们安装了gtdependency,否则安装不了gtprogram。

当我们移除gtprogram的时候,默认并不会移除gtdependency。并且如果我们不移除gtdependency的话,它就会遗留下来成为废弃包,与其他任何包再无联系。

# yum autoremove                [On RedHat Systems]

Remove Orphan Packages in CentOS

# apt-get autoremove                [On Debian Systems]

Remove Orphan Packages in Debian

你应该经常移除废弃包,保持Linux机器仅仅加载一些需要的东西。

4. 如何获得Linux服务器本地的与公网的IP地址

为了获得本地IP地址,运行下面的一行脚本。

$ ifconfig | grep "inet addr:" | awk '{print $2}' | grep -v '127.0.0.1' | cut -f2 -d:

你必须安装了ifconfig,如果没有,使用apt或者yum工具安装需要的包。这里我们将会管道连接ifconfig的输出,并且结合grep命令找到包含“intel addr:”的字符串。

我们知道对于输出本地IP地址,ifconfig命令足够用了。但是ifconfig生成了许多的输出,而我们关注的地方仅仅是本地IP地址,不是其他的。

# ifconfig | grep "inet addr:"

Check Local IP Address

尽管目前的输出好多了,但是我们需要过滤出本地的IP地址,不含其他东西。针对这个,我们将会使用awk打印出第二列输出,通过管道连接上述的脚本。

# ifconfig | grep “inet addr:” | awk '{print $2}' 

Filter Only IP Address

上面图片清楚的表示,我们已经很大程度上自定义了输出,当仍然不是我们想要的。本地环路地址 127.0.0.1 仍然在结果中。

我们可以使用grep的-v选项,这样会打印出不匹配给定参数的其他行。每个机器都有同样的环路地址 127.0.0.1,所以使用grep -v打印出不包含127.0.0.1的行,通过管道连接前面的脚本。

# ifconfig | grep "inet addr" | awk '{print $2}' | grep -v '127.0.0.1'

Print IP Address

我们差不多得到想要的输出了,仅仅需要从开头替换掉字符串(addr:)。我们将会使用cut命令单独打印出第二列。一二列之间并不是用tab分割,而是(:),所以我们需要使用到域分割符选项(-d),通过管道连接上面的输出。

# ifconfig | grep "inet addr:" | awk '{print $2}' | grep -v '127.0.0.1' | cut -f2 -d:

Customized IP Address

最后!期望的结果出来了。

5.如何在Linux终端彩色输出

你可能在终端看见过彩色的输出。同时你也可能知道在终端里允许/禁用彩色输出。如果都不知道的话,你可以参考下面的步骤。

在Linux中,每个用户都有'.bashrc'文件,被用来管理你的终端输出。打开并且编辑该文件,用你喜欢的编辑器。注意一下,这个文件是隐藏的(文件开头为点的代表隐藏文件)。

$ vi /home/$USER/.bashrc

确保以下的行没有被注释掉。即,行开头没有#。

if [ -x /usr/bin/dircolors ]; then
    test -r ~/.dircolors && eval "$(dircolors -b ~/.dircolors)" || eval "$(dirc$
    alias ls='ls --color=auto'
    #alias dir='dir --color=auto'
    #alias vdir='vdir --color=auto'

    alias grep='grep --color=auto'
    alias fgrep='fgrep --color=auto'
    alias egrep='egrep --color=auto'
fi

User .bashrc File

完成后!保存并退出。为了让改动生效,需要注销账户后再次登录。

现在,你会看见列出的文件和文件夹名字有着不同的颜色,根据文件类型来决定。要了解所用的颜色代码,可以运行下面的命令。

$ dircolors -p | less

Linux Color Output

6.如何用#号标记Linux命令和脚本

我们一直在Twitter,Facebook和Google Plus(可能是其他我们没有提到的地方)上使用#号标签。那些#号标签使得其他人搜索一个标签更加容易。可是很少人知道,我们可以在Linux命令行使用#号标签。

我们已经知道配置文件里的#,在大多数的编程语言中,这个符号被用作注释行,即不被执行。

运行一个命令,然后为这个命令创建一个#号标签,这样之后我们就可以找到它。假设我们有一个很长的脚本,就上面第四点被执行的命令。现在为它创建一个#号标签。我们知道ifconfig可以被sudo或者root执行,因此用root来执行。

# ifconfig | grep "inet addr:" | awk '{print $2}' | grep -v '127.0.0.1' | cut -f2 -d: #myip

上述脚本被’myip‘给标记了。现在在reverse-i-search(按下ctrl+r)搜索一下这个标签,在终端里,并输入’myip‘。你可以从这里开始执行。

Create Command Hash Tags

你可以为每个命令创建#号标签,之后使用reverse-i-search找到它。

目前就这么多了。我们一直在辛苦的工作,创造有趣的,有知识性的内容给你。你觉得我们是如何工作的呢?欢迎咨询任何问题。你可以在下面评论。保持联络!Kudox。


via: http://www.tecmint.com/linux-commandline-chat-server-and-remove-unwanted-packages/

作者:Avishek Kumar 译者:wi-cuckoo 校对:wxy

本文由 LCTT 原创翻译,Linux中国 荣誉推出