标签: bash

SSH - 运行一个命令,然后给我一个 shell

这个问题让我想起了我自己的一个问题。我想为机器创建一个别名ssh,运行一个命令(在这种情况下,cd到一个提供的路径),然后给我一个 shell。我已经运行了一百个变体:

$ ssh user@machine 'cd /some/path/ && bash -i -l'
Run Code Online (Sandbox Code Playgroud)

这是我能做的最好的事情。它在正确的目录中给了我一个 bash 提示,但没有作业控制,也不能使用箭头键(和其他一些快捷方式)。是否有捷径可寻?

我不能在 bashrc 或配置文件的末尾轻松地做到这一点,因为我想去的路径会有所不同(我会将它作为参数传递给别名),有时,我什至会 ssh 到那台机器根本不想去任何奇怪的地方 - 主目录很好。

ssh shell bash

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

使用 utf8 编码执行 bash 脚本的问题

我有一个用 utf8 编码的 bash 脚本。

在脚本中,我使用 sed 命令§作为分隔符。

现在,当我运行执行此脚本时会sed抱怨分隔符。

如果我使用普通字符作为 ex 的分隔符,@那么一切正常。

我已经在 putty[set utf8 in putty] 中查看了脚本,并且字符看起来很好。

还有来自locale命令的Linux 默认字符集显示

 LC_CSET=en_US.UTF-8 
Run Code Online (Sandbox Code Playgroud)

可能出了什么问题?

早些时候,我曾经对 shell 脚本使用 windows-1252 编码,这曾经有效。

bash utf-8 sed shell-scripting

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

服务器 Bash 行在文本和错误的地方换行

这是一个很难解释的问题,当使用 bash shell 连接到我的一台服务器时,在任何用户下,换行符都被破坏并且有各种各样的问题。其中一次我在下面的屏幕截图中详细说明:在此处输入图片说明

第2部分

第三部分

第四部分

我遇到的其他问题包括 nano 对我所在的行和/或字母感到非常困惑,如在 nano 中键入相同的消息所示:

纳米坏了

这些问题仅在我之前提到的连接到运行 CentOs 的服务器时才会出现。你知道为什么会发生这种情况以及我能做些什么来解决它吗?在其他服务器上,消息工作正常!

其他服务器工作

谢谢你的时间,


请求命令的输出:

无法正常工作的服务器: 不工作服务器

工作服务器:

工作的服务器


它可能是非工作服务器上的自定义提示吗?在 .bashrc 中

PS1='\e[1;32m\u@\h\e[m:\e[1;34m\w\e[m$ '
Run Code Online (Sandbox Code Playgroud)

对此进行评论似乎可以解决问题。

谷歌表示,如果不遵守这些规则,可能会出现换行错误

use the \[ escape to begin a sequence of non-printing characters,
and the \] escape to signal the end of such a sequence
Run Code Online (Sandbox Code Playgroud)

我不确定这适合我的提示吗?

shell bash terminal centos mac-osx

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

用于监控磁盘空间、端口等的轻量级脚本?

如果我想监控一些我不是主要维护者的机器(即,我无权访问安装包),是否有像 Nagios 这样的轻量级替代品?我正在寻找一个脚本(bash、Perl、PHP 等),它可以对 Linux 服务器和服务(磁盘空间、Web 服务器、可能是 CPU 使用率等)进行基本监控,并在必要时发送警报。

我找到了一些 一次性 脚本,但我很惊讶没有更全面的内容。

scripting monitoring bash disk-space-utilization

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

通过 SSH 将服务器配置置于版本控制中

我在生产中有一堆 *nix 服务器。我想把它的重要配置文件放在版本控制中

我的基本想法是

  • 放置分布式版本控制系统,以便每个系统的配置都保存在自己的驱动器上。

  • 更改配置的方式是通过编辑器或通过外部源。

  • 假设在 shell 中使用了 $EDITOR,则可以在保存文件时添加一个额外的命令(因此该文件随后会被添加到 git 中)。这可能有问题,因为用户并不总是会执行 vim /etc/my.cnf ,它可能会从 vim 中打开 my.cnf

  • 另一个更改源可以通过 cron 脚本捕获,该脚本每隔一小时运行一次,并向版本控制添加内容(这已经足够了)。然后可以将 git repo 拉到一个中央位置进行保管。1 小时就足够了,因为假设第一种捕获更改的方法在大多数情况下都有效。

我想知道是否有一些工具可以做到这一点(或者做得更好)。理想情况下,在用户发起的每次配置更改时,他/她都被支持将更改添加到本地存储库中。

unix ssh bash

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

