sudo可以让当前用户拥有su用户的权限,来执行root下才能执行的命令,访问操作等。本文记录下用sudo一次性执行多个命令的方法。
目录导航
直接sudo执行
类似source会直接报找不到命令
[zxt2000@anolios86-1 ~]$ sudo source /home/gbase/.gbase_profile
sudo: source:找不到命令
[zxt2000@anolios86-1 ~]$
查看文件确实存在,但sudo就是无法运行source
[zxt2000@anolios86-1 ~]$ sudo ls -l /home/gbase/.gbase_profile
-rw-rw-r-- 1 gbase gbase 336 1月 24 09:47 /home/gbase/.gbase_profile
[zxt2000@anolios86-1 ~]$ sudo "source /home/gbase/.gbase_profile;gccli"
sudo: source /home/gbase/.gbase_profile;gccli:找不到命令
用sudo sh -c来执行多个命令
如果命令里有双引号和$符号,则转义下。
[zxt2000@anolios86-1 ~]$ sudo sh -c "source /home/gbase/.gbase_profile;gccli -e\"show processlist\""
+----+-----------------+-----------+------+---------+-------+-----------------------------+------------------+
| Id | User | Host | db | Command | Time | State | Info |
+----+-----------------+-----------+------+---------+-------+-----------------------------+------------------+
| 1 | event_scheduler | localhost | NULL | Daemon | 12775 | Waiting for next activation | NULL |
| 41 | root | localhost | NULL | Query | 0 | NULL | show processlist |
+----+-----------------+-----------+------+---------+-------+-----------------------------+------------------+
[zxt2000@anolios86-1 ~]$
python代码里处理sudo命令中的特殊字符
cmd = "sudo sh -c \""+cmd.replace('"','\\"').replace('$','\\$')+"\""