有什么是你不能没有的,会让我的生活变得更轻松吗?以下是我使用的一些(“磁盘空间”和“文件夹”特别方便)。
# some more ls aliases
alias ll='ls -alh'
alias la='ls -A'
alias l='ls -CFlh'
alias woo='fortune'
alias lsd="ls -alF | grep /$"
# This is GOLD for finding out what is taking so much space on your drives!
alias diskspace="du -S | sort -n -r |more"
# Command line mplayer movie watching for the win.
alias mp="mplayer -fs"
# Show me the size (sorted) of only the folders in this directory
alias folders="find . -maxdepth 1 -type d -print …Run Code Online (Sandbox Code Playgroud) 因此,假设有人在其中输入了一些内容以.bashrc阻止他(或她)通过 viassh登录(即 ssh 登录因文件中的错误而退出)。有没有什么方法可以让这个人在不执行它的情况下登录(或者.bashrc因为一个运行另一个),或者以其他方式删除/重命名/使文件无效?
假设您没有对机器的物理访问权限,并且这是唯一可以通过 ssh 进入的用户帐户。
供参考:.bash_profile包括.bashrc:
[[ -f ~/.bashrc ]] && . ~/.bashrc
Run Code Online (Sandbox Code Playgroud)
编辑:我尝试过的事情:
ssh user@host "rm ~/.bashrc"
scp nothing user@host:/RAID/home/tom/.bashrc
ssh user@host "/bin/bash --norc"
Run Code Online (Sandbox Code Playgroud)
都给出错误:
/RAID/home/tom/.bashrc: line 16: /usr/local/bin/file: No such file or directory
/RAID/home/tom/.bashrc: line 16: exec: /usr/local/bin/file: cannot execute: No such file or directory
Run Code Online (Sandbox Code Playgroud) 我有用户访问权限(无 root)到 Linux (Suse) 机器,我在那里开发了一些 bash 脚本和相应的 bash 自动完成规则。
由于脚本仅属于我的用户,因此我只需要对我来说“活动”的完整规则(部分原因是我没有 root 写入权限),将我的 bash_completion 脚本放入/etc/bash_completion.d/文件夹不是一个选项。
目前我命名我的文件.bash_completion.myscript并直接从我的.bashrc.
例如,创建一个文件夹/home/myuser/.bash_completion.d/?
“登录”和“交互式” bash shell 有什么区别?我在下面引用了维基百科,但有人能给出更好的答案吗?
编辑:这是一个社区维基,所以也许不是投票关闭,您可以提供示例说明哪些情况需要哪种类型的 $SHELL
启动脚本
当 Bash 启动时,它会执行各种不同脚本中的命令。
当 Bash 作为交互式登录 shell 被调用时,它首先从文件 /etc/profile 读取并执行命令(如果该文件存在)。读取该文件后,它会按顺序查找 ~/.bash_profile、~/.bash_login 和 ~/.profile,然后从第一个存在且可读的命令中读取和执行命令。
当登录 shell 退出时,Bash 从文件 ~/.bash_logout(如果存在)读取并执行命令。
当一个不是登录 shell 的交互式 shell 启动时,Bash 从 ~/.bashrc 读取并执行命令(如果该文件存在)。这可以通过使用 --norc 选项来禁止。--rcfile 文件选项将强制 Bash 从文件而不是 ~/.bashrc 读取和执行命令。
当我通过 ssh 登录到我的服务器时,我试图让以下命令自动执行:
ssh-agent /bin/bash
ssh-add ~/.ssh/id_rsa
Run Code Online (Sandbox Code Playgroud)
我的 ssh 密钥有一个密码短语,每次登录输入一次就可以了。
我尝试将它放在我的 .bashrc 文件中,但是我相信 ssh-agent 会启动一个新的 bash 会话。当我在我的 .bashrc 中有这个后尝试登录时,它卡住了,我必须输入“退出”才能看到“输入密码以解锁密钥”提示
还有其他建议吗?
服务器正在运行 Ubuntu LTS
我将“退出”放在我的 .bashrc 文件中。我没有对机器的物理访问权限,因此我使用 ssh 连接到它。我没有root权限。每次我连接到服务器时,连接都会自动关闭。
到目前为止,我已经尝试过:
我可以做些什么来禁用 .bashrc 或者在 .bashrc 被获取之前覆盖文件?
更新
@ring0
我尝试了你的建议,但没有运气。bashrc 文件仍然首先运行。
我尝试的另一件事是使用另一个帐户登录并 sudo 编辑 .bashrc,但我没有此帐户的 sudo 权限。
我想我会联系管理员。
编辑
@shellholic
我不敢相信,但这种方法奏效了!即使“退出”出现在.bashrc 文件的前几行(仅由几个if块和导出语句组成),我仍然设法在 20 次尝试(大约需要 3 分钟)内成功地使用 Ctrl-c 中断它。我删除了 .bashrc 中的违规行,一切又恢复正常。
我发现在与我合作的新公司中,我经常不得不访问生命周期相对较短的 linux 服务器。在这些服务器中的每一个上,我都有一个帐户,但是每当创建一个新帐户时,我都必须通过我的 .bashrc 进行转移。然而,有可能在大约一个月的时间内该服务器将不再存在。我还必须在短时间内(几分钟)访问许多其他服务器,通过我的 .bashrc 进行传输是不值得的,但由于我在很多服务器上工作,这加起来浪费了很多时间。
我不想更改服务器上的任何内容,但我想知道是否有办法拥有“每个连接”的 .bashrc,因此每当我通过 SSH 连接到服务器时,我的设置都将用于该会话。
如果这是可能的,如果我可以对其他配置文件(如 gitconfig 文件)做同样的事情,那就太好了。
我的问题是我需要设置几个变量,并且每次登录ssh shell时输出几行,同时我必须能够使用sftp通过Filezilla tarnsfer文件。
现在,根据http://www.openssh.org/faq.html 上的 openssh 常见问题解答,如果您的启动脚本回显任何类型的输出,它就会与 sftp 混淆。因此,它要么无限期地延迟,要么因“连接被服务器关闭,退出代码为 128”而出错。
我尝试过将 .bashrc 移动到 .bash_profile 或在 .bashrc 中使用以下代码的解决方案:
if [ "$TERM" != "dumb" ]
then
source .bashc_real
fi
Run Code Online (Sandbox Code Playgroud)
和:
if [ "$TERM" = "xterm" ]
then
source .bashc_real
fi
Run Code Online (Sandbox Code Playgroud)
但是,没有任何效果。我的 shell 终端是 bash,我使用 filezilla 连接到 sftp。
在最后.bashrc我补充道:
touch /tmp/bash_noninteractive_test
Run Code Online (Sandbox Code Playgroud)
跑步:
/usr/bin/ssh -v -C root@example.com 'ls'
Run Code Online (Sandbox Code Playgroud)
在主机上(之前交互式登录):
% ls -l /tmp/bash_noninteractive_test
ls: cannot access /tmp/bash_noninteractive_test: No such file or directory
Run Code Online (Sandbox Code Playgroud)
我认为~./bashrc总是来自非交互式 shell,比如通过 SSH?我该如何解决这个问题?
受影响的系统:
% lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 14.04.5 LTS
Release: 14.04
Codename: trusty
Run Code Online (Sandbox Code Playgroud)
% lsb_release -a
No LSB modules are available.
Distributor ID: Debian
Description: Debian GNU/Linux 8.11 (jessie)
Release: 8.11
Codename: jessie
Run Code Online (Sandbox Code Playgroud) 刚刚使用 Ubuntu 12.04 配置了一个新的 Rackspace 实例,并从他们的 github 中下载了 rbenv 并安装了它。
执行时出现以下错误 . ./~bashrc
$ . ~/.bashrc
sh: 18: /home/deployer/.bashrc: shopt: not found
sh: 26: /home/deployer/.bashrc: shopt: not found
sh: 110: /home/deployer/.bashrc: shopt: not found
sh: 28: /etc/bash_completion: [[: not found
sh: 34: /etc/bash_completion: [[: not found
sh: 51: /etc/bash_completion: Bad substitution
Run Code Online (Sandbox Code Playgroud)
这是我的 .bashrc(用于用户部署者),我添加的唯一内容是顶部的 rbenv 位。
$ cat .bashrc
# ~/.bashrc: executed by bash(1) for non-login shells.
# see /usr/share/doc/bash/examples/startup-files (in the package bash-doc)
# for examples
if [ -d "${RBENV_ROOT}" …Run Code Online (Sandbox Code Playgroud) bashrc ×10
bash ×6
ssh ×5
linux ×4
ubuntu ×2
debian ×1
dotfiles ×1
login ×1
sftp ×1
shell ×1
ssh-keygen ×1
ubuntu-12.04 ×1
user-profile ×1