Linux Permission denied 问题

来源  https://www.cnblogs.com/sparkdev/p/10287164.html

如果当前用户没有某个文件的写权限,又要通过输出重定向往该文件中写入内容。结果只能是 "Permission denied"。比如当前用户为 nick,下面的命令视图查询 /root 目录下的文件并把结果写入到 /root/test.txt 文件中(注意:用户 nick 没有对 /root/test.txt 文件的写权限):

$ sudo ls -al /root/test.txt
$ sudo ls -al /root > /root/test.txt

Permission denied 的原因

sudo ls -al /root > /root/test.txt 命令不工作的原因是:
虽然 ls 命令是以 sudo 方式执行的,但是输出重定向操作是由当前 shell 执行的,它(当前 shell)没有 /root/test.txt 文件的权限,所以最终失败。

搞清楚了原因,就可以通过不同的方式来解决这个问题了,下面介绍四种方式。

以 sudo 方式运行 shell

既然是 shell 进程没有权限,那就用 sudo 的方式执行 shell:

$ sudo bash -c 'ls -al /root > /root/test.txt'

把命令写入脚本,以 sudo 方式执行脚本

把下面的代码保存到脚本文件 test.sh 中:

#!/bin/bash
ls -al /root > /root/test.txt

然后通过下面的方式执行:

$ chmod +x test.sh
$ sudo ./test.sh

如果觉着创建脚本麻烦的话还可以使用变通的方式:

$ sudo bash <<EOF
> ls -al /root > /root/test.txt
> EOF

或者是下面的写法:

$ echo 'ls -al /root > /root/test.txt' | sudo bash

先通过 sudo -s 启动 shell,然后执行命令

先通过 sudo -s 命令切换到 root 用户再执行命令,最后 ctrl + d 退出:

通过 sudo tee 命令实现

Tee 命令用于将数据重定向到文件,另一方面还可以提供一份重定向数据的副本作为后续命令的 stdin。简单的说就是把数据重定向到给定文件和屏幕上(下图来自互联网):

下面的命令中通过 sudo tee 把 ls 命令的输出写入文件:

$ sudo ls -al /root | sudo tee /root/test.txt > /dev/null

其中的 > /dev/null 阻止 tee 把内容输出到终端:

参考:
linux – 如何使用sudo将输出重定向到一个我没有权限写入的位置?

====================== End

Linux Permission denied 问题的更多相关文章

  1. Linux permission denied问题

    初试Linux 本来想试一试递归的mkdir -p结果遇到了permission denied,但是自己明明是管理员啊 查了博客,在文件名前加上chmod 777 ,例如chmod 777  temp ...

  2. Linux permission denied解决方法

    一.准备 比如建立一个test.sh的脚本文件,脚本代码如下: #! /bin/bash echo Hello,world! 代码功能实现的是:输出字符Hello,world! 二.运行脚本 在终端切 ...

  3. Linux 客户端访问 NFS报Permission Denied错误

    在Linux服务器上访问NFS共享目录时,报错:Permission denied. 如下截图所示: 因为这个NFS是系统管理员配置的,我又不了解具体情况,而系统管理员休假中,联系不上.那么我只能先多 ...

  4. Linux启动ftp服务器530 Permission denied解决方法(已试,行)

    Linux启动ftp服务器530 Permission denied解决方法重新在虚拟机下安装了linux.现在我想启动linux自带的ftp服务器:#service  vsftpd  start . ...

  5. 关于LINUX权限-bash: ./startup.sh: Permission denied

    关于LINUX权限-bash: ./startup.sh: Permission denied <script type="text/javascript"></ ...

  6. Linux下解决permission denied问题

    由于权限问题,在linux下启动tomcat出现权限permission denied 提示解决方法如下: 1.cd 进入tomcat/bin目录 2.运行下面命令 sudo chmod 777 st ...

  7. linux 下执行.sh文件总是提示permission denied

      linux 下执行.sh文件总是提示permission denied 如果你是root登陆的话(不是的话,切换到root用户,对*.sh赋可执行的权限) chmod 777 *.sh or ch ...

  8. linux 下执行.sh文件提示permission denied

    linux 下执行.sh文件提示permission denied 在脚本文件目录下运行命令,赋予权限: chmod 777 *.sh or chmod +x  *.sh

  9. 【jvm】linux 调用 jmap 报错Permission denied

    linux 调用 jmap  报错Permission denied 解决方案: 分别对java安装目录,java的bin目录以及jmap命令设置权限 chmod jdk1..0_79 chmod b ...

随机推荐

  1. Python 寻找文件夹里以特定格式结尾的文件

    代码: import os, re, time name = 'linuxday01' flags = True# 文件夹bi_test中的文件列表 print os.listdir('E:\\bi_ ...

  2. Android ListView多布局

    使用listview多布局会出现一点问题: 由于多个item布局给单一的item布局是不一样的,使用起来,contentview的复用会出现问题. 避免出现问题的有这几个方法: 1.重写 getVie ...

  3. linux内核中有哪些子系统(框架)呢?

    注意: 分析用的linux内核版本为5.1.3 1. RTC子系统 2. Remote Processor子系统 3. Remote Processor Message子系统 4. SCSI子系统 5 ...

  4. LC 881. Boats to Save People

    The i-th person has weight people[i], and each boat can carry a maximum weight of limit. Each boat c ...

  5. python之scrapy爬取jingdong招聘信息到mysql数据库

    1.创建工程 scrapy startproject jd 2.创建项目 scrapy genspider jingdong 3.安装pymysql pip install pymysql 4.set ...

  6. ceph报错

    [ceph_deploy.mon][ERROR ] RuntimeError: config file /etc/ceph/ceph.conf exists with different conten ...

  7. java中图片地址base64编码的相互转换

    public class Base64Url { /** * 将base64编码字符串转换为图片 * @param imgStr: base64编码字符串 * @param path: 图片路径-具体 ...

  8. Java 连接Access

    Java 连接Access 第一次使用连接Access数据库, 记录一下遇到的坑 Access驱动下载地址 http://pan.baidu.com/s/1o8ltTfc 不使用WINDOW的建立数据 ...

  9. SpringBoot使用AOP获取请求参数

    最近试了下拦截controller方法查看请求参数,方式如下: package com.*.aop; import com.alibaba.fastjson.JSON; import com.alib ...

  10. strcpy函数内存分析

    void strcpy(char* strDest, char* strSrc) { while((*strDest++ = *strSrc++) != '\0'); } 看上面这段代码,只有一条语句 ...