一、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]