重新分区两个磁盘而不会丢失数据

我正在一家软件公司实习,但我遇到了一些困难。这是交易:

问题:我们这里有一些盒子被错误地分区为 2 x 500 GB 驱动器。实际驱动器是 2 x 1 TB 驱动器。这些基本上是只使用了一半可用磁盘空间的机器。我的任务是编写一个脚本来重新分区这些驱动器。

迄今为止的解决方案:我有一个脚本可以禁用所有进程并重新启动,然后是另一个修复分区的脚本。问题是数据丢失。

我在寻找什么:我需要一个解决方案来执行此操作但保存所有数据。我的第一个虽然是将分区增加到适当的大小,但我不确定这是否可行。另一种解决方案是将所有数据复制到 Disk2 上,对 Disk1 进行分区,然后将数据移回 Disk1,最后对 Disk2 进行分区。问题是我对 Linux 还很陌生,我真的不知道该怎么做。我可以访问 fdisk 实用程序和 parted 实用程序。

它们都是 ext3 类型。

编辑:11/3/11

好的。所以我在两个磁盘上都有大约 1GB 未使用的未分配空间。我想做如下:

  • SDB上新建一个1GB大小的扩展分区,命名为sdb99,参考这里
  • sda5 sda6 sda7复制到新的SDB分区sdb99
    • 我可以将“/”从每个文件夹复制到这个新分区中的某个文件夹吗?
    • 我需要在这个新分区上放置一个文件系统来复制那里的任何文件吗?
    • 如果我只是复制“/”,会保留整个目录结构吗?
    • 像这样在磁盘之间移动文件是一项简单的任务吗?
  • 删除sda5 sda6 sda7然后用两倍大小重新创建它们
    • 我真的需要删除这些吗?我不认为我可以增长 3 个连续的分区,即使我可以,文件系统也不会增长......对吗?
  • 将数据从sdb99复制回新的sda5 sda6 sda7分区
    • 这应该像将包含所有“/”的那些目录的内容移回一样简单,对吗?
  • sdb5 sdb6 sdb7复制到新的sda5 sda6 sda7到单独的文件夹中。
    • 应该有足够的空间,因为现在可用空间翻了一番……我希望
  • 删除并重新分区SDB
  • 将文件从 …

scripting linux partition bash hard-drive

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

防止“cd”记住遍历的符号链接

假设您有目录 ~/mytool 软链接到 /usr/local/mytool。然后cd mytool将当前目录保留为 ~/mytool,这可能会导致脚本行为不正确。有没有办法避免这种行为?

通过一些谷歌搜索,我发现您可以按如下方式实现:

cd $1 ; cd `pwd -P`
Run Code Online (Sandbox Code Playgroud)

没有切换到'cd'吗?环境变量?

shell bash directory symbolic-link

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

Grep 和 xargs:文件名太长

我正在尝试删除所有__. 这个

ls | grep -v "__" | xargs -0 rm
Run Code Online (Sandbox Code Playgroud)

产量: File name too long。有什么帮助吗?

编辑:

ls | grep -v "__" | awk '{print("rm \42"$0"\42")}' | /bin/bash
Run Code Online (Sandbox Code Playgroud)

解决了问题,但我想知道为什么第一个不正确。谢谢

linux bash

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

Bash 脚本不能作为 cron 工作

我有以下shell脚本

$cat capture.sh 
TIME=$(date +"%H-%M-%d-%m-%y") 
IP="203.208.198.29" 
PREFIX=$TIME$IP 
tshark  -f "udp" -i eth0 -w /root/captures/$PREFIX.cap& 
pid=$! 
sleep 2m 
kill $pid 
Run Code Online (Sandbox Code Playgroud)

当我从 shell 执行它时它运行良好。

但是当我将它添加到 cron 选项卡时,什么也没有发生。

我的 crontab 条目:1 */2 * 2 3,4,5 sh /root/capture.sh

tail /var/log/cron 
Run Code Online (Sandbox Code Playgroud)

显示命令已执行。

但什么也没有发生。我已经为 capture.sh 设置了“all”的可执行权限,并为 /root/captures 目录设置了“all”的写权限。

提前致谢

linux unix bash cron

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

通过 ssh 传递命令时单引号和双引号的区别

当我通过 ssh 向远程服务器发送命令时,它们之间的区别是什么:

ssh user@123.456.789.012 'foo'
Run Code Online (Sandbox Code Playgroud)

ssh user@123.456.789.012 "foo"
Run Code Online (Sandbox Code Playgroud)

我没有传递任何变量,并且在远程运行命令时得到不同的结果。

ssh bash

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