相关疑难解决方法(0)

在命令行提示之间插入空行

使用命令行时,它通常会变得非常混乱。例如,检查过去的命令及其输出变得不方便。

我希望每次在显示命令提示符之前都添加一个换行符。像这样:

<clutter>
<blank line>
name@machine:~$
Run Code Online (Sandbox Code Playgroud)

我使用 bash 外壳。如何做到这一点?

command-line bash

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

SFTP 在哪些方面不是基于 SSH?

我刚刚完成了OverTheWire Bandit 兵棋推演,等级 18

那是一个惊喜。以下是此级别的说明。

下一级的密码存储在主目录的自述文件中。不幸的是,当您使用 SSH 登录时,有人修改了.bashrc以将您注销。

我在想一种让 shell 跳过 sourcing 的方法.bashrc。但在我找到解决方案之前,我很想简单地启动与服务器的 SFTP 连接。我没想到它会起作用。但它做到了。我想知道为什么。我认为 SFTP 通过 SSH 运行。

为清楚起见,当我通过 SSH 连接到服务器时,正如预期的那样,我被踢了出去。

ssh sftp

9
推荐指数
2
解决办法
1719
查看次数

bash 如何知道它是如何被调用的?

我已经安装jailkitUbuntu 12.04,我已经建立了一个用户的shell来/bin/bash-但是当它被调用运行/etc/bash.bashrc,而不是/etc/profile

如果您以前没有使用jailkit过这里是它的要点:

  1. 系统根目录的“监禁”版本在某处创建,例如 /home/jail
  2. 被监禁的用户主目录移动到该文件夹​​内,如 /home/jail/home/testuser
  3. 相关配置文件被复制到 /home/jail/etc/ - 包括有限的 /etc/passwd
  4. 您希望允许访问的程序被复制到相应的目录中,例如 /bin/bash
  5. 当一个被监禁的用户登录时,他们被 chroot 到 /etc/jail/ 并且看不到上面的任何文件

所以我有一个testuser这样的条目/etc/passwd

testuser:x:1002:1003::/home/jail/./home/testuser:/usr/sbin/jk_chrootsh
Run Code Online (Sandbox Code Playgroud)

在文件中/home/jail/etc/passwd有一个条目,如:

testuser:1001:1003::/home/testuser:/bin/bash
Run Code Online (Sandbox Code Playgroud)

我已经阅读了bash(1),所以我认为问题在于 bash 认为它没有被作为登录 shell 调用:

当 bash 作为交互式登录 shell 或作为具有 --login 选项的非交互式 shell 调用时,它首先从文件 /etc/profile 读取并执行命令(如果该文件存在)。

我知道这bash实际上是被调用的,/usr/sbin/jk_chrootsh但我不明白如何bash确定它是什么类型的外壳,以及它应该运行哪组启动文件。

我想看看我是否可以解决这个问题 - 但我不明白:

bash 如何知道它是如何被调用的?

ps:我也看了,login(1)运气不好。

bash login ubuntu jails

7
推荐指数
2
解决办法
789
查看次数

ssh-ing 到 ec2 服务器时如何修复无限 bash 循环(bashrc + bash_profile)?

我错误地.bash_profilebashrc文件中有源,反之亦然。现在,当我尝试通过 ssh 进入机器 (ec2) 时,它会卡在加载 bash 并在一秒钟内关闭连接。有什么办法可以修复它吗?我可以将磁盘挂载到另一个 ec2 实例来修复 bash 文件吗?


更新 1:我尝试了以下操作:

%  ssh -i "my-pem.pem" -t ubuntu@<server_address>.amazonaws.com "/bin/bash --noprofile --norc"
Connection to <server_address>.amazonaws.com closed.
Run Code Online (Sandbox Code Playgroud)

其他什么都没有出现。你知道出了什么问题吗?

对于健全性检查,如果我这样做ssh -i "my-pem.pem"ubuntu@<server_address>.amazonaws.com,消息将是

...

28 packages can be updated.
0 of these updates are security updates.
To see these additional updates run: apt list --upgradable

New release '20.04.2 LTS' available.
Run 'do-release-upgrade' to upgrade to it.


Last login: Mon Feb 22 23:17:41 2021 from ip
Connection to …
Run Code Online (Sandbox Code Playgroud)

bash ssh amazon-ec2

7
推荐指数
3
解决办法
960
查看次数

在“echo command | ssh server”和“ssh server command”之间混淆

在我学习非交互式登录 shell 的过程中,我遇到了 2 种通过 SSH 远程执行命令的方法。对我来说,它们看起来都是一样的。但不幸的是,他们不是。

使用命令echo "shopt login_shell; echo \$-" | ssh -l poweruser 192.168.1.67,我得到以下输出。

Pseudo-terminal will not be allocated because stdin is not a terminal.
poweruser@192.168.1.67's password:
login_shell     on 
hBs
Run Code Online (Sandbox Code Playgroud)

但是使用命令ssh -l poweruser 192.168.1.67 "shopt login_shell; echo \$-",我得到了不同的输出。

poweruser@192.168.1.67's password:
login_shell     off
hBc
Run Code Online (Sandbox Code Playgroud)

你能告诉我为什么在第二种情况下 shell 不是登录 shell,即使它提示输入密码。

scripting login

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

Alpine Linux 登录时的启动脚本是什么?(我登录时需要我的别名)

对于 Docker 容器,我们使用 Alpine Linux,例如 Node:Alpine,以使我们的镜像尽可能小。但有时您想登录该容器。将您的别名放在该容器中会很方便。

