linux /bin/sh -c的用途
解决命令的权限问题,可以扩大权限的范围
比如要向 test.asc 文件中随便写入点内容,可以:
$ echo "信息" >> test.csv
如果将 test.asc 权限设置为只有 root 用户才有权限进行写操作:
$ sudo chown root.root test.csv
然后,我们使用 sudo 并配合 echo 命令再次向修改权限之后的 test.asc 文件中写入信息:
$ sudo echo "hahah" >> test.csv
-bash: test.asc: Permission denied
这时可以看到 bash 拒绝这么做,说是权限不够。这是因为重定向符号 “>” 和 “>>” 也是 bash 的命令。我们使用 sudo 只是让 echo 命令具有了 root 权限,但是没有让 “>” 和 “>>” 命令也具有 root 权限,所以 bash 会认为这两个命令都没有像 test.csv文件写入信息的权限。
解决这一问题的途径有两种。
第一种是利用 "sh -c"
命令,它可以让 bash 将一个字串作为完整的命令来执行,这样就可以将 sudo 的影响范围扩展到整条命令。具体用法如下:
$ sudo /bin/sh -c 'echo "hahah" >> test.asc'
另一种方法是利用管道和 tee 命令,该命令可以从标准输入中读入信息并将其写入标准输出或文件中,具体用法如下:
$ echo "hahah" | sudo tee -a test.asc
注意,tee 命令的 “-a” 选项的作用等同于 “>>” 命令,如果去除该选项,那么 tee 命令的作用就等同于 “>” 命令
对于编程的影响:
shell脚本中如果有多个echo命令,如果不适用/bin/sh -c执行脚本,那么在java中使用BufferedReader获取脚本的输出时,只能获取到第一个echo的输出,使用/bin/sh -c则能获取到所有的echo输出。
参考链接:https://www.jianshu.com/p/bda8d3cbdbae
相关文章
- Linux应用软件:发挥无穷科技潜力(linux的应用软件)
- Linux为用户提供权限许可(linux如何给用户权限)
- 文件Linux命令行新建文本文件的方法(linux新建文本)
- Linux内核:构成与功能(linux内核的组成)
- 文件恢复 bin 文件:Linux 中的灾难终极之战(linux误删除bin)
- 文件Linux下如何运行.sh文件(linux怎么运行.sh)
- 如何在Linux系统中使用Bin文件(bin文件linux)
- 探索Linux命令之旅(linux了.sh)
- Linux让系统运转更流畅(linux了.sh)
- 探索Linux之美:一次小小的.sh之旅(linux了.sh)
- 掌握Linux的强大拷贝功能:从文件到目录(linux拷贝文件或目录)
- 启动Linux:使用SH文件(linux启动sh文件)
- 如何使用Linux编写Shell脚本(linux编写sh文件)
- 出错解决Linux .sh文件运行出错的方法(linux.sh运行)
- Linux安装SH:一步一步指南(linux安装sh)
- 安装Linux系统时使用LZMA压缩(linux安装lzma)
- 掌握Linux服务器温度,保障运行安全(linux服务器温度)
- Linux系统下保护网络环境:防火墙可靠保护(linux中防火墙)
- Linux分支:窥探开源世界的智慧宝库(linux的分支)
- Linux环境:让无权限用户获得访问权(linux授权用户组)
- 什么Linux bin目录:存放系统重要程序的地方(linux bin目录是)
- 脚本Linux 中快速调用 sh 脚本的小技巧(linux调用sh)