我有一个包含文件名的文件。例如:
/tmp/list.txt
(每行开头都有空格):
/tmp/file.log
/app/nir/home.txt
/etc/config.cust
Run Code Online (Sandbox Code Playgroud)
我想用一行将列出的所有文件移动/tmp/list.txt
到/app/dest
所以它应该是这样的:
cat /tmp/list.txt | xargs mv /app/dest/
Run Code Online (Sandbox Code Playgroud) 我希望 ssh 命令只允许一次输入密码的机会,如果第一次密码错误,ssh 将返回
Permission denied (publickey......).
Run Code Online (Sandbox Code Playgroud)
是否有一个标志告诉 ssh 只请求一次密码?
代替:
[nir@dhcppc4 ~]$ ssh pokemon@192.168.1.103
pokemon@192.168.1.103's password:
Permission denied, please try again.
pokemon@192.168.1.103's password:
Permission denied, please try again.
pokemon@192.168.1.103's password:
Permission denied (publickey.....).
Run Code Online (Sandbox Code Playgroud)
我想要:
[nir@dhcppc4 ~]$ ssh pokemon@192.168.1.103
pokemon@192.168.1.103's password:
Permission denied (publickey.....).
Run Code Online (Sandbox Code Playgroud)
解决方案必须在客户端(例如 ssh 命令的某些标志或使用管道),我不能 touchsshd_config
或任何其他系统配置文件。因为 - 通常 - 我构建了访问 LAN 中服务器的 3rd 方软件(因此我无法生成密钥或配置系统文件),密码保存在数据库中(因此不需要第二次尝试)。在我的代码中,如果我能够假设我只有一次尝试ssh
/scp
它将简化相关代码。
我想检查两台服务器之间的连接(即 ssh 是否成功)。
主要思想是使用中间服务器列表检查 server-a 和 server-b 之间的最短路径(例如,如果我在开发服务器上并且我想连接到生产服务器 - 通常直接 ssh 会失败)。
因为这可能需要一段时间,所以我不喜欢使用 SSH - 我更喜欢先检查我是否可以连接,如果可以,然后尝试通过 SSH 连接。
一些可能的途径来获得这个想法:
server-a -> server-b
server-a -> middle-server-1 -> server-b
server-a -> middle-server-6 -> server-b
server-a -> middle-server-3 -> middle-server-2 -> server-b
Run Code Online (Sandbox Code Playgroud)
希望你明白我在找什么?
我想知道是否有办法在 Linux 和 unix 中监听进程——它何时结束以及进程(脚本)的退出代码是什么。
我不想编写一个脚本来运行X
几秒钟并检查ps -ef | grep PID
进程是否还活着。我想知道是否有办法让进程在结束时通知我,以及它的退出代码是什么。
文件是:
BASH.NIR
SH.ABI
Run Code Online (Sandbox Code Playgroud)
我希望 awk 脚本显示:
User is NIR, SHELL is BASH
User is ABI, SHELL is SH
Run Code Online (Sandbox Code Playgroud)
我不知道如何按字符拆分参数。这个想法是:
cat file.txt | awk '{print "User is " afterDot($1) ", SHELL is " beforeDot($1)}'
Run Code Online (Sandbox Code Playgroud) 我想使用以下命令删除所有早于 1 天的文件夹:
find /test -mmin +1440 | xargs rm -rf
但是find
列表的输出/test
(并相应地将其删除)。
如何只找到 的子目录/test
?( -maxdepth
/-mindepth
在 AIX 中不可用)
我想将文件从 server-a 复制到 server-d,但我只能从 server-b 访问 server-d,然后再到 server-c。server-a只能访问server-b,server-b只能访问server-c,server-c只能访问server-d..
目前我这样做:
server-a> scp /tmp/file.txt user@server-b
server-a> ssh user@server-b
server-b> scp /tmp/file.txt user@server-c
server-b> ssh user@server-c
server-c> scp /tmp/file.txt user@server-d
Run Code Online (Sandbox Code Playgroud)
这可能是通过 5,6,7,.. 服务器
我可以这样做吗?
我希望尽可能高效,以防有很多文件。我想要的是重命名我找到的所有文件并删除它们的后缀。
例如:
[/tmp] $ ls -l
a.log
b.log
c.tmp
[/tmp] $ find /tmp -name "*.log" -type f -exec mv {} {%.*} \;
[/tmp] $ ls -l
a
b
c.tmp
Run Code Online (Sandbox Code Playgroud)
这不起作用。如果它是一个普通的 bash 变量,它${var%.*}
会一直返回var
到最后一个.
.
我想打印:
cat file.log | awk '{print nir's $1}'
Run Code Online (Sandbox Code Playgroud)
输出应该是:
nir's aaa
nir's bbb
nir's abc
nir's dbc
Run Code Online (Sandbox Code Playgroud)
问题在于'
in nir's
。
我也试过:
cat file.log | awk '{print nir\'s $1}'
cat file.log | awk '{print nir''s $1}'
cat file.log | awk '{print nir'''s $1}'
Run Code Online (Sandbox Code Playgroud) 我想找到bbb
父目录调用的目录名称的路径aaa
例如
/aaa/bbb
/tmp/aaa/bbb
/usr/bin/aaa/bbb
/home/aaa/bbb
/home/aaa/xxx/bbb
Run Code Online (Sandbox Code Playgroud)
所以我写了这样的东西:
find /*/aaa -name bbb
Run Code Online (Sandbox Code Playgroud)
在某些平台上它可以工作,而在某些平台上它不工作,并且在任何情况下/aaa/bbb
都找不到,因为没有父目录aaa
我想我可以跑,find / -name bbb | grep \/aaa
但我想如果有更聪明的东西..?