当我们使用标准 Linux 时,我们将 .bashrc 映射到 /root/.bashrc 并让所有别名可用。

但我找不到 Alpine Linix 的 .bashrc 等效项。

我试过了:

  • .bashrc
  • .bash_配置文件
  • 。轮廓
  • .ash_profile
  • .ashrc

全部不工作。

附加信息

Alpine Linux 在 Docker 容器中启动。

Dockerfile

FROM node:alpine

ENV NODE_ENV production

WORKDIR /usr/src/app

COPY --from=builder /usr/src/app/build .
Run Code Online (Sandbox Code Playgroud)

登录容器

我从主机(我的 OSX macbook)使用以下命令

FROM node:alpine

ENV NODE_ENV production

WORKDIR /usr/src/app

COPY --from=builder /usr/src/app/build .
Run Code Online (Sandbox Code Playgroud)

docker-compose.yml

docker exec -it <containerName> /bin/sh
Run Code Online (Sandbox Code Playgroud)

启动容器:

  jobrunner:
    build:
      context: ./build
      dockerfile: Dockerfile
    image: jobrunner:1.0
    volumes:
      - ./deployment/jobs/root/.bashrc:/root/.bashrc
      - ./deployment/jobs/root/.bashrc:/root/.profile
      - …
Run Code Online (Sandbox Code Playgroud)

startup bash docker alpine-linux

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

为什么通过 ssh 处理文件会导致控制字符?

我有一个设备/var/iot/data,我试图在其中远程获取数据。

在机器本身上:

# cat /var/iot/data | xxd -ps -c 32
80de004a030270055678013ac591e5c6abac2185f4319c8088e3
Run Code Online (Sandbox Code Playgroud)

那是正确的数据。

如果我远程运行相同的东西,它看起来是正确的:

$ ssh -T -x dragino 'cat /var/iot/data | xxd -ps -c 32' 
80de004a030270055678013ac591e5c6abac2185f4319c8088e3
Run Code Online (Sandbox Code Playgroud)

但它实际上带有一堆转义序列:

$ ssh -T -x dragino 'cat /var/iot/data | xxd -ps -c 32' | xxd
00000000: 1b5d 3131 3b23 3138 3464 3666 0738 3064  .]11;#184d6f.80d
00000010: 6530 3034 6130 3330 3237 3030 3535 3637  e004a03027005567
00000020: 3830 3133 6163 3539 3165 3563 3661 6261  8013ac591e5c6aba
00000030: 6332 3138 3566 3433 3139 6338 …
Run Code Online (Sandbox Code Playgroud)

shell ssh terminal

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

通过 SSH 进入虚拟机和从脚本运行 SSH 命令之间的不同行为

我对 shell 脚本编写比较陌生,所以如果这看起来是一个简单的问题,我深表歉意。我有一个 Linux VM ( debian, version 11 (bullseye)),我可以通过 ssh 进入 ( ssh <ip>),安装了一些依赖项(homebrew、pyenv 等),并且能够成功使用它们。ssh <user>@<ip> pyenv versions但是,当我尝试在脚本中或使用 Mac 终端从 VM ( ) 外部运行命令时,会收到bash: line 1: pyenv: command not found相关错误。

我认为这可能与此处解释的内容有关,但我不完全确定如何规避该问题。

在下面的评论中添加@terdon 询问的其他详细信息:

$ which pyenv
/home/linuxbrew/.linuxbrew/bin/pyenv

$ grep /home/linuxbrew/.linuxbrew/bin/ ~/.bashrc ~/.bash_profile ~/.profile /etc/bash.bashrc /etc/profile
grep: /home/f0p021s/.bash_profile: No such file or directory
/home/f0p021s/.profile:eval "$(/home/linuxbrew/.linuxbrew/bin/brew shellenv)"
Run Code Online (Sandbox Code Playgroud)

我还意识到,如果我从虚拟机中查看路径,它看起来像这样:

$ echo $PATH
/home/linuxbrew/.linuxbrew/bin:/home/linuxbrew/.linuxbrew/sbin:/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games
Run Code Online (Sandbox Code Playgroud)

当我尝试从本地计算机运行类似的命令时,它看起来有所不同:

$ ssh <user>@<ip> 'echo $PATH'
/usr/local/bin:/usr/bin:/bin:/usr/games
Run Code Online (Sandbox Code Playgroud)

bash ssh debian

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

.shinit 与 .shrc

当通过旧的 Bourne shell ( sh)登录到 Linux/Unix 系统时,我们.profile有为我们定制环境的文件。一些来源还引用.shinit文件或.shrc文件。什么时候适合使用其中之一,它们之间有什么区别?

shell

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

GNOME 终端是一种非登录 shell 吗?

根据什么是登录和非登录 shell的答案在 Ask Ubuntu 上,GNOME 终端是一种非登录 shell。正如优秀著作《Fedora 和 Red Hat Enterprise Linux 实用指南,第 6 版》中所指出的:

交互式非登录 shell 执行 ~/.bashrc 文件中的命令。默认的 ~/.bashrc 文件调用 /etc/bashrc。

因此,/etc/profile不会在非登录 shell 中处理。但是,我发现我已将 java 主路径附加到PATH 变量,并且当我使用 GNOME 终端并发出命令时java,一切正常。此外,PATH变量的值与我在/etc/profile.

鉴于上述事实,存在冲突,我的理解有什么问题?

shell bash login environment-variables

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