标签: unix-shell

cp -p 将保留某些文件的时间,但不是所有文件?

我在一台机器上有一个源目录,里面有一堆文件,所有文件都具有相同的权限,我想复制到另一个目录,通过 SMB 挂载。

[tmark@dexter JR09141045 roche_454_transfer]$ ls -l /source_dir
total 71348
-rwxrwxrwx 1 adminrig lifelabs 19768377 Mar 25 23:29 1.TCA.454Reads.fna
-rwxrwxrwx 1 adminrig lifelabs 53093396 Mar 25 23:29 1.TCA.454Reads.qual
-rwxrwxrwx 1 adminrig lifelabs     1035 Mar 25 23:29 454AllControlMetrics.csv
-rwxrwxrwx 1 adminrig lifelabs     2657 Mar 25 23:29 454AllControlMetrics.txt
-rwxrwxrwx 1 adminrig lifelabs     4607 Mar 25 23:29 454BaseCallerMetrics.csv
-rwxrwxrwx 1 adminrig lifelabs    14518 Mar 25 23:29 454BaseCallerMetrics.txt
-rwxrwxrwx 1 adminrig lifelabs      351 Mar 25 23:23 454DataProcessingDir.xml
-rwxrwxrwx 1 adminrig lifelabs      702 Mar …
Run Code Online (Sandbox Code Playgroud)

linux unix cp linux-networking unix-shell

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

使用 shell 脚本检查 rsync 是否进行了任何更改

我有一个 bash 脚本,它包含 rsync 的两个目录。有时会发生变化,很可能什么都没有。

我只想在 rsync 实际进行更改(添加/更新文件)时运行命令。否则我只想跳过它。是否有我应该查看的返回响应?

unix bash rsync unix-shell

10
推荐指数
1
解决办法
5764
查看次数

文件扩展名何时覆盖 Linux 上的 shebang 行?

一些 PHP cron 作业最近开始在共享服务器上失败。他们已经运行了将近一年没有错误和更新,但现在由于语法错误而无法运行。发生了什么?

事实证明,这些脚本现在突然在 PHP 4 下运行,而不是 PHP 5。在 /usr/local/bin/php 安装了一个 PHP 4 版本,但这是这些脚本上的“shebang”行:

#!/usr/local/php5/bin/php
Run Code Online (Sandbox Code Playgroud)

我做了一些实验:

% /usr/local/php5/bin/php --version
PHP 5.2.6 (cli) (built: May 11 2008 13:09:39) 
Copyright (c) 1997-2008 The PHP Group
Zend Engine v2.2.0, Copyright (c) 1998-2008 Zend Technologies
    with Zend Extension Manager v1.2.2, Copyright (c) 2003-2007, by Zend Technologies
    with Zend Optimizer v3.3.3, Copyright (c) 1998-2007, by Zend Technologies

% echo '<?= phpversion() ?>' | /usr/local/php5/bin/php
5.2.6

% printf '#!/usr/local/php5/bin/php\n<?= phpversion() ?>' > version
% chmod …
Run Code Online (Sandbox Code Playgroud)

linux shell unix-shell

7
推荐指数
1
解决办法
939
查看次数

cd 命令如何工作?(Unix)

有人可以向我解释cd -命令是如何工作的吗?man cd 告诉我An argument of - is equivalent to $OLDPWD.然后我在网上发现 $OLDPWD 是 cd 命令设置的以前的工作目录。当我做 cd - 在我的 unix 上我得到-bash: cd: OLDPWD not set这让我感到困惑。

更新:它现在可以工作了,它给了我以前的工作目录。我想我之前没有使用和 cd 命令,所以这就是没有设置 $OLDPWD 的原因。

再问一个问题cd(键入 cd 并按 Enter)是做什么的?我不会这么说的。有没有更好的技术解释?

host [~]# cd
host [~]#
Run Code Online (Sandbox Code Playgroud)

command-line-interface unix-shell

6
推荐指数
2
解决办法
8626
查看次数

有没有办法防止后台任务的输出覆盖 shell 中的命令行?

我希望能够在 shell 后台运行任务,并且不让其输出到 stdout 或 stderr 覆盖底部的命令行。我经常需要运行其他命令来与后台进程交互,并且希望从同一个 shell 中执行此操作,而无需打开另一个终端或使用多路复用器来分割终端(如屏幕)。

理想情况下,会有一些我不知道的设置(我通常使用 bash 或 ksh),但新的或不同的 shell 或脚本对我来说就可以了。

