zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    HLG 1522 子序列的和【队列的应用】
    POJ 3273 Monthly Expense【二分】
    HDU 4004 The Frog's Games 【二分】
    POJ 2001 Shortest Prefixes【第一棵字典树】
    POJ 2823 Sliding Window【单调对列经典题目】
    HDU 1969 Pie 【二分】
    POJ 3125 Printer Queue【暴力模拟】
    POJ 3250 Bad Hair Day【单调栈】
    字典树【模板】
    验证码 Code
  • 原文地址:https://www.cnblogs.com/lsgxeva/p/10968855.html
Copyright © 2011-2022 走看看