Articles of bash

为什么这个bash脚本不工作?

我做了一个bash脚本,它检查磁盘上的可用空间: if [ check_space -gt "85" ]; then echo "removing" else echo "not removing" fi check_space返回一个数字,如52 , check_space函数是: check_space() { df /dev/sda1 | tail -1 | awk '{print $5}' | sed 's/%//'; } 它返回./backup.sh: line 63: [: check_space: a full expression was expected (我从西class牙语翻译,所以也许不是精确的翻译)。 什么可能是错的?

如何在不创build文件的情况下执行shell脚本

如何在不创build文件的情况下执行shell脚本? 例如,假设我有以下脚本( testscript ): #!/bin/bash function run_free() { free -m } run_free 那么我当然可以执行这个: sh testscript 我想创build一个文件,但卵形。 我试过了: sh echo '#!/bin/bash function run_free() { free -m } run_free' 哪个没用 有任何想法吗?

如何从另一个用户(使用PATH)运行脚本

我想这些命令作为root用户的ss用户运行 mkdir bin cp -r /opt/gitolite . gitolite/install -ln gitolite setup -pk ss.pub mkdir -p .gitolite/hooks/common ln -s /opt/pre-receive .gitolite/hooks/common/ 所以一切都在/home/ss执行。 第四行需要$HOME/bin ,你可以从第三行看到。 唯一的办法就是让每一行都加上su -c "command" ss ,这不是一件好事。 这是我以前的问题的一个扩展,我不够精确。 题 如何以实际的方式将所有这些命令作为脚本运行?

编写一个bash脚本来清空apache日志

我有两个包含一堆站点的目录(〜/ www /和〜/ client-sites /),每个站点都有access.log和error.log文件。 find所有这些文件并清空其内容最简单的方法是什么? 他们快速成长,所以我想每月清理一次原木。

重新创build新的链接,并删除一个命令的旧链接

根据手册页面: man ln -f, –force remove existing destination files 所以据我了解,如果我想重新创build一个目标目录/文件的新链接 我可以干脆 ln -s -f some_directory new_link 但是这不是我从linux / solaris机器上得到的 例如 [u@hw]# mkdir dir1 [u@hw]# ln -s dir1 link [u@hw]# ls -l drwxr-xr-x 2 root root 4096 Mar 16 20:26 dir1 lrwxrwxrwx 1 root root 4 Mar 16 20:27 link -> dir1 [u@hw]# ln -s -f […]

在bash_profile中隐藏密钥对的最佳实践?

我有一个dotfiles保存在一个公共github回购,其中包括我的aws键的path,这似乎是一个可怕的事情等待发生。 所以就是这样的: function superssh { ssh user@something -i /file/path/to/keys;} 有什么更好的方法来提高我的安全性?

在ssh中使用类似bash的命令replace或者如何从ssh * client *请求数据

在bash(和其他shell)中,可以使用类似$()和“(反引号)的命令将命令的结果插入到命令行中。 现在,如果你有类似的东西,但对于SSH会话,这将是很好的。 因此,您正在进行ssh会话,并需要从您的计算机获取一些信息,并希望将其放入所连接的计算机的内部命令行。 比如说你想直接访问一个mysql控制台。 你可以使用这样的命令: ssh [email protected] "mysql -u blub -pmypass" 这工作,但问题是,你可以在SSH shell进程的命令行中看到密码。 为了解决这个安全问题,我想有这样的事情: ssh [email protected] "mysql -u blub -p\$(ssh-on-client 'cat pass-file')" 这将执行在SSH客户端上,而不是在服务器上的cat passfile 。 有什么知道吗? 你有什么其他的技巧怎么做? 更新:我感谢我的例子的答案,但我不会接受他们,除非他们回答真正的问题。 也就是说,可以从ssh会话中与ssh客户端计算机通信。 (我知道这可能构成一个可能的安全问题) 可能的解决scheme: 有一个SSH客户端连接回服务器。 (sweimann)问题是如何获取连接回服务器的证书。 使用ssh创build隧道并使用一些netcat脚本/ telnet在服务器上执行命令并将结果发送回去。 使用expect来编写shell脚本。 (Zac Thompson) 在客户端的ssh上使用一个自定义的包装,看着控制台并采取相应的行动。 (札幌) 修补SSH来支持这个。 邮件列表上有相似的补丁。 有一个选项“SendEnv” ssh在远程计算机上设置环境variables。 不过,这个必须在远程sshd上启用。

在bash中比较两个用户列表

我有两个不同的用户列表。 我需要比较用户,并确保它们存在于两个文件中。 一个是passwd文件,另一个是平面文件,具有用户名和其他信息,我可以从中提取sorting的用户名单。 这给了我一个用户名的sorting列表: cat /etc/passwd | cut –fields=1 | sort -k1.2 有没有更好的方法来做这个第一,然后第二我如何再比较其他用户列表从另一个文件? 如果用户不存在,我将把它添加到平面文件。

对cron作业使用bash脚本有什么好处?

根据我的理解,你可以通过编辑来编写你的cron crontab -e 我发现了几个来源,而不是在cron作业中引用bash脚本,而不是为行写作业线。 唯一的好处是你可以使用bash脚本将许多任务合并到一个cron作业中? 另外一个新手问题:编辑crontab -e是指一个文件是否正确? 我注意到,如果我打开crontab -e并closures而不进行编辑,当我再次打开文件时,有一个不同的数字扩展名,例如: "/tmp/crontab.XXXXk1DEaM" 0L, 0C 我虽然crontab存储在/ var / spool / cron或/ etc / crontab? 为什么它将cron存储在tmp文件夹中?

telnet:连接到地址:: 1:连接被拒绝

当我运行'(sleep 1; echo flush_all; sleep 1; echo quit; ) | telnet localhost 11211' '(sleep 1; echo flush_all; sleep 1; echo quit; ) | telnet localhost 11211'我得到了 Trying ::1… telnet: connect to address ::1: Connection refused Trying 127.0.0.1… Connected to localhost. Escape character is '^]'. OK Connection closed by foreign host. 上面的命令做我想要的,但::1部分呢?