一、

比如要向 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输出。

/bin/sh -c的必要性相关推荐

  1. 浅显易懂 Makefile 入门 (08)— 默认 shell (/bin/sh)、命令回显、make参数(-n 只显示命令但不执行,-s 禁止所有回显)、单行命令、多行命令、并发执行

    1. shell 相关 1.1 默认 shell Makefile 所使用的命令是由 shell 命令行组成,他们是一条一条执行的. 多个命令之间要使用分号隔开,Makefile 中的任何命令都要以 ...

  2. Ret2Libc(2) (有system、无‘/bin/sh’)绕过NX、ASLR

    和Ret2Libc(1)一样,先把程序扔进IDA看看代码 和Ret2Libc(1)一样,gets存在溢出漏洞 gdb-peda$ checksec CANARY    : disabled FORTI ...

  3. Ret2Libc(1) (有system、/bin/sh)绕过NX、ASLR

    Ret2Libc即控制程序执行libc库中的函数. 通常是返回到某个函数的plt处,或者函数运行时候的实际地址. 下面是一个例子: 可以看出程序gets有一个明显的溢出漏洞 gdb-peda$ che ...

  4. Compiling: main.cpp /bin/sh: g++: not found

    Kbuntu用codeblocks编写C程序的时候,编译报错如下: Compiling: main.cpp /bin/sh: g++: not found 解决方法: sudo apt-get ins ...

  5. ubuntu编译linux报错/bin/sh: 1: mkimage: not found

    报错 Kernel: arch/arm/boot/Image is readyKernel: arch/arm/boot/zImage is readyMKIMAGE arch/arm/boot/dt ...

  6. 关于#!/bin/sh 和 #!/bin/bash 的差别

    在shell脚本的开头往往有一句话来定义使用哪种sh解释器来解释脚本. 目前研发送测的shell脚本中主要有以下两种方式: (1) #!/bin/sh (2) #!/bin/bash 在这里求教同福客 ...

  7. bash、dash(/bin/bash和/bin/sh)

    Linux中的shell有多种类型,其中最常用的几种是Bourne   shell(sh).C   shell(csh)和Korn   shell(ksh).三种shell各有优缺点.Bourne   ...

  8. 【错误记录】编译 Linux 内核报错 ( /bin/sh: 1: bison: not found )

    文章目录 一.报错信息 二.解决方案 一.报错信息 编译 Linux 内核 , 执行 make menuconfig 配置菜单命令 , 报如下错误 : root@ubuntu:~/kernel/lin ...

  9. 【错误记录】编译 Linux 内核报错 ( /bin/sh: 1: flex: not found )

    文章目录 一.报错信息 二.解决方案 一.报错信息 编译 Linux 内核 , 执行 make menuconfig 配置菜单命令 , 报如下错误 : root@ubuntu:~/kernel/lin ...

最新文章

  1. 分布式系统关注点:无状态
  2. NLP新秀:BERT的优雅解读
  3. apache日志轮转
  4. delete 会不会锁表_truncate 和 delete
  5. 关于java_关于Java基础
  6. linux命令安装中英文插件,linux – 如何使用命令行自动安装Eclipse插件?
  7. C语言SM4算法实现(基于GMSSL)
  8. LCD1602----LiquidCrystal库的使用2
  9. 干货分享:给视频翻译字幕可以用哪些软件?
  10. Win10 打开heu kms activator工具进度条到70%闪退(未解决)
  11. javascript高级进阶
  12. 原生Js放大镜实例(附图附讲解可直接复制研究使用,小白福利)
  13. [原创] HBuildX,微信小程序模拟器报错(如若已在管理后台更新域名配置,请刷新项目配置后重新编译项目)
  14. 做了个后末日朋克风的梦
  15. linux 查看efi分区命令,一次修复linux的efi引导的集中方法总结记录
  16. 更换maven的settings未生效解决办法
  17. python 调用Google Translate API 翻译
  18. Winsock网络编程头文件及库文件的设置
  19. 免费小程序开发平台有哪些功能对零售超市行业有利?
  20. 企业项目实战k8s篇(二十)持续集成与持续交付

热门文章

  1. MVC设计模式深入理解
  2. 巨头纷纷布局,机器视觉迎来黄金期
  3. Android第二十八天
  4. mysql5.7二进制包安装
  5. Swift - 本地消息的推送通知(附样例)
  6. 获取Docker中容器的信息
  7. 《How Tomcat Works》读书笔记(三)Connector
  8. 推荐一个小巧轻便的RSS阅读器
  9. 资料备用:LUA性能剖析工具
  10. vue组件开发脚手架(vue-sfc-rollup),开发组件并发布至npm的利器