• Linux Permission denied 问题


    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

  • 相关阅读:
    PHP 消息队列
    Nginx 设置负载均衡
    Nginx 服务器搭建
    PHP 获取文件扩展名的五种方式
    高并发和大流量解决方案
    <面试> PHP 常见算法
    Mysql 预查询处理 事务机制
    Linux定时任务 结合PHP实现实时监控
    Swoole 结合TP5搭建文字直播平台
    <记录> PHP Redis操作类
  • 原文地址:https://www.cnblogs.com/lsgxeva/p/10968855.html
Copyright © 2020-2023  润新知