我正在使用 CentOS。
我有一个管理服务器,它可以通过无密码 ssh 访问其他四台服务器。我无法物理访问这些服务器。换句话说,我必须通过 ssh 进行所有配置。
我想在管理服务器上创建一个 bash 脚本来更改其他服务器的 IP 地址,但是如果我提供了错误的 IP(例如网络中使用的 IP),管理服务器将无法访问其他服务器。
我能做些什么来防止或减轻这个问题?
以下是我在谷歌搜索后发现的:
dpkg --list 'linux-image-*' \
| perl -ane 'BEGIN { $r = `uname -r` or die; chomp $r } print $F[1], "\n" if $F[0] eq "ii" && $F[1] !~ /\Q$r\E\b/' \
| xargs -r aptitude purge -y
Run Code Online (Sandbox Code Playgroud)
有人可以将上述 3 行合二为一吗?我发现将一行复制并粘贴到 sudo 命令中比三行更容易,一次一行。
对于 Hauke Laging:当我尝试按照 sudo 命令一次复制三个分割线时,我编辑了这篇原始帖子以包含错误消息:
username@hostname:~$ sudo -i
[sudo] password for username:
root@hostname:~# dpkg --list 'linux-image-*' \
>
Desired=Unknown/Install/Remove/Purge/Hold
| Status=Not/Inst/Conf-files/Unpacked/halF-conf/Half-inst/trig-aWait/Trig-pend
|/ Err?=(none)/Reinst-required (Status,Err: uppercase=bad)
||/ Name Version Architecture Description
+++-==============-============-============-=================================
un linux-image-2. <none> (no description available) …Run Code Online (Sandbox Code Playgroud) 我正在搜索创建一个脚本来自动将一些自定义配置应用于基于文本的配置文件。
在本例中,/etc/sysctl.conf如果这些行尚未在文件中,我正在搜索添加 2 行(以避免在文件中多次出现这些行)。
这是我使用的脚本:
if [ `grep vm.swappiness /etc/sysctl.conf` != "vm.swappiness=5" ]; then
echo vm.vfs_cache_pressure=50 | sudo tee -a /etc/sysctl.conf
fi
if [ `grep vm.vfs_cache_pressure /etc/sysctl.conf` != "vm.vfs_cache_pressure=50" ]; then
echo vm.vfs_cache_pressure=50 | sudo tee -a /etc/sysctl.conf
fi
Run Code Online (Sandbox Code Playgroud)
和我得到的错误:
/home/erwan/Workspace/Install.sh: ligne 19 : [: != : opérateur unaire attendu
/home/erwan/Workspace/Install.sh: ligne 23 : [: != : opérateur unaire attendu
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?
我有一个像这样的脚本:
while :
do
Start_Time=$(date +"%s")
MAIN PROGRAM GOES HERE (CROPPED TO SHORTEN THINGS)
Run_Time=$(( $(date +"%s") - $Start_Time ))
if [[ $Run_Time < $Wait_Time ]]
then
Delay_Time=$(( $Wait_Time - $Run_Time ))
sleep $Delay_Time
else
echo "Delay exceeded"
echo $Run_Time
echo $Wait_Time
fi
done
Run Code Online (Sandbox Code Playgroud)
我的问题是,有时即使运行时间小于等待时间,它也会失败 < 测试
这是上次运行的输出:
Delay exceeded
Run_Time 4
Wait_Time 30
Run Code Online (Sandbox Code Playgroud) filename=${1:-/etc/hosts}和 和有filename=/etc/hosts什么区别?
例如:
filename=/etc/hosts
if [ -r "$filename" ] && [ -s "$filename" ]; then
md5sum $filename
else
echo "$filename cannot be processed"
fi
Run Code Online (Sandbox Code Playgroud)
和
filename=${1:-/etc/hosts}
if [ -r "$filename" ] && [ -s "$filename" ]; then
md5sum $filename
else
echo "$filename cannot be processed"
fi
Run Code Online (Sandbox Code Playgroud) 我已经看到有关如何遍历多个文件扩展名的各种主题,但在大多数情况下,列表已定义。
例子:
for file in ${arg}/**/*.{txt,h,py}
do
....
done
Run Code Online (Sandbox Code Playgroud)
可以看出,.TXT文件将被忽略。可悲的是,回答它的人说它只适用于 bash4。但我的设置使用 bash3.x。
关于如何做到这一点的任何想法?
我之前有一个问题(已删除),但我仍然不明白为什么很难理解我要问的问题,但我会再试一次,而且会更清楚。
因此,我将多个文件夹从服务器 A 复制到服务器 B,但必须从命令行执行每个复制过程 ('rsync') 的命令,每个文件夹执行一次。
因此,要将文件夹 A 复制到服务器 X,我执行 rsync 命令,完成复制后,我执行新的 rsync 命令将文件夹 B 复制到服务器 X。
我做了一些研究,这可能会帮助您满足我的需求。但是我正在寻找一种方法来一次编写多个命令,如果前一个命令完成了他的操作(从而完成了复制),它会一个接一个地触发。
通常,多个命令在一行中用;分号或与号分隔&&。两者之间的区别在于,如果第一个/上一个命令失败并带有分号,它仍然会继续。如果命令产生错误并且您使用了&符号,则它将停止。
因此,我在我的过程中使用了分号,让我的电脑在一夜之间运行......但它只执行了第一个命令,即使我在一行上写了几个用分号分隔的命令。所以它应该一个一个地执行所有这些......所以首先:我如何正确执行多个命令和B,我的命令有什么问题?
sudo rsync -v -v -r -h -t —progress /Volumes/My\ Book/Backups.backupdb/MbpScs-van-iSCS/2014-01-02-233653/SSDaeffer /Volumes/BackupMyBook/ViaMacbookMove/DitIsDeMap ;
sudo rsync -v -v -r -h -t —progress /Volumes/My\ Book/Backups.backupdb/MbpScs-van-iSCS/2014-01-09-152837/SSDaeffer /Volumes/BackupMyBook/ViaMacbookMove/DitIsDeMap ;
sudo rsync -v -v -r -h -t —progress /Volumes/My\ Book/Backups.backupdb/MbpScs-van-iSCS/2014-01-20-201229/SSDaeffer /Volumes/BackupMyBook/ViaMacbookMove/DitIsDeMap ;
sudo rsync -v -v -r -h -t —progress /Volumes/My\ Book/Backups.backupdb/MbpScs-van-iSCS/2014-02-21-130931/SSDaeffer /Volumes/BackupMyBook/ViaMacbookMove/DitIsDeMap ;
sudo rsync -v -v -r -h -t …Run Code Online (Sandbox Code Playgroud) 假设,我有这种名称格式的日志文件。
NameLog.log.2014-09-27
NameLog.log.2014-09-28
NameLog.log.2014-09-29
NameLog.log.2014-09-30
NameLog.log.2014-10-01
NameLog.log.2014-10-02
NameLog.log.2014-10-03
NameLog.log.2014-10-04
Run Code Online (Sandbox Code Playgroud)
我只想删除日志文件
NameLog.log.2014-09-27
NameLog.log.2014-09-28
NameLog.log.2014-09-29
NameLog.log.2014-09-30
Run Code Online (Sandbox Code Playgroud)
实际上我希望文件日志只保留 30 个文件。如何用bash脚本解决这个问题?
如果单词不在逐字环境中,我现在想在我的工作目录中将单词->替换为 $\to$。
伪代码
用$\to$替换所有-> 的所有条目,但不在\begin{verbatim}...\end{verbatim} 内。
我的 perl 伪代码基于这个优秀的答案
#!/usr/bin/env perl
## The target directories
my @directories=("Cardiology", "Pathophysiology", "Patology and Biopsy", "Physiology", "Propedeutics", "Radiology", "Rheumatology", "Surgery");
## Iterate over the directories
foreach my $dir (@directories) {
my $dd=0;
## Read the current directory
opendir (my $DIR, "$path/$dir");
## Find all files in this directory
while (my $file = readdir($DIR)) {
## Skip any files that aren't .tex …Run Code Online (Sandbox Code Playgroud) scripting ×10
bash ×5
shell-script ×4
command-line ×1
date ×1
grep ×1
info ×1
latex ×1
man ×1
networking ×1
perl ×1
rsync ×1
shell ×1
ssh ×1
timestamps ×1
variable ×1