如果我尝试例如:
目录A我没有写入权限
sudo ls -l > /home/A/a.txt
bash: /home/A/a.txt: Permission denied
那么我该如何实现这个技巧呢,任何建议都值得感激。
答案1
tee
是人们通常使用的命令。您可以通过管道连接到它,它会重定向到文件(以及控制台)。
ls -l | sudo tee /home/A/a.txt
它也有一个附加标志(相当于>>
):
ls -l | sudo tee -a /home/A/a.txt
另一种方法是将整个子 shell 包装在 sudo 中:
sudo bash -c 'ls -l > /home/A/a.txt'
我更喜欢这样做tee
,主要是因为这样你仍然可以以较低用户的身份运行大部分命令。当你将所有内容包装在一个sudo bash -c '...'
构造中时,整个过程将以 root 用户身份执行。将某些内容重定向whoami
到另一个用户的目录中可能会很麻烦。
正如我所引导的,tee
还将输出反弹回STDOUT
。这使得链接命令非常简单。
例如,如果您想将 .less 文件编译为 CSS(并保存它),请“最小化”该 CSS(并保存它),然后使用 gzip 压缩该最小化副本以保存您的服务器执行此操作(并保存它)。
您可以使用裸命令,每次使用完整的文件名:
lessc less/bootstrap.less > dist/bootstrap.css
cleancss --selectors-merge-mode ie8 dist/bootstrap.css > dist/boostrap.min.css
gzip -qk9 dist/boostrap.min.css
或者直接用 tee 进行管道传输:
lessc less/bootstrap.less | tee dist/bootstrap.css \
| cleancss --selectors-merge-mode ie8 | tee dist/boostrap.min.css \
| gzip -qc9 > dist/boostrap.min.css
这是我每天使用的代码。
可能是效率更高(你节省了对后续文件的读取,tee
将其保存在内存中),但我认为最重要的是,客观上代码更漂亮。当你每天处理这些无用的东西时,这是一个被低估的方面。
答案2
sudo
您可以使用以下方式(或以拥有该目录的用户身份)创建文件:
sudo touch /home/A/a.txt
现在,您可以使用以下命令使另一个用户成为该文件的所有者:
sudo chown username:username /home/A/a.txt
替换username
为您想要成为所有者的用户名。
或者如果您希望所有用户都能读取和编辑该文件:
sudo chmod 666 /home/A/a.txt
笔记:使用>
则不会追加到文件。使用>>
追加。
答案3
奥利答案是完美的,之后谷歌搜索后,我尝试以特权运行 shell 本身:
命令 :
sudo bash -c " ls -l > /home/A/a.txt"
并且它已解决。