小编der*_*ugo的帖子

不小心改名/bin 求助!

我有一个紧急情况,Linux 和 Bash 初学者在这里尝试编写脚本来重命名一些文件时搞砸了。循环不小心走上了路径(在桌面的文件夹中运行脚本)并重命名/bin/D_binD_是我添加的前缀)所以现在系统无法使用/bin内容,所以不bash,不mv重命名,不sudo......文件in/D_bin没问题,没有重命名,可以复制粘贴它们,但不能在/bin没有 bash 的情况下再次创建文件夹。系统看起来很稳定,但很少有东西可以工作并且无法访问桌面中的文件。

其他的/like文件夹/lib /sbin /etc好像也没问题,图形桌面还在。我害怕重启,因为我不知道它是否能够启动。

root 中是否有 shell 或重命名/D_bin回的方法/bin?需要帮助,非常重要的工作受到影响

我的自杀脚本 :$ :

#!/bin/bash
files=~/Desktop/folder_1/*

for j in $files
do
    cd $j
    for i in 10n*  #file names starting by 10n
    do
       find * -maxdepth 0 ! -path . -exec mv {} D_{} \;
    done
    cd ..
done
Run Code Online (Sandbox Code Playgroud)

:( 谢谢!!!!

command-line scripts

38
推荐指数
2
解决办法
7780
查看次数

在 Guake 终端中打开标签的脚本

我在 gnome 终端上使用这个脚本:

#!/bin/sh
gnome-terminal --tab --title="1" --command="ssh 1" \
--tab --title="2" --command="ssh 2" \
--tab --title="3" --command="ssh 3" \
--tab --title="4" --command="ssh 4"
exit 0
Run Code Online (Sandbox Code Playgroud)

我如何通过脚本但在 Guake 终端上做同样的事情?

command-line scripts guake

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

是否有类似于 heredoc (EOF) 中的 echo -n 的东西?

我正在编写一个巨大的脚本工厂脚本,为我的服务器生成大量维护脚本。

直到现在我写了一些需要写在一行中的行,echo -ne例如

echo -n "if (( " | sudo tee -a /usr/local/bin/upgradeAllServers &> /dev/null

# Generate exitCode check for each Server
IFS=" "
COUNT=0
while read -r name ipAddr
do
    if(($COUNT != 0))
    then
        echo -n " || " | sudo tee -a /usr/local/bin/upgradeAllServers &> /dev/null
    fi

    echo -n "(\$"$name"_E != 0 && \$"$name"_E != 1)" | sudo tee -a /usr/local/bin/upgradeAllServers &> /dev/null

    COUNT=$((COUNT+1))

    JOBSDONE=$((JOBSDONE+1))
    updateProgress $JOBCOUNT $JOBSDONE
done <<< "$(sudo cat /root/.virtualMachines)"

echo " ))" | …
Run Code Online (Sandbox Code Playgroud)

bash scripts

16
推荐指数
4
解决办法
8476
查看次数

Bash 等待 ping 成功

我正在编写重新启动各种服务器的脚本。重新启动后,我想“等待”直到所有服务器重新联机。(为了简单起见,我在网上为我定义了=可ping通)

所以对于我做的每台服务器

ServerXY_W=1
echo -n "waiting for ServerXY ..."
while (($ServerXY_W == 1))
do
   if ping -c 1 -w 0.2 192.168.123.123 &> /dev/null
   then
      echo "ServerXY is back online!"
      ServerXY_W=0
   else
      echo -n "."
   fi
done
Run Code Online (Sandbox Code Playgroud)

我期望(和喜欢)将是一个输出,例如

waiting for ServerXY .................
ServerXY is back online!
Run Code Online (Sandbox Code Playgroud)

点.... 会一一出现的地方。

但实际发生的是首先只有

waiting for ServerXY ...
Run Code Online (Sandbox Code Playgroud)

有一段时间,当服务器回来时,我得到最后一个点和最后一行

waiting for ServerXY ....
ServerXY is back online!
Run Code Online (Sandbox Code Playgroud)

为什么while循环只执行两次,一次ping失败,一次ping成功?我必须更改什么才能在 while 循环中添加更多点?

我也用不存在的 IP 进行了测试。但它卡住了

waiting for NonExistentServer...
Run Code Online (Sandbox Code Playgroud)

当然永远不会终止。但同样的问题为什么不........添加?

bash scripts ping

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

在 Ubuntu 16.04 上长时间运行 udev 脚本

在 Ubuntu 14.04 上,我有一个长时间运行的 bash 脚本,其中有一个简单的 udev 规则,它的工作原理如下:

ACTION=="change", SUBSYSTEM=="block", RUN+="/opt/script.sh"
Run Code Online (Sandbox Code Playgroud)

在 Ubuntu 16.04 上,事情进展得并不顺利。脚本开始运行,但在它完成之前就被杀死了。然后我尝试更改我的 udev 规则以调用一个可以分离脚本的 warapper 脚本。我试过:

ACTION=="change", SUBSYSTEM=="block", RUN+="/opt/script.sh"
Run Code Online (Sandbox Code Playgroud)

然后我尝试:

#!/bin/sh
nohup /opt/script.sh  &
Run Code Online (Sandbox Code Playgroud)

无济于事。

然后我尝试创建一个 systemd 服务...

ACTION=="change", SUBSYSTEM=="block", ENV{SYSTEMD_WANTS}=="justrunthescript.service"
Run Code Online (Sandbox Code Playgroud)

/etc/systemd/system/justrunthescript.service

[Unit]
Description=Just run the script

[Service]
ExecStart=/opt/script.sh
Run Code Online (Sandbox Code Playgroud)

我必须在某个时候运行脚本,但我的脚本依赖于 udev 参数,如 $ID_FS_TYPE 不会以这种方式传递。

我想我想要的很简单,只需插入一张光盘并从 udev 规则运行我的脚本,不要杀死脚本。解决这个问题的最佳方法是什么?

command-line scripts udev systemd 16.04

8
推荐指数
1
解决办法
2171
查看次数

重命名要大写的文件但不影响文件扩展名

我在客户的目录上使用它来重命名文件,每个单词的第一个字母根据他们的要求大写:

rename 's/\b(\w)/\u$1/g' *

这工作正常,但它也将扩展名的第一个字母大写,所以我用它来解决这个问题:

rename 's/\.Txt$/.txt/' *.Txt
Run Code Online (Sandbox Code Playgroud)

如果文件夹中的大多数文件具有相同的扩展名(通常是正确的),则可以正常工作,但如果它们非常混合,则很痛苦。

为了解决这个问题,我创建了一个看起来像这样的小脚本(不要笑!):

rename 's/\.Txt$/.txt/' *.Txt
Run Code Online (Sandbox Code Playgroud)

我忽略了“无法重命名 *.Txt *.txt:没有这样的文件或目录”错误,如果我发现缺少扩展名,我只需将该行添加到我的脚本中。

我认为这无关紧要,但文件位于 Windows 服务器文件共享上,但我使用 Ubuntu 16.04LTS 访问它。如果确实重要,那么我可以先将它们复制到我的本地驱动器,在 Ubuntu 中运行命令,然后根据需要将文件移回。

有没有办法修改第一个重命名命令以忽略扩展名并将它们保留为小写?我可以在更高级别的目录中运行新命令,并让它在所有子目录中递归吗?

command-line rename batch-rename

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

启动脚本的木板图标

我想在启动时运行脚本 temp-throttle ( https://github.com/Sepero/temp-throttle )并显示自定义 Plank icon

如果像这样运行,脚本会将 CPU 频率限制在 79 摄氏度

sudo ./temp_throttle.sh 79
Run Code Online (Sandbox Code Playgroud)

因为它需要在cd脚本路径之后如上指定温度,所以需要第二个脚本。

sudo ./temp_throttle.sh 79
Run Code Online (Sandbox Code Playgroud)

我已经叫那个temp-throttle,把它放在$HOME/bin,指示在这里

为了获得有关情况的一些信息,我已将该命令集成到终端命令中,并添加-p hold了设置终端配置文件以保持终端窗口打开的功能。

如果我将该脚本添加到启动应用程序列表中,Plank 中使用的图标就是终端的图标。

在此处输入图片说明

我希望它在启动时运行并在 Plank 中显示我的自定义“temp.png”图标

在此处输入图片说明

为此,我~/.local/share/applications/temp-throttle.desktop使用以下几行创建了文件:

[Desktop Entry]
Type=Application
Name=temp-throttle
Icon=temp
Categories=System;Monitor;
Exec=temp-throtle
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

直接执行(双击)它会在 Plank 中显示终端图标。

我可以让码头使用自定义的“临时”图标,通过执行.desktop从应用程序文件搜索和启动工具(如弹弓)或命令gtk-launch temp-throttle(如建议在这里)。

之后,自定义 Plank 图标当然可以固定到 Dock(右键单击,“Keep in Dock”)。这将创建/home/cipeos/.config/plank/dock1/launchers/temp-throttle.dockitem带有行的文件

[PlankDockItemPreferences]
Launcher=file:///home/cipeos/.local/share/applications/temp-throttle.desktop
Run Code Online (Sandbox Code Playgroud)

正如pauljohn32的回答中所建议的那样。他似乎还在评论中暗示,这里重要的是对所有涉及的文件使用完全相同的名称:我的所有文件都被称为temp-throttle …

icons command-line scripts plank

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

如何配置 iptables 以与 tcpcrypt 一起使用?

背景

操作系统:在 VirtualBox 上运行的 Ubuntu 16.04 x64

我是一名 Ubuntu/Linux 知识最少的开发人员,并已被分配到一个项目,该项目的目标是在与某些端点通信时利用tcpcrypt

tcpcrypt 带有一个 shell 脚本,它在 iptables 中设置所需的条目,以将数据包路由到 tcpcrypt 以进行加密/解密。执行此脚本后 iptables 看起来像:

筛选

Chain INPUT (policy ACCEPT 4 packets, 552 bytes)
 pkts bytes target     prot opt in     out     source               destination         
    0     0 ACCEPT     tcp  --  lo     any     anywhere             anywhere             tcp dpt:65530 tos match0x22/0xff
    0     0 NFQUEUE    tcp  --  any    any    !localhost            anywhere             tcp dpt:65530 flags:FIN,SYN,RST,PSH,ACK,URG/SYN NFQUEUE num 666
    0     0 NFQUEUE    tcp  --  any    any     anywhere             anywhere             multiport sports  !ssh,261,https,nntps,614,ldaps,684,695,ftps-data,ftps,telnets:pop3s …
Run Code Online (Sandbox Code Playgroud)

iptables networking tcp-ip

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

Zenity 问题 - 如何使用用户输入?

我想提出一个更进一步的问题,具体取决于您选择的答案。

我的脚本中的问题是:

zenity --question --text="Would you like to participate in a little form?" 
Run Code Online (Sandbox Code Playgroud)

_

完整脚本

zenity --question --text="Would you like to participate in a little form?" 
Run Code Online (Sandbox Code Playgroud)

我怎样才能做到这一点?

zenity

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

如何在 rc.local 中运行脚本

我是这个平台的新手。我有关于rc.local 的问题。我创建了一个脚本来自动运行roscoreroslaunch rosbridge_server rosbridge_websocket.launch。此脚本名称为auto,脚本内容为:

#!/bin/sh
cd $home
xterm -hold -e "roscore" &
xterm -hold -e "roslaunch rosbridge_server rosbridge_websocket.launch"
exit 0
Run Code Online (Sandbox Code Playgroud)

我必须在 rc.local 中运行这个脚本。创建的 rc.local 文件是:

#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just …
Run Code Online (Sandbox Code Playgroud)

startup scripts

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