Linux系统命令(不定时更新)

1. su

编辑bash时,遇到过此类问题:

#!/bin/bash
sudo echo 'abc' > /etc/test

尽管使用了sudo权限,但脚本执行时仍然会报无权限写入/etc/目录。原因在于sudo的权限只提供给了command_1: sudo echo abc ,而真正需要使用的是 command_2: > /etc/test 。故需要做如下调整:

su [-root] -c "echo 'abc' > /etc/test"

su 用于让用户在登录期间变成另外一个用户。后边不带 username 使用时,su 默认会变成超级用户。可选的选项 - (对,就单独一个 - ,完整写法是 -l--login ),可以用于提供一个类似于用户直接登录的环境,用户可能期望是这样的。

1.1. su命令中passwd的自动输入

su本身会去调passwd这个程序,而passwd会检测“必须从终端上得倒输入”,所以任何重定向都是不起作用的,但是……有一个东东有用,就是expect,它通过伪终端和 spawn 出来的程序通信,而伪终端是 passwd 会认的(不然网络登陆就不行了),简单的脚本如下:

#!/usr/bin/expect -f

spawn su -l
expect "Password:*"
sleep 1
send "your password
"
expect "root]#"
interact
exit

当然这种方式的主要用途不是提供给别人用哈,不然密码的随意暴露也太危险了,所以它是一种当前使用非常广泛、用于批处理自动化测试的脚本语言。类似于上面脚本,你在自己机器上当然也可以为了省事而这样做。

expect同样支持scp的密码自动填入:

#!/usr/bin/expect

set password 123
spawn scp ./south_db.sql root@135.252.234.118:~
expect -nocase "password: "
send "$password
"
expect eof

可惜su并不支持“无密码公钥认证”,否则可以采用类似scp的公钥认证方式,从而避免 expect 明文记录密码

2. sshpass

远程连接某台主机: sshpass -p your_password ssh [-p nPort] root@192.168.11.11

从密码文件读取文件内容作为密码去远程连接主机: sshpass -f xxx.txt ssh root@192.168.11.11

向scp程序传送默认密码: sshpass -p 'passwd' scp root@host_ip:/home/test/t ./tmp/

3. netstat/ss

netstat 命令已被弃用,而 ss 命令代替了显示更详细的网络统计信息。

netstat/ss -tnlp

  • -t 启用TCP端口列表
  • -u 启用UDP端口列表
  • -l 仅输出监听套接字
  • -n 显示端口号
  • -p 显示进程/程序名称

3.1. 实时观察TCP和UDP开放端口

要实时监视TCP和UDP端口,可以使用所示的watch实用程序运行netstat或ss工具。

watch ss -tulpn

4. locate/mlocate

5. top/htop

6. lftp

7. kill/killall

原文地址:https://www.cnblogs.com/brt2/p/13055853.html