sudo和tee 2009-03-09 21:07:38   http://blog.chinaunix.net/uid-20749137-id-718785.html

分类: LINUX

$sudo echo ‘1′ > ip_forward
bash: ip_forward: Permission denied

而以root身份就可以?

# echo ‘1′ > ip_forward

一开始没有看出原因来,后来仔细一琢磨,其实原因很简单,shell对‘>’解释干扰了对这个命令含义的判断。我们本想应该是这样的意思:让sudo执行后面的这些“echo ‘1′ > ip_forward”,而实际上是:sudo echo ‘1′,执行到这里,shell再把它的执行结果重定向到ip_forward里去!当然是无权限,因为流本身不会随echo那样被sudo“感染”上suid权限!

解决方法是什么?也很简单,就让后面那一串东西搁一起执行:

$sudo sh -c ‘echo 1 > ip_forward’

等等,还有没有更好的解决方法?有!刘洋同学认真思考了一下,觉得应该有这么个东西XX: echo ‘1′ | sudo XX ip_forward。我擦亮眼睛一看,我靠,这不就是tee(1)么!!没错,另一种解决方法就是:

$echo ‘1′ | sudo tee ip_forward

或者:

$echo ‘1′ | sudo tee ip_forward | cat > /dev/null

刘洋问tee(1)是不是和tea有关系?不是!tee其实取自大写字母T的发音,而T不正是最后一个命令中流的流向么?!多么形象的名字啊!

#!/bin/bash
#for i in {77..77}
#do
        ip=10.162.148.77
        awk -v awk_ip="$ip" '{if($1==awk_ip) print $2}' ip > /tmp/ip.tmp
        for line in `cat /tmp/ip.tmp`
        do
                #ssh unicomlabs@$ip "echo unicomlabs | sudo -S cp /var/spool/cron/root /var/spool/cron/root.bak"
                #c=$(ssh unicomlabs@$ip "echo unicomlabs | sudo -S echo \"59 23 * * * find /home/unicomlabs/${line}_bak5/done/datafiles -type f -mtime +15 -exec rm {} \;
                #ssh -t unicomlabs@$ip 'su - root -c "cp /var/spool/cron/root /var/spool/cron/root.bak"'
                #ssh -t unicomlabs@$ip 'su - root -c "rm -f /var/spool/cron/root"'
 sshpass -p unicomlabs_2017 ssh unicomlabs@$ip 'echo unicomlabs_2017|sudo -S sh -c "echo \"59 23 * * * echo unicomlabs_2017|sudo -S find /data/unicomlabs/'${line}'_bak5/done/datafiles -type f -mtime +15 -exec rm {} \;
59 23 * * * echo unicomlabs_2017|sudo -S find /data/unicomlabs/'${line}'_bak5/done/bads -type f -mtime +15 -exec rm {} \;
59 23 * * * echo unicomlabs_2017|sudo -S find /data/unicomlabs/'${line}'_bak5/done/logs -type f -mtime +15 -exec rm {} \;
59 23 * * * echo unicomlabs_2017|sudo -S find /data/unicomlabs/'${line}'_bak5/log -type f -mtime +30 -exec rm {} \;
59 23 * * * echo unicomlabs_2017|sudo -S find /data/unicomlabs/'${line}'_bak5/log_ast -type f -mtime +30 -exec rm {} \;
10 0 1 * * echo unicomlabs_2017|sudo -S ls -rt /data/unicomlabs/'${line}'/run/*.out | tail -1 | xargs -i cp /dev/null {}
10 0 1 * * echo unicomlabs_2017|sudo -S ls -rt /data/unicomlabs/'${line}'_ast/run/*.out | tail -1 | xargs -i cp /dev/null {}
10 0 * * 1 echo unicomlabs_2017|sudo -S find /data/'${line}'_bak -name "*.error" | xargs rm -f {}\" >>/var/spool/cron/root"'
                echo $ip '|' $line:
                #echo $c
                echo "================================================================="
        done
#done

普通用户echo权限不够问题

322人阅读 评论(0) 收藏 举报  http://blog.csdn.net/xiaoxiaonvwu/article/details/70739354
分类:

问题:

普通用户echo写入文件,提示权限不够。

脚本内容为:

echo "$pjname,$versioncode">>$nginxroot/$pjname/version.txt

增加 sudo后依然提示权限不够


解决方法:

sudo tee version.txt <<< "要插入内容" 
GitHub 加速计划 / li / linux-dash
10.39 K
1.2 K
下载
A beautiful web dashboard for Linux
最近提交(Master分支:2 个月前 )
186a802e added ecosystem file for PM2 4 年前
5def40a3 Add host customization support for the NodeJS version 4 年前
Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