标签: bash

有用的 bash 别名并生成最常用命令的列表

我发现这篇文章讨论了一种对 bash 历史记录进行排序并查看您最常使用哪些命令的快速方法:

cut -f1 -d" " .bash_history | sort | uniq -c | sort -nr | head -n 30
Run Code Online (Sandbox Code Playgroud)

它确实让您大开眼界,了解您应该为哪些任务创建别名,以及您应该完全取消哪些任务。

我很想看到推荐的命令行别名的 ServerFault 列表,这些别名可以节省您的工作时间。你有什么?

在我们之间,我敢打赌,我们可以让每个阅读这篇文章的用户每天至少节省 10 分钟。(减去第一天,他们把所有时间都浪费在阅读 ServerFault 而不是做他们的工作上!)

bash alias

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

为什么我的 .bashrc 在 cygwin 下无法读取?

我的 .bashrc 看起来像这样:

alias name@server="ssh server sname"
echo "bashrc read"
Run Code Online (Sandbox Code Playgroud)

echo语句仅用于检查是否已读取。但回声什么也不做。我想为一个更快的 ssh 设置一个别名到一个执行某个命令的盒子中,该命令是远程盒子上的一个工作别名。

bash cygwin bashrc

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

如何更改到我刚刚将该文件移动到的目录?

所以让我们假设我刚刚完成:

mv ./myfile /to/some/other/place/
Run Code Online (Sandbox Code Playgroud)

我现在决定要跟踪该文件,并进入该目录。

虽然我可以使用鼠标,但选择文本,键入“cd”,然后右键单击以粘贴 - 我更喜欢更快的基于键盘的目录。

那么,最好的方法是什么?
(一般来说,如果不同,则特别是 Centos+Bash)

linux unix shell bash directory

10
推荐指数
2
解决办法
400
查看次数

Bash:如何知道最后一个命令的输出是否以换行符结尾?

大多数情况下,命令的输出以换行符结尾。但有时不会,因此下一个 shell 提示与输出一起打印在同一行中。

例子:

root@hostname [~] # echo -n hello
helloroot@hostname [~] #

我一直觉得这很烦人。
现在,我可以在 PS1 变量的开头添加一个“\n”,但大多数情况下会打印我不需要的额外行。

是否有可能知道最后一个命令的输出是否以换行符结尾?


解决方案:(
感谢丹尼斯)

PS1='$(printf "%$((`tput cols`-1))s\r")\u@\h [\w]\$ '
Run Code Online (Sandbox Code Playgroud)

linux shell bash prompt

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

linux 命令行:查找主机的规范主机名

从 linux 的命令行获取主机的规范主机名的最简单方法是什么?

如果重要的话,我的外壳是 bash。

澄清:我想要另一个主机的规范主机名,通过 ip 或非规范主机名。不是本地主机的规范主机名。

domain-name-system linux bash hostname

10
推荐指数
4
解决办法
5万
查看次数

尾部和通配符

我想获取多个文件的最后 10 行。我知道它们都以“-access_log”结尾。所以我试过:

 tail -10 *-access_log 
Run Code Online (Sandbox Code Playgroud)

但这给了我一个错误,例如:

tail -10 file-*
Run Code Online (Sandbox Code Playgroud)

给我我期望的输出。我认为这可能更多地与 BASH 相关,然后是尾部。但是命令如:

cat *-access_log
Run Code Online (Sandbox Code Playgroud)

工作正常。

有什么建议?

linux bash

10
推荐指数
2
解决办法
7215
查看次数

使用 shell 脚本检查 rsync 是否进行了任何更改

我有一个 bash 脚本,它包含 rsync 的两个目录。有时会发生变化,很可能什么都没有。

我只想在 rsync 实际进行更改(添加/更新文件)时运行命令。否则我只想跳过它。是否有我应该查看的返回响应?

unix bash rsync unix-shell

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

从 PATH 变量中删除重复条目

我经常修改我的 .bashrc 然后获取它。但是,当export PATH="~/bin:~/perl5/bin:$PATH"我的文件中有类似内容 时,PATH每次获取文件时环境变量都会增加。

例如,第一次获取 .bashrc 时,PATH变量由.bashrc组成~/bin:~/perl5/bin:/usr/bin:/bin

第二次它由~/bin:~/perl5/bin:~/bin:~/perl5/bin:/usr/bin:/bin.

第三次它由~/bin:~/perl5/bin:~/bin:~/perl5/bin:~/bin:~/perl5/bin:/usr/bin:/bin.

有没有一种简单的方法可以让它只添加任何不在 PATH 中的东西?

shell bash bashrc path

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

每次有人通过 SSH 登录到 Linux 机器时执行程序

我有一个小型 SSH 服务器,我想编写一个脚本,以便在每次有人通过 SSH 登录时运行。

现在,我该怎么办?

我希望脚本在每次 ANYBODY 登录时都运行,并且我至少需要访问登录者的用户名和登录者的 IP 地址。

我考虑过使用/etc/bash.bashrc,但这是一个好的解决方案吗?例如,有没有办法让用户禁用它的使用,从而禁用我的脚本?如果是,我的其他选择是什么?

谢谢。

linux ssh bash

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

在此处文档中通过 SSH 运行命令时不存在 TTY

我正在尝试在此处的文档中像这样通过 SSH 运行命令:

ssh example.com <<END
sudo /etc/init.d/apache2 reload
END
Run Code Online (Sandbox Code Playgroud)

这通常有效,除非我尝试运行需要输入的内容,例如 sudo 的密码。在这种情况下,我收到以下消息:

sudo: no tty present and no askpass program specified
Run Code Online (Sandbox Code Playgroud)

我知道我可以使用-tSSH 上的标志来分配一个伪 tty,例如:

ssh -t example.com "sudo /etc/init.d/apache2 reload"
Run Code Online (Sandbox Code Playgroud)

它会起作用,但是当我用 here-document 尝试同样的事情时,它不起作用,我会得到关于没有 tty 的相同错误:

ssh -t example.com <<END
sudo /etc/init.d/apache2 reload
END
Run Code Online (Sandbox Code Playgroud)

知道我怎样才能使这项工作?

另外,如果您想知道为什么我希望它与 here-document 一起使用而不是仅仅在同一行上传递它,那是因为输入命令(可能有几个)来自脚本读取的配置文件我听说它避免了转义引号、双引号等命令的麻烦。

ssh bash sudo

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

标签 统计

bash ×10

linux ×5

shell ×3

bashrc ×2

ssh ×2

unix ×2

alias ×1

cygwin ×1

directory ×1

domain-name-system ×1

hostname ×1

path ×1

prompt ×1

rsync ×1

sudo ×1

unix-shell ×1