我发现这篇文章讨论了一种对 bash 历史记录进行排序并查看您最常使用哪些命令的快速方法:
cut -f1 -d" " .bash_history | sort | uniq -c | sort -nr | head -n 30
Run Code Online (Sandbox Code Playgroud)
它确实让您大开眼界,了解您应该为哪些任务创建别名,以及您应该完全取消哪些任务。
我很想看到推荐的命令行别名的 ServerFault 列表,这些别名可以节省您的工作时间。你有什么?
在我们之间,我敢打赌,我们可以让每个阅读这篇文章的用户每天至少节省 10 分钟。(减去第一天,他们把所有时间都浪费在阅读 ServerFault 而不是做他们的工作上!)
我的 .bashrc 看起来像这样:
alias name@server="ssh server sname"
echo "bashrc read"
Run Code Online (Sandbox Code Playgroud)
该echo语句仅用于检查是否已读取。但回声什么也不做。我想为一个更快的 ssh 设置一个别名到一个执行某个命令的盒子中,该命令是远程盒子上的一个工作别名。
所以让我们假设我刚刚完成:
mv ./myfile /to/some/other/place/
Run Code Online (Sandbox Code Playgroud)
我现在决定要跟踪该文件,并进入该目录。
虽然我可以使用鼠标,但选择文本,键入“cd”,然后右键单击以粘贴 - 我更喜欢更快的基于键盘的目录。
那么,最好的方法是什么?
(一般来说,如果不同,则特别是 Centos+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 的命令行获取主机的规范主机名的最简单方法是什么?
如果重要的话,我的外壳是 bash。
澄清:我想要另一个主机的规范主机名,通过 ip 或非规范主机名。不是本地主机的规范主机名。
我想获取多个文件的最后 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)
工作正常。
有什么建议?
我有一个 bash 脚本,它包含 rsync 的两个目录。有时会发生变化,很可能什么都没有。
我只想在 rsync 实际进行更改(添加/更新文件)时运行命令。否则我只想跳过它。是否有我应该查看的返回响应?
我经常修改我的 .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 中的东西?
我有一个小型 SSH 服务器,我想编写一个脚本,以便在每次有人通过 SSH 登录时运行。
现在,我该怎么办?
我希望脚本在每次 ANYBODY 登录时都运行,并且我至少需要访问登录者的用户名和登录者的 IP 地址。
我考虑过使用/etc/bash.bashrc,但这是一个好的解决方案吗?例如,有没有办法让用户禁用它的使用,从而禁用我的脚本?如果是,我的其他选择是什么?
谢谢。
我正在尝试在此处的文档中像这样通过 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 一起使用而不是仅仅在同一行上传递它,那是因为输入命令(可能有几个)来自脚本读取的配置文件我听说它避免了转义引号、双引号等命令的麻烦。