Articles of bash

Bash脚本检索以太网networking接口的名称

在Ubuntu 16.04中,我根据一定的参数制作了一个脚本,用于configuration有线以太网接口的IP地址。 现在的问题是,在我的脚本中,我假设名称是eth0,但这并不总是如此。假设我只有一个有线networking接口(不需要插入),但我也可以有一个无线接口,我怎么能检索它的名字(只是有线的)? 与ifcommand我得到: enp7s0 Link encap:Ethernet HWaddr fc:3f:db:a2:6d:46 inet addr:192.168.0.101 Bcast:192.168.0.255 Mask:255.255.255.0 inet6 addr: fe80::149f:3103:af2f:1ec5/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:6784 errors:0 dropped:0 overruns:0 frame:0 TX packets:7493 errors:1 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:4565079 (4.5 MB) TX bytes:827825 (827.8 KB) lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0 inet6 addr: ::1/128 […]

findtypes和最大date年龄的命令

是否有一个查找命令标志,我可以设置文件的最大date年龄。 示例将只是在过去2天内的文件 另外,我给的命令是-type f -type f是什么意思?

服务器启动时的Centos备份

我写了bash脚本 ,在系统启动时从远程文件夹中备份一些文件。 所以在系统启动时,它将单元文件中的远程共享: [Unit] Description=CIFS Share from spr1-backup01 After=network-online.target [Mount] What=//192.168.18.12/oracle_backup Where=/mnt/smb Type=cifs Options=ro,vers=2.1,credentials=/root/creds/.cred_oralocalsys [Install] WantedBy=multi-user.target 之后备份单元启动(/root/nas/sender.sh是我的备份脚本) [Unit] Description=Backup oracle database After=mnt-smb.mount [Service] Type=simple ExecStart=/root/nas/sender.sh StandardOutput=journal [Install] WantedBy=multi-user.target Probles是如果启动时自动启动 – 它跳过实际的备份过程(我的意思是前面提到的bash脚本中的rsync部分)。 如果我手动运行这个脚本 – 一切都会很好,按预期工作。 任何想法为什么发生这种情况

Bash – 将variables插入string(找不到命令)

我尝试编写一个脚本来从许多服务器获取一些软件的版本。 但是当我尝试的时候,我得到这个错误信息。 bash:Postfix verzio:MariaDB verzio:OS verzio:Java verzio::找不到命令 bash:postfixverzio:找不到命令 空邮件正文; 希望没关系 #!/usr/bin/env bash parancsok=$(<verziok_lekerdezese.sh) while read line do array=($line) echo "IP Addresses : ${array[0]} " ssh -t -t root@${array[0]} ${parancsok} done < ipcimek_test.txt Verziok_lekerdezese.sh: postfixvr = $(postconf -d | grep -m 1 mail_version | cut -d= -f2) mariadbvr = $(mysql -v) osvr = $(cat /etc/redhat-release) javavr […]

SED不能使用复杂的string

我有一个像这样开始的文件: [global] pid = /var/run/php-fpm/php-fpm.pid error_log = /var/log/php5-fpm.log 并想要更换 error_log = /var/log/php5-fpm.log 同 error_log = /var/log/php-fpm/error.log 我想为此使用一个脚本,并执行以下操作: search='error_log = /var/log/php5-fpm.log' replace='error_log = /var/log/php-fpm/error.log' for file in `find -name 'php-fpm.conf'`; do grep "$search" $file &> /dev/null if [ $? -ne 0 ]; then echo "Search string not found in $file!" else sed -i "s#$search#$replace#" $file fi […]

从用户GUI以root身份运行脚本

所以,我有一个需要安装软件的脚本,但脚本需要以root身份运行。 我已经在GUI上创build了一个桌面图标(使用Ubuntu桌面),理想情况下,用户将点击这个图标,它会提示input密码,然后以root身份运行脚本。 到目前为止,如果以root用户身份运行脚本,脚本的作用并不如用户。 脚本看起来像这样: #!/bin/bash -l zenity –question –text "This script will reboot after installation is complete" –title="Warning\!" 2> /dev/null if [ $? = 0 ]; then install dependencies dpkg -i package.deb etc fi reboot 但是,如果我点击图标来运行脚本,它加载,它什么都不做,然后我检查日志,并意识到它失败: sudo: no tty present and no askpass program specified我知道我可以修改sudoers文件,但我不想这样做,因为我需要保持这个用户独立。 有没有办法强制运行脚本时要求用户成为root用户? 或者强制GUI要求input密码? 什么是最好的办法做到这一点? 我需要用户运行这个程序,但我需要以root用户身份运行程序,sudo不会因为任何原因执行此程序。

最后一个过程产生一个孩子并退出时如何获得最后一个PID?

我启动ssh -S mysocket example.com来连接example.com 。 如果我的连接挂起,我需要kill这个过程: ssh -S mysocket example.com -N -L 1234:localhost:1234 & last_pid=$! …(do something blocker) kill $last_pid 但是这不起作用。 如果last_pid是XXXX ,那么当我用ps -ef | grep ssh检查实际进程时 ps -ef | grep ssh ,进程'PID似乎XXXX + 1 。 这意味着ssh -S socket在后台启动,产生一个subprocess并退出。 在这种情况下,我们如何捕获最后一个pid?

从iftop中抹去一行

iftop -t -L1 -s1 输出: iftop -t -L1 -s1 | grep "Total send and receive rate:" 输出: 我怎么能grep只是“总发送和接收状态:”行?

用户login没有密码

我们有多个分配给它们的/ bin / bash shell用户帐户。 另一个应用程序“su”这些帐户用于控制其服务状态和监控目的。 这些用户的密码没有设置。 我应该做些什么来保护这些用户? 请参阅文档https://unix.stackexchange.com/questions/113754/allow-user1-to-su-user2-without-password 如果用户帐户可以使用pam模块login,它是不是一个潜在的利用窗口。 即没有sudo和没有密码。 关于这个还能做什么?

使Duplicity列表文件被备份?

当使用rsync –dry-run ,它可以列出将要备份的文件。 但是,当我与副本做 duplicity –dry-run –name pchome –encrypt-sign-key xxx –include $HOME/Desktop –exclude '**' $HOME file:///mnt/backup 它只是给出统计。 题 我如何获得重复性以列出它将执行的更改(复制/备忘录)?