当我运行 bash 命令时du -hs .,输出是
1.2G .
当我运行 bash 命令时du -hs *,输出是
108K action
4.0K activate.php
8.0K browse.php
584K captcha
164K class
4.0K clearcache
388K cms
4.0K comment.complete.php
4.0K contact.php
530M docs
116K documentation
24K DONE.txt
21M em
4.0K footer.php
4.0K forgot.php
4.0K header.php
196K images
264K includes
8.0K index.php
168K js
4.0K login.php
4.0K logout.php
4.0K mail.confirmation.php
4.0K mail.php
4.0K news.item.php
4.0K news.php
4.0K profile.edit.php
4.0K profile.php
4.0K reset.confirmation.php
4.0K robots.txt
4.0K signup.confirmation.php
4.0K signup.php …Run Code Online (Sandbox Code Playgroud) 我正在尝试通过 cron 发送电子邮件以了解哪些进程占用了我的服务器。它工作正常,但生成的电子邮件太窄,我需要了解更多有关该过程的信息。
这是我正在使用的脚本(从这里偷来的:http : //www.inmotionhosting.com/support/website/server-usage/create-server-load-monitoring-bash-script):
#!/bin/bash
trigger=10.00
load=`cat /proc/loadavg | awk '{print $1}'`
response=`echo | awk -v T=$trigger -v L=$load 'BEGIN{if ( L > T){ print "greater"}}'`
if [[ $response = "greater" ]]
then
top -cSbn 1 | head -14 | tail -8 | mail -s"High load on server - [ $load ]" myemail@domain.com
fi
Run Code Online (Sandbox Code Playgroud)
生成的电子邮件类似于:
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
810809 root 20 0 20700 13m 3032 R 50 …Run Code Online (Sandbox Code Playgroud) 我使用以下命令获取 LDAP 的所有用户的列表ldapsearch -x -LLL uid=* > result。
以下命令的结果如下格式
dn: uid=shahrukh,ou=People,dc=example,dc=com
uid: shahrukh
cn: shahrukh
sn: shahrukh
loginShell: /bin/bash
uidNumber: 1086
gidNumber: 1086
homeDirectory: /home/ldap/shahrukh
Run Code Online (Sandbox Code Playgroud)
有这些记录的完整列表。
我想在一个文件中列出所有 uid,以便只列出 uid 的值。
shahrukh
abc
xyz
....
....
....
Run Code Online (Sandbox Code Playgroud) 我正在尝试创建一个 bash 脚本来更改 MySQL 根密码,以下是我正在使用的当前代码片段:
#!/bin/sh
clear
echo "Enter the current password for the root mysql account."
read oldrootpass
echo "Enter a new password for the root mysql account."
read newrootpass
mysql -u root -p$oldrootpass -Bse 'UPDATE user SET password=PASSWORD("$newrootpass") WHERE User="root"'
Run Code Online (Sandbox Code Playgroud)
上面更改 root 密码的语法可能不正确,但我坚持的部分是生成一个单行命令来使用 mysql,如果该命令超过 2 行,则输入 MySQL 提示符,并在一旦使用'exit'命令关闭MySQL提示符,就会执行bash脚本。
我的目的是通过 bash 脚本收集相关密码信息,运行单个命令更改 root 密码,然后返回到 bash 脚本,或者 bash 提示脚本已结束。
我正在运行此命令以从服务器获取失败登录尝试的记录auth.log,并且运行良好:
sudo cat /var/log/auth.{log,log.1} | grep 'Failed password' | grep sshd | awk '{print $1,$2}' | sort -k 1,1M -k 2n | uniq -c
Run Code Online (Sandbox Code Playgroud)
但问题是——就像世界上的每一台服务器一样——我有一些由日志轮换创建的 GZipped 档案,这些档案不会被这个命令解析:
-rw-r----- 1 syslog adm 7822722 Oct 31 13:44 /var/log/auth.log
-rw-r----- 1 syslog adm 12532511 Oct 25 06:59 /var/log/auth.log.1
-rw-r----- 1 syslog adm 2250939 Oct 18 06:55 /var/log/auth.log.2.gz
-rw-r----- 1 syslog adm 2139669 Oct 11 07:06 /var/log/auth.log.3.gz
-rw-r----- 1 syslog adm 2769919 Oct 4 06:54 /var/log/auth.log.4.gz
Run Code Online (Sandbox Code Playgroud)
为了解决这些问题,我有一个使用zcat代替的命令变体,cat但是必须运行两个命令来获取这些数据有点麻烦。有什么方法可以将cat …
这是脚本
bash --version | head -n1
if [ "$1" == "now" ]
then
echo if now
execut job
else
echo else "_"$1"_" # make sure we are not picking any spaces
if [ condition ]
then
execut something else
fi
fi
./script now
if now
Run Code Online (Sandbox Code Playgroud)
如果从交互式 shell 运行,则按预期工作。但是,如果从 cron as 调用,则 if 会转到 else 块
* * * * * root /home/user/./script now >> /tmp/log
cat /tmp/log
GNU bash, version 4.3.11(1)-release (x86_64-pc-linux-gnu)
else _now_
Run Code Online (Sandbox Code Playgroud)
也与“-eq”相同。
我是否因为没有吃早餐而错过了一些非常简单的事情?
运行 Ubuntu 14.04LTS。
我有一个调用 bash 脚本的 php 脚本,如下所示:
<?php
$result = exec('sudo /bin/bash /var/www/my_bash_script.sh /var/www/vhosts/testsite/htdocs/');
var_dump($result);
?>
Run Code Online (Sandbox Code Playgroud)
这是内容my_bash_script.sh:
#!/bin/bash
svn export --force --no-auth-cache --username myusername --password mypassword http://1.2.3.4/repos/path/to/repo/ $1 2>&1
find $1 -print0 -type d | xargs -0 -n 1 -0 chown -R -v root:root 2>&1
find $1'storage' -print0 -type d | xargs -0 -n 1 chown -R -v apache 2>&1
find $1'shared' -print0 -type d | xargs -0 -n 1 chown -R -v apache 2>&1
Run Code Online (Sandbox Code Playgroud)
该脚本的目的是从我的 svn repo 导出并正确设置用户权限。
PHP …
这确实有效:
server:~> history | tail -100 | grep etc
908 2018-01-17 08:53:43 cd /etc/apache2/vhosts.d/default.d/
....
....
Run Code Online (Sandbox Code Playgroud)
但这不会:
ssh root@server "history | tail -100 | grep etc"
Run Code Online (Sandbox Code Playgroud)
为什么?
如何判断脚本是从 systemd 还是从用户调用的?
我为一个老式的守护进程创建了一个服务。我们刚刚切换到 systemd,我的一些管理员喜欢直接调用 rc-script。在机器重新启动的情况下,这不会很好地工作。Systemd 不会尊重 ,PIDFile=因为新启动的守护进程不是它的服务 cgroup 的一部分。
我添加了服务文件和 rc_script。我不能因用户 ID 而异,因为要使用脚本,用户必须是foobaruser.
停止服务现在有问题,因为 systemd 会从删除的 pid 文件中识别出这一点。
那么如何确定脚本是否是从 systemd 调用的呢?
[Unit]
Description=Foobar Service
After=syslog.target network.target
[Service]
Type=forking
User=foobaruser
LimitNOFILE=60000
LimitNPROC=8000
TasksMax=8000
PIDFile=/local/foobar/foo.pid
ExecStart=/opt/foobar/rc_script start
ExecStop=/opt/foobar/rc_script stop
TimeoutSec=100
TimeoutStopSec=300
KillMode=none
RemainAfterExit=no
Environment=LANG=de_DE.UTF-8
[Install]
WantedBy=multi-user.target
Run Code Online (Sandbox Code Playgroud)
#!/bin/bash
case $1 in
start)
VAR_IS_SYSTEMD=$( ... script to check if bash is run from systemd ... )
if [ "$VAR_IS_SYSTEMD" = false ] ; then
sudo systemctl …Run Code Online (Sandbox Code Playgroud) 我的老朋友OOM杀手来拜访我已经有很长时间了。现在它每周来一次,我无法弄清楚它为什么被触发。似乎我没有失去记忆。是什么导致了这种情况,可以采取哪些措施来防止这种情况发生?
内核:3.13.0-49-generic #83-Ubuntu SMP
就在 OOM 杀手被触发之前:
Fri Nov 16 01:45:01 EST 2018
COMMAND %MEM
mysqld 17.2
apache2 7.2
spamd child 7.0
apache2 7.0
apache2 6.9
apache2 6.8
apache2 6.8
apache2 6.6
apache2 6.6
apache2 6.4
apache2 6.4
/usr/sbin/spamd 6.4
spamd child 6.2
apache2 5.6
opendkim 0.6
horde-alarms 0.5
fail2ban-server 0.5
apache2 0.4
munin-node 0.2
pickup 0.1
cron 0.1
cron 0.1
cron 0.1
mem.sh 0.1
init 0.1
ps 0.1
config 0.0
tlsmgr 0.0
ntpd 0.0
qmgr 0.0
sh 0.0
sh …Run Code Online (Sandbox Code Playgroud)