小编dot*_*hen的帖子

导航 CLI:将文本从特定字符替换为特定字符

我是一名 VIM 用户,正在学习在 Bash 中使用的 Emacs 命令。我知道在我的系统上我可以在 Bash 中使用 Vim 键绑定,但我想学习如何在默认配置中有效地使用它。

考虑以下将文件上传到 Web 服务的命令:

$ time curl -F "status_file=@under1meg.txt" -F "baz=777&bin=123&alice=bob" http://somesite.com/internal/project/status/foo/add_status.php
Run Code Online (Sandbox Code Playgroud)

我有一堆文件要上传不同的参数。以下是一些问题:

  1. 如何可能我很容易地从行结束回到之前http部分?该组合AltB仅针对每个 [az] 块返回,因此我必须针对 URL 中的每个目录进行此操作。是返回CtrlRSpace的首选方式吗?请注意,CtrlW确实删除回之前的空白,因此<something> until whitespace似乎存在的想法。

  2. 如何从当前光标位置删除回@字符?按CtrlW删除直到空格,所以这不会有帮助,因为@字符被埋在非空格中。我可以CtrlR@然后AltD删除单词,直到我到达我需要的地方,但这是相当迟钝的。没有delete until previous <something>命令吗?

请注意,我对学习如何使用默认的 Bash 配置很感兴趣,因为我经常通过 SSH 连接到某个网络服务器。我不想配置 Zsh、Vim 键绑定或.bash_profile.

bash keyboard-shortcuts

3
推荐指数
1
解决办法
255
查看次数

如何知道什么是命令、系统调用、bash 内置函数等?

最近有同事问“什么是man”?在得知并非所有可从 Bash CLI 访问的内容都是命令后,我对调用man命令持谨慎态度。

man man只是称其为接口:

NAME
       man - an interface to the on-line reference manuals
Run Code Online (Sandbox Code Playgroud)

man有一个可执行文件:

$ which man
/usr/bin/man
$ file /usr/bin/man
/usr/bin/man: ELF 64-bit LSB shared object
Run Code Online (Sandbox Code Playgroud)

man程序也是如此吗,因为它有可执行文件?还可以是哪些其他名词man?什么名词最能描述它?真的,我对如何确定任意值是什么的一般情况感兴趣,这只是一个例子。thing on the climan

就此而言,可以在 Bash CLI 上使用的所有内容用什么词来表示?一个包含命令、别名、系统调用等的词?

command-line terminology

3
推荐指数
2
解决办法
1549
查看次数

SSH 锁定:怀疑是本地问题,而不是远程问题

在我的工作计算机上,我经常通过 SSH 连接到两个不相关的服务器。有时 SSH 会话会锁定(不响应键盘输入)。锁定后,我可以通过第二个打开的终端通过 SSH 进入,这可行但不会解冻冻结的终端。~.在终端断开连接并为我提供本地 CLI 之前,按下需要一些时间。我经常从家里通过 SSH 连接到这两个服务器,没有任何问题,所以我怀疑问题出在我的本地工作计算机上。

其他终端是否出现问题?是的,问题出现在 Konqueror 和 Terminator 上。

问题是否同时出现在两个远程服务器上?不

服务器上运行的任何特定应用程序是否会出现此问题?有和没有 GNU Screen,在 CLI 和 VIM 中。

为了测试,我只开了四个终端:两个Konqueror终端,每个服务器一个;和两个终结者终端,每个服务器一个。大约一个小时后,只有一个(终结者)终端锁定。同一服务器的其他终端没有锁定,其他服务器的终端也没有锁定。当然,我在锁定的终端中尝试了 Ctrl-Q 以查看是否发送了错误的 Ctrl-S,但这并没有解决问题。Screen 未在锁定的终端中运行(既不在运行 SSH 的本机会话中,也不在 SSH 会话本身中)。

更新:一个小时后,在 Terminator 中锁定的服务器终于与“Write failed: Broken pipe”断开连接,我有一个可以工作的本地 CLI,并且 Konsole 中的两台服务器也被锁定了。

networking ssh

2
推荐指数
1
解决办法
2608
查看次数

通过 SSH 复制目录中的最新文件

如何将最新的文本文件从远程服务器上的特定目录复制到他的本地机器?

在服务器本身上,我可以执行以下操作:

$ cat `cd /home/user/dir ; readlink -f $(ls -t | head -1)` > ~/newest.txt
Run Code Online (Sandbox Code Playgroud)

