sudo执行带重定向命令时仍提示无权限:Permission denied问题详解以及linux里的更高效下载命令mwget安装和使用效率对比

一、sudo执行带重定向命令时仍提示无权限:Permission denied问题详解

    小问题,在此记录一下,有时在shell下执行命令重定向到文件时提示无权限-bash: temp_20181015.log: Permission denied,而且加sudo执行依提示无权限,示例如下:

[online@USER ngx]$ sudo head -n 100000 access_20181015.log >> temp_20181015.log
-bash: temp_20181015.log: Permission denied
[online@USER ngx]$ touch temp_20181015.log
[online@USER ngx]$ sudo head -n 100000 access_20181015.log >> temp_20181015.log
-bash: temp_20181015.log: Permission denied
[online@USER ngx]$ ll temp_20181015.log 
-rw-r--r-- 1 root root 42971112 Oct 16 15:57 temp_20181015.log

    整个过程的问题很好理解,sudo得到的权限并不无法随重定向符号输出,即在写temp_20181015.log时没有权限创建这个文件,于是去touch下创建了这个文件,但此时再执行仍然会报错,因为touch的文件虽然存在,但是它并不是当前执行的用户(因sudo权限不会随重定向过来,所以是用online用户去写temp_20181015.log文件,当然会失败)。所以解决办法如下:

1:文件权限问题

        就是文件权限的问题,如上导致 Permission denied 的原因是使用online用户去写root用户文件,sudo不能传递,所以报错。可以将temp_20181015.log的权限改一下,或者改一下所属于用户、组之类的即可。

2:Root权限问题

        我们可以先将当前shell弄得有root的权限,然后再进行相关操作,方式可以使用如下三种:

[online@USER ngx]$ echo "head -n 100000 access_20181015.log >> temp_20181015.log" | sudo sh
[online@USER ngx]$ sudo sh -c "head -n 100000 access_kapian_20181015.log >> temp_20181015.log"
#tee不大好,因为如果显示的内容太多,就不友好了。建议使用以上两种方式
[online@USER ngx]$ head -n 100000 access_20181015.log | sudo tee temp_20181015.log 

 二、linux里的更高效下载命令mwget安装和使用效率对比

        wget用习惯了,但是如果文件太大时会发现wget有点慢啊,来试试mwget吧。mwget和curl,multicurl一样,m就是multi多线程的意思。

wget项目地址:https://sourceforge.net/projects/kmphpfm/

#linux下载安装
sudo wget https://jaist.dl.sourceforge.net/project/kmphpfm/mwget/0.1/mwget_0.1.0.orig.tar.bz2
sudo tar xjvf mwget_0.1.0.orig.tar.bz2
cd mwget_0.1.0.orig
sudo ./configure

         在执行中遇到了错误提示:Your intltool is too old.  You need intltool 0.35.0 or later.

sudo wget http://ftp.gnome.org/pub/gnome/sources/intltool/0.40/intltool-0.40.6.tar.gz
sudo tar zxvf intltool-0.40.6.tar.gz
cd intltool-0.40.6
sudo ./configure
sudo make && sudo make install

不过我用上面的方法并未解决,再执行mwget的configure时还是报错,于是我执行了sudo yum install intltool,然后再重新来mwget的configure成功了。wget安装成功之后加一步,以方便直接 使用mwget命令

sudo ln -s /usr/local/bin/mwget /usr/bin/mwget

顺便记一下,今天又遇到了No module named yum错误:

    There was a problem importing one of the Python modules required to run yum. The error leading to this problem was:No module named yum,在我的网站里一搜没有这个记录,在这里做个笔记吧:No module named yum错误是yum和Python是依赖关系问题,基本都是yum的版本与当前python的版本不一致造成的(一般当前python都更新为2.7的了,但是yum里使用的还是2.6的)所以修改yum的配置文件:sudo  vim /usr/bin/yum. 修改头#!/usr/bin/python  => #!/usr/bin/python2.6

wget和mwget的速度对比如下:

    最后可以去进行一下mwget下载测试,mwget各选项及意义如下:

>mwget --help
GNU MWget 0.1.0 ,一个非交互式多线程可移植的网络文件下载工具。
用法: mwget [选项]....[URL]
选项:
  -b,  --debug          调试模式,显示调试信息
  -c,  --count=num      设置重试次数为[num],不限制次数设置为“0“,默认设置为“99”。
  -d,  --directory=dir  设置本地目录为[dir],默认值为当前目录。
  -f,  --file=file      重命名下载后文件为[file]
  -h,  --help          显示帮助信息。
  -i,  --interval=num    设置FTP重试期限为[num]秒,默认为“5“。
  -n,  --number=num     设置下载的线程数,默认开4个线程。
  -r,  --referer=URL    使用“Referer: [URL]”在HTTP头中欺骗服务器。
  -t,  --timeout=num    设置超时时间为[num]秒,默认设置是“30”。
  -v,  --version        显示mwget的版本,然后退出。
  -x,  --proxy=URL      设置代理 [URL]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

林戈的IT生涯

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值