我愿意接受任何建议并感谢任何帮助,谢谢。

编辑:谢谢您的所有回答,但我的问题有点不清楚。我仍然需要观察后台任务的输出,我只是希望它不涵盖我可能在命令行上输入的任何新命令。理想情况下,后台程序的输出将显示在 shell 的除底行之外的所有行中,让我可以自由地在该行中构造新命令。

这类似于水平分割的运行屏幕,其中底部窗口只有 1-2 行高,但对于我的目的来说,使用 screen 有以下缺点:

  • 我不需要/希望进程在我注销后继续存在
  • 需要一两个额外的命令来设置(即使分割和窗口大小调整是在 .screenrc 文件上完成的)
  • 我希望能够使用 shell 的作业控制命令,而无需在屏幕窗口之间切换(即 jobs、bg、fg、kill %1 至少在 bash 的情况下)

再次感谢您的帮助,这是我的第一个问题,答案的速度和数量让我震惊!

unix shell unix-shell

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

tcsh :源文件的路径

我正在 tcsh 下获取一个文件。该文件可以位于文件系统上的任何位置。如何检索源文件的路径?

$0 不起作用:我不执行该文件,而是获取它。

非常感谢 !

command-line-interface unix-shell

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

如何防止 bash $ 替换?

我试图在下面保留 $if 并
希望以下输出
$if

bash 通过执行
$ 替换 来妨碍

$ sed -e 's:\\$:\\$:g' <<ENDOFFILE  
> $if  
> ENDOFFILE  
Run Code Online (Sandbox Code Playgroud)

或者

$ tr '$' '\$' <<ENDOFFILE  
> $if  
> ENDOFFILE  
Run Code Online (Sandbox Code Playgroud)

有没有办法将 $keywords 保留
到 stdout 而不
在 stdin 中显式地将它们转义出来?

我应该在尝试之前切换到另一个 shell 吗?

linux bash sed unix-shell

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

杀死所有当前正在运行的 cron 作业

出于某种原因,我的 cron 作业脚本没有完全退出,它们正在备份我的服务器。目前有几百个进程在为我的一个用户运行。我可以使用以下命令杀死该用户的所有进程,但是如何简化它以仅杀死 cron?

pgrep -U username | while read id ; do kill -6 $id ; done
Run Code Online (Sandbox Code Playgroud)

按原样运行上述命令会很危险,对吗?这不会杀死 mysql 和其他重要的东西吗?

bash command-line-interface process cron unix-shell

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

Shell 脚本中的“线程”

我有一种情况需要:

  1. 在脚本 A 中做一些前导设置
  2. 一起启动脚本 B、C、D 和 E,以便它们同时运行
  3. 当所有四个脚本都退出时,在脚本 A 中进行一些清理

目前,我在脚本 B - D 中运行了标志,用于设置脚本是否仍在运行,并且在触发四个脚本后,脚本 A 处于等待循环中检查这些标志文件。

有一个更好的方法吗?

背景是这是一个使用快照的 AIX 服务器的备份脚本 - 脚本 A 在我们希望备份的文件系统上获取 JFS2 快照(它们都需要同时完成,因为我们有分布在不同文件系统上的相关数据- 这不能改变),脚本 B - D 从快照中对这些文件系统进行实际备份(三个 rsync 到不同的服务器,一个磁带备份),然后脚本 A 在所有文件复制后删除快照(包括到磁带)完成。

scripting unix-shell

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

如何在 shell 脚本中对 rdesktop 密码参数进行编码?

我可以使用此脚本从 linux 连接到 windows RDP 会话:

#!/bin/bash
/usr/bin/rdesktop -N -x m -u Administrator -p secret123 -d DOMAIN1 127.0.0.1:33891
Run Code Online (Sandbox Code Playgroud)

(远程 Windows 服务器的 rdp 端口​​被安全地隧道连接到本地主机上的端口 33891)

但是这个脚本没有正确传输密码:

#!/bin/bash
/usr/bin/rdesktop -N -x m -u Administrator -p #secret$123# -d DOMAIN2 127.0.0.1:33892
Run Code Online (Sandbox Code Playgroud)

我必须如何对密码中的特殊字符进行编码?

我还想知道如果我选择 /bin/sh 作为脚本的 shell 是否会有所不同。

编辑:

我发现这有效:

\#秘密\$123\#

rdp shell bash unix-shell rdesktop

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