这会将最新文件的内容放入~/newest.txt. 但是,我无法通过 SSH 运行它,因为本地系统会尝试解释刻度线和$(*)命令。Id est,这不起作用:

$ ssh me@server.com "cat `cd /home/user/dir ; readlink -f $(ls -t | head -1)`" > ~/newest.txt
bash: cd: /home/user/dir: No such file or directory
Connection to server.com closed.
Run Code Online (Sandbox Code Playgroud)

显然,/home/user/dir我的本地机器上不存在。我也尝试使用带有-t标志的SSH ,这没有帮助。我怎样才能$()在远程机器上而不是在我的本地机器上获取滴答声并进行解析?

顺便说一句,比我更聪明的人曾经宣布不应解析的输出ls。对于这个问题,我们可以安全地假设文件名只包含可打印的 ASCII 字符。但是,解决一般情况的答案会很好,而且我确实想学习,而不仅仅是一次。

bash ssh quoting

2
推荐指数
1
解决办法
958
查看次数

如何找到影响我的 I/O 的因素?

在用作网络服务器的 Ubuntu Linux 机器上,我发现我真的在敲打 I/O:

 - dysphoria():~$ iostat -d 3 3
Linux 3.13.0-45-generic (dysphoria)     2015-10-20      _x86_64_        (1 CPU)

Device:            tps    kB_read/s    kB_wrtn/s    kB_read    kB_wrtn
xvda             53.20      3228.67         3.63 1962017809    2203864
xvdf              0.00         0.00         0.00       1308          0

Device:            tps    kB_read/s    kB_wrtn/s    kB_read    kB_wrtn
xvda           1106.83     47900.72         0.00     133164          0
xvdf              0.00         0.00         0.00          0          0

Device:            tps    kB_read/s    kB_wrtn/s    kB_read    kB_wrtn
xvda           1003.56     53824.91         8.54     151248         24
xvdf              0.00         0.00         0.00          0          0
Run Code Online (Sandbox Code Playgroud)

注意平均I/O 高达 53,但当前I/O 超过 …

performance io

2
推荐指数
1
解决办法
669
查看次数

谁在吃数据?沙格斯?

我正在尝试使用内置的 PHP linter 解析 PHP 文件的递归目录,其工作方式如下:

$ php -l good.php
No syntax errors detected in good.php

$ php -l bad.php
PHP Parse error:  syntax error, unexpected ''foo'' (T_CONSTANT_ENCAPSED_STRING), expecting ')' in bad.php on line 3
Errors parsing bad.php
Run Code Online (Sandbox Code Playgroud)

我们可以看到,通过 linting 的文件No syntax errors输出包含Errors parsing.

我看到我在当前目录中递归地有 12147 个 PHP 文件,但是 PHP linter 只输出七行:

$ find . -name \*.php -print0 | xargs -0 ls -l | wc -l
12147

$ find . -name \*.php -print0 | xargs -0 …
Run Code Online (Sandbox Code Playgroud)

shell bash debugging xargs php

2
推荐指数
1
解决办法
365
查看次数

解析日志文件以获取值更改

这个答案我已经减少了一个日志文件:

Timestamp:1359021601 2013-01-17 15:00:01
size: 10G   /mnt/SolrFiles/solr/api/
Timestamp:1359025201 2013-01-17 16:00:01
size: 11G   /mnt/SolrFiles/solr/api/
...snip hundreds of lines...
Timestamp:1359021601 2013-01-24 10:00:01
size: 11G   /mnt/SolrFiles/solr/api/
Timestamp:1359025201 2013-01-24 11:00:01
size: 11G   /mnt/SolrFiles/solr/api/
Timestamp:1359028801 2013-01-24 12:00:01
size: 11G   /mnt/SolrFiles/solr/api/
Timestamp:1359032401 2013-01-24 13:00:01
size: 12G   /mnt/SolrFiles/solr/api/
Run Code Online (Sandbox Code Playgroud)

这种模式将持续数百行。我想减少文件以仅在大小更改时显示时间戳和大小,如下所示:

Timestamp:1359021601 2013-01-17 15:00:01
size: 10G   /mnt/SolrFiles/solr/api/
Timestamp:1359025201 2013-01-17 16:00:01
size: 11G   /mnt/SolrFiles/solr/api/
Timestamp:1359032401 2013-01-24 13:00:01
size: 12G   /mnt/SolrFiles/solr/api/
Run Code Online (Sandbox Code Playgroud)

这可以使用常见的 Linux CLI 工具(例如 grep 和 sed)来完成吗?

logs text-processing

1
推荐指数
1
解决办法
805
查看次数