Articles of unix shell

Shell命令查找并将最后修改的文件存储在某个目录中

我想创build一个别名,显示某个目录中的最新日志 – 例如: ls -lat *log* | tail -1 | less ls -lat *log* | tail -1 | less 上述命令不起作用,因为ls -lat命令的输出不会产生单个最终名称,而会产生完整的列表。 任何简单的scheme

我想将使用Inotify抓取的事件或日志保存到文件中

我需要你的帮助 – 使用Inotify我正在看一个目录,如创build,删除,重命名和移动的变化。 我希望这些事件被logging在一个文件中,我想运行Inotify作为服务。

修复RVM的Solaris 11 GNU工具位置

我正在尝试在Solaris 11系统上安装RVM,即curl -sSL https://get.rvm.io | bash -s stable curl -sSL https://get.rvm.io | bash -s stable经过了,但是当我真正尝试使用rvm ,它只是简单的统计“错误:缺lessGNU工具:grep哪个awk cpdatefindsed tail tar xargs。确保在使用RVM之前它们被安装在'/'中! “ 并退出。 通过阅读https://github.com/wayneeseguin/rvm/blob/master/scripts/functions/support,我发现gnu_tools_path被硬编码到/usr/gnu/bin 。 我直接检查,发现了一些符号链接。 我尝试将/ec/bin/grep的符号链接到那里,只是发现在这个Solaris 11系统上, usr被挂载为只读。 在Google之后,我认为这是一个“稀疏区域”问题(因为我根本不知道Solaris的含义)。 但在这个Solaris 11上的grep工作得很好,它的版本号为grep (GNU grep) 2.16 ,位于/ec/bin/ 。 所以我的问题是:如何修复path,以便RVM可以使用/ec/bin下的grep?

如何重复一个命令,如反向引用,在cli?

我想要做的是运行相同的命令两次,而敲击input一次,用最less的打字。 这将是例如长版本: # sudo puppet agent -tv –server foo.bar && sudo puppet agent -tv –server foo.bar 我想过 # sudo puppet agent -tv –server foo.bar && !! ..但是这会运行前一个命令(如上一个完成的那样),而不是我刚input的命令。 那么如何“反引用”我的命令呢? 当然,这可以用for循环来完成,但是我猜测还有更多的方法可以做到这一点。 谢谢

在创build脚本来更新/ etc / hosts文件中的主机名时遇到多个问题?

我完全是新的脚本,因此需要帮助解决这个问题。 我们有大约3000台虚拟机和450台物理服务器,这些服务器都是基于Linux的服务器(从9.x开始很less有Ubuntu的服务器,其中很less有Susu从8.x开始,大部分是从4.x开始到7.4的RHEL)所有他们我需要添加与IP详细信息到他们各自的/ etc / hosts文件几个主机名项。 我有不同的用户在每个服务器上有完整的sudoers访问,我可以使用因此,我创build了一个主机名,用户名和密码格式的CSV文件。 其中包含需要login的详细信息。文件名是“hostname_logins.csv” 我需要上传一个文件(即hostname_list到这些服务器中的每一个,然后在每个服务器主机文件中更新这些相同的细节。 我将使用一个RHEL 6服务器运行此脚本。 (所有其他主机都可以从这台服务器parsing,可以到达,我已经确认了。) 因此需要帮助解决这个脚本。 脚本不知道有什么问题,因为我是一个新的脚本: #!/bin/bash while read hostname_login user_name user_password do scp -p ./hostname_list $user_name:$user_password@$hostname_login:/tmp ssh -eS $user_name:$user_password@$hostname_login [bash -c "echo rishee | sudo -S mv /tmp/hostname_list ./hostname_list && cp -p /etc/hosts /etc/hosts.bkp && cat ./hostname_list >> /etc/hosts && rm -f ./hostname_list"] done < hostname_logins.csv 我需要把它作为一个单独的脚本,可以在所有这些服务器上运行。 […]

如何使用stdin / stdout在chroot中运行一个程序可用于调用者?

有没有办法在chroot中运行程序,同时仍然可以访问stdin / stdout? 我的第一个尝试是一个shell脚本: /usr/local/bin/real-app: ——– #!/bin/bash chroot /var/lib/app-root /usr/bin/app $* 然后将其链接到事物期望看到的地方: ln -s /usr/local/bin/real-app /usr/local/bin/app 但是这里有两个问题。 首先,该程序需要root运行。 我可以处理这个。 但是第二,似乎不再是STDIN / STDOUT的连接,这是父进程期望控制这个应用程序的方式。 有没有办法做到这一点? 我是否需要修改应用程序,以便它自己执行chroot系统调用?

直接通过ftp传输文件到ftp

嗨,我想从A服务器通过FTP传输less量文件(这是非常大的大小)到B服务器。 我有服务器A的FTP和服务器B的FTP的凭据 – 服务器B是我自己的服务器运行UNIX。 所以任何人都可以build议我通过ftp从服务器A到服务器B的方式来传输文件

如何在bash中以更简洁的方式连接环境variablespath?

为了修改我的path(如LD_LIBRARY_PATH或PYTHONPATH),我首先检查是否存在variables。 如果是这样,我把我的旧价值连接到新的(用分号分隔),否则我把我的variables设置为新的值。 NEW_PATH='/path/to/new/path' if [ $LD_LIBRARY_PATH ] then export LD_LIBRARY_PATH=$NEW_PATH:$LD_LIBRARY_PATH else export LD_LIBRARY_PATH=$NEW_PATH fi 它可以工作,但是当你在脚本中有很多这样的代码来源时,它有点笨拙:是否有一个聪明的技巧来使这个块成为一个很好的单线程? 谢谢 !

bash脚本来检测文件何时添加到文件夹和命令exec

我正在尝试编写脚本来检测文件何时添加到特定的文件夹,并使用最后一个文件添加名称运行命令。 我特别想做的是为每个文件添加一个特定的文件夹中创build一个QR码。 所以我需要做的是:当一个文件被添加到文件夹时检测,抓住基本文件名并传递给qrencode -o filename.png mysite / filename.ext 理想情况下,它有一个开机启动的cronjob。 我正在读关于使用inotify的一些东西,但我不知道如何做到这一点。 非常感谢!

我可以相信每个Debian派生的发行版都会有一个包含'/ etc / debian_version'的'base-files'包吗?

我想要的是一个快速,可靠的命令,以确定我运行的Linux是基于Debian的。 下面的命令似乎工作。 它也返回Debian版本: dpkg -L base-files 2>/dev/null | grep '^/etc/debian_version$' >/dev/null 2>&1 && cat /etc/debian_version 我以前的想法是使用dpkg -S /etc/debian_version来查看它是否属于某个包,而不pipe名称。 但是dpkg -S很慢。 我只有一个疑惑:是否有Debian衍生的发行版,我的假设不成立? 有没有更好的办法?