Adrien Brochard 发布的文章

作为一个命令行探索者,你或许发现你自己一遍又一遍重复同样的命令。如果你总是用ssh进入到同一台电脑,如果你总是将一连串命令连接起来,如果你总是用同样的参数运行一个程序,你也许希望在这种不断的重复中为你的生命节约下几秒钟。

解决方案是使用一个别名(alias)。正如你可能知道的,别名用一种让你的shell记住一个特定的命令并且给它一个新的名字的方式。不管怎么样,别名有一些限制,它只是shell命令的快捷方式,不能传递或者控制其中的参数。所以作为补充,bash 也允许你创建你自己的函数,这可能更长一些和复杂一点,它允许任意数量的参数。

当然,当你有美食时,比如某种汤,你要分享它给大家。我这里有一个列表,列出了一些最有用bash别名和函数的。注意“最有用的”只是个说法,别名的是否有用要看你是否每天都需要在 shell 里面用它。

在你开始你的别名体验之旅前,这里有一个便于使用的小技巧:如果你的别名和原本的命令名字相同,你可以用如下技巧来访问原本的命令(LCTT 译注:你也可以直接原本命令的完整路径来访问它。)

\command 

例如,如果有一个替换了ls命令的别名 ls。如果你想使用原本的ls命令而不是别名,通过调用它:

\ls 

提升生产力

这些别名真的很简单并且真的很短,但他们大多数是为了给你的生命节省几秒钟,最终也许为你这一辈子节省出来几年,也许呢。

alias ls="ls --color=auto"

简单但非常重要。使ls命令带着彩色输出。

alias ll="ls --color -al"

以彩色的列表方式列出目录里面的全部文件。

alias grep='grep --color=auto'

类似,只是在grep里输出带上颜色。

mcd() { mkdir -p "$1"; cd "$1";} 

我的最爱之一。创建一个目录并进入该目录里: mcd [目录名]。

cls() { cd "$1"; ls;}

类似上一个函数,进入一个目录并列出它的的内容:cls[目录名]。

backup() { cp "$1"{,.bak};}

简单的给文件创建一个备份: backup [文件] 将会在同一个目录下创建 [文件].bak。

md5check() { md5sum "$1" | grep "$2";}

因为我讨厌通过手工比较文件的md5校验值,这个函数会计算它并进行比较:md5check文件。

alias makescript="fc -rnl | head -1 >" 

很容易用你上一个运行的命令创建一个脚本:makescript [脚本名字.sh]

alias genpasswd="strings /dev/urandom | grep -o '[[:alnum:]]' | head -n 30 | tr -d '\n'; echo" 

只是瞬间产生一个强壮的密码。

alias c="clear"

清除你终端屏幕不能更简单了吧?

alias histg="history | grep"

快速搜索你的命令输入历史:histg [关键字]

alias ..='cd ..'

回到上层目录还需要输入 cd 吗?

alias ...='cd ../..'

自然,去到上两层目录。

extract() { 
    if [ -f $1 ] ; then 
      case $1 in 
        *.tar.bz2)   tar xjf $1     ;; 
        *.tar.gz)    tar xzf $1     ;; 
        *.bz2)       bunzip2 $1     ;; 
        *.rar)       unrar e $1     ;; 
        *.gz)        gunzip $1      ;; 
        *.tar)       tar xf $1      ;; 
        *.tbz2)      tar xjf $1     ;; 
        *.tgz)       tar xzf $1     ;; 
        *.zip)       unzip $1       ;; 
        *.Z)         uncompress $1  ;; 
        *.7z)        7z x $1        ;; 
        *)     echo "'$1' cannot be extracted via extract()" ;; 
         esac 
     else 
         echo "'$1' is not a valid file" 
     fi 
}

很长,但是也是最有用的。解压任何的文档类型:extract: [压缩文件]

系统信息

想尽快地知道关于你的系统一切信息?

alias cmount="mount | column -t"

按列格式化输出mount信息。

alias tree="ls -R | grep ":$" | sed -e 's/:$//' -e 's/[^-][^\/]*\//--/g' -e 's/^/   /' -e 's/-/|/'" 

以树形结构递归地显示目录结构。

sbs() { du -b --max-depth 1 | sort -nr | perl -pe 's{([0-9]+)}{sprintf "%.1f%s", $1>=2**30? ($1/2**30, "G"): $1>=2**20? ($1/2**20, "M"): $1>=2**10? ($1/2**10, "K"): ($1, "")}e';} 

安装文件在磁盘存储的大小排序,显示当前目录的文件列表。

alias intercept="sudo strace -ff -e trace=write -e write=1,2 -p" 

接管某个进程的标准输出和标准错误。注意你需要安装了 strace。

alias meminfo='free -m -l -t'

查看你还有剩下多少内存。

alias ps? = "ps aux | grep"

可以很容易地找到某个进程的PID:ps? [名字]。

alias volume="amixer get Master | sed '1,4 d' | cut -d [ -f 2 | cut -d ] -f 1"

显示当前音量设置。

网络

对于所有用在互联网和本地网络的命令,也有一些神奇的别名给它们。

alias websiteget="wget --random-wait -r -p -e robots=off -U mozilla"

下载整个网站:websiteget [URL]。

alias listen="lsof -P -i -n" 

显示出哪个应用程序连接到网络。

alias port='netstat -tulanp'

显示出活动的端口。

gmail() { curl -u "$1" --silent "https://mail.google.com/mail/feed/atom" | sed -e 's/<\/fullcount.*/\n/' | sed -e 's/.*fullcount>//'}

大概的显示你的谷歌邮件里未读邮件的数量:gmail [用户名]

alias ipinfo="curl ifconfig.me && curl ifconfig.me/host"

获得你的公网IP地址和主机名。

getlocation() { lynx -dump http://www.ip-adress.com/ip_tracer/?QRY=$1|grep address|egrep 'city|state|country'|awk '{print $3,$4,$5,$6,$7,$8}'|sed 's\ip address flag \\'|sed 's\My\\';} 

返回你的当前IP地址的地理位置。

也许无用

所以呢,如果一些别名并不是全都具有使用价值?它们可能仍然有趣。

kernelgraph() { lsmod | perl -e 'print "digraph \"lsmod\" {";<>;while(<>){@_=split/\s+/; print "\"$_[0]\" -> \"$_\"\n" for split/,/,$_[3]}print "}"' | dot -Tpng | display -;}

绘制内核模块依赖曲线图。需要可以查看图片。

alias busy="cat /dev/urandom | hexdump -C | grep 'ca fe'" 

在那些非技术人员的眼里你看起来是总是那么忙和神秘。

最后,这些别名和函数的很大一部分来自于我个人的.bashrc。而那些令人点赞的网站 alias.shcommandlinefu.com我早已在我的帖子best online tools for Linux 里面介绍过。你可以去看看,如果你愿意,也可以分享下你的。也欢迎你在这里评论,分享一下你的智慧。

做为奖励,这里有我提到的全部别名和函数的纯文本版本,随时可以复制粘贴到你的.bashrc。(如果你已经一行一行的复制到这里了,哈哈,你发现你又浪费了生命的几秒钟~)

#Productivity
alias ls="ls --color=auto"
alias ll="ls --color -al"
alias grep='grep --color=auto'
mcd() { mkdir -p "$1"; cd "$1";}
cls() { cd "$1"; ls;}
backup() { cp "$1"{,.bak};}
md5check() { md5sum "$1" | grep "$2";}
alias makescript="fc -rnl | head -1 >"
alias genpasswd="strings /dev/urandom | grep -o '[[:alnum:]]' | head -n 30 | tr -d '\n'; echo"
alias c="clear"
alias histg="history | grep"
alias ..='cd ..'
alias ...='cd ../..'
extract() {
    if [ -f $1 ] ; then
      case $1 in
        *.tar.bz2)   tar xjf $1     ;;
        *.tar.gz)    tar xzf $1     ;;
        *.bz2)       bunzip2 $1     ;;
        *.rar)       unrar e $1     ;;
        *.gz)        gunzip $1      ;;
        *.tar)       tar xf $1      ;;
        *.tbz2)      tar xjf $1     ;;
        *.tgz)       tar xzf $1     ;;
        *.zip)       unzip $1       ;;
        *.Z)         uncompress $1  ;;
        *.7z)        7z x $1        ;;
        *)     echo "'$1' cannot be extracted via extract()" ;;
         esac
     else
         echo "'$1' is not a valid file"
     fi
}

#System info
alias cmount="mount | column -t"
alias tree="ls -R | grep ":$" | sed -e 's/:$//' -e 's/[^-][^\/]*\//--/g' -e 's/^/   /' -e 's/-/|/'"
sbs(){ du -b --max-depth 1 | sort -nr | perl -pe 's{([0-9]+)}{sprintf "%.1f%s", $1>=2**30? ($1/2**30, "G"): $1>=2**20? ($1/2**20, "M"): $1>=2**10? ($1/2**10, "K"): ($1, "")}e';}
alias intercept="sudo strace -ff -e trace=write -e write=1,2 -p"
alias meminfo='free -m -l -t'
alias ps?="ps aux | grep"
alias volume="amixer get Master | sed '1,4 d' | cut -d [ -f 2 | cut -d ] -f 1"

#Network
alias websiteget="wget --random-wait -r -p -e robots=off -U mozilla"
alias listen="lsof -P -i -n"
alias port='netstat -tulanp'
gmail() { curl -u "$1" --silent "https://mail.google.com/mail/feed/atom" | sed -e 's/<\/fullcount.*/\n/' | sed -e 's/.*fullcount>//'}
alias ipinfo="curl ifconfig.me && curl ifconfig.me/host"
getlocation() { lynx -dump http://www.ip-adress.com/ip_tracer/?QRY=$1|grep address|egrep 'city|state|country'|awk '{print $3,$4,$5,$6,$7,$8}'|sed 's\ip address flag \\'|sed 's\My\\';}

#Funny
kernelgraph() { lsmod | perl -e 'print "digraph \"lsmod\" {";<>;while(<>){@_=split/\s+/; print "\"$_[0]\" -> \"$_\"\n" for split/,/,$_[3]}print "}"' | dot -Tpng | display -;}
alias busy="cat /dev/urandom | hexdump -C | grep \"ca fe\""

via: http://xmodulo.com/useful-bash-aliases-functions.html

作者:Adrien Brochard 译者:luoyutiantang 校对:wxy

本文由 LCTT 原创翻译,Linux中国 荣誉推出

没有调试器的情况下编写程序时最糟糕的状况是什么?编译时跪着祈祷不要出错?用血祭召唤恶魔帮你运行程序?或者在每一行代码间添加printf("test")语句来定位错误点?如你所知,编写程序时不使用调试器的话是不方便的。幸好,linux下调试还是很方便的。大多数人使用的IDE都集成了调试器,但 linux 最著名的调试器是命令行形式的C/C++调试器GDB。然而,与其他命令行工具一致,DGB需要一定的练习才能完全掌握。这里,我会告诉你GDB的基本情况及使用方法。

安装GDB

大多数的发行版仓库中都有GDB

Debian 或 Ubuntu

$ sudo apt-get install gdb

Arch Linux

$ sudo pacman -S gdb

Fedora,CentOS 或 RHEL:

$sudo yum install gdb

如果在仓库中找不到的话,可以从官网中下载

示例代码

当学习GDB时,最好有一份代码,动手试验。下列代码是我编写的简单例子,它可以很好的体现GDB的特性。将它拷贝下来并且进行实验——这是最好的方法。

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char **argv)
{
    int i;
    int a=0, b=0, c=0;
    double d;
    for (i=0; i<100; i++)
    {
        a++;
        if (i>97)
            d = i / 2.0;
        b++;
    }
    return 0;
}

GDB的使用

首先最重要的,你需要使用编译器的 “-g“选项来编译程序,这样可执行程序才能通过GDB来运行。通过下列语句开始调试:

$ gdb -tui [可执行程序名]

使用”-tui“选项可以将代码显示在一个漂亮的交互式窗口内(所以被称为“文本用户界面 TUI”),在这个窗口内可以使用光标来操控,同时在下面的GDB shell中输入命令。

现在我们可以在程序的任何地方设置断点。你可以通过下列命令来为当前源文件的某一行设置断点。

break [行号]

或者为一个特定的函数设置断点:

break [函数名]

甚至可以设置条件断点

break [行号] if [条件]

例如,在我们的示例代码中,可以设置如下:

break 11 if i > 97

这样,程序循环97次之后停留在“a++”语句上。这样是非常方便的,避免了我们需要手动循环97次。

最后但也是很重要的是,我们可以设置一个“观察断点”,当这个被观察的变量发生变化时,程序会被停止。

watch [变量]

这里我们可以设置如下:

watch d

当d的值发生变化时程序会停止运行(例如,当i>97为真时)。

当设置断点后,使用"run"命令开始运行程序,或按如下所示:

r [程序的输入参数(如果有的话)]

gdb中,大多数的命令单词都可以简写为一个字母。

不出意外,程序会停留在11行。这里,我们可以做些有趣的事情。下列命令:

bt

回溯功能(backtrace)可以让我们知道程序如何到达这条语句的。

info locals

这条语句会显示所有的局部变量以及它们的值(你可以看到,我没有为d设置初始值,所以它现在的值是任意值)。

当然:

p [变量]

这个命令可以显示特定变量的值,而更进一步:

ptype [变量]

可以显示变量的类型。所以这里可以确定d是double型。

既然已经到这一步了,我么不妨这么做:

set var [变量] = [新的值]

这样会覆盖变量的值。不过需要注意,你不能创建一个新的变量或改变变量的类型。我们可以这样做:

set var a = 0

如其他优秀的调试器一样,我们可以单步调试:

step

使用如上命令,运行到下一条语句,有可能进入到一个函数里面。或者使用:

next

这可以直接运行下一条语句,而不进入子函数内部。

结束测试后,删除断点:

delete [行号]

从当前断点继续运行程序:

continue

退出GDB:

quit

总之,有了GDB,编译时不用祈祷上帝了,运行时不用血祭了,再也不用printf(“test“)了。当然,这里所讲的并不完整,而且GDB的功能远远不止于此。所以我强烈建议你自己更加深入的学习它。我现在感兴趣的是将GDB整合到Vim中。同时,这里有一个备忘录记录了GDB所有的命令行,以供查阅。

你对GDB有什么看法?你会将它与图形调试器对比吗,它有什么优势呢?对于将GDB集成到Vim有什么看法呢?将你的想法写到评论里。


via: http://xmodulo.com/gdb-command-line-debugger.html

作者:Adrien Brochard 译者:SPccman 校对:wxy

本文由 LCTT 原创翻译,Linux中国 荣誉推出

如果你是一个游戏玩家同时也是一个Linux用户,你可能很高兴在GOG在几个月前宣布它会在你最喜欢的操作系统上推出游戏。如果你之前从来没有听说过GOG,我鼓励你看看他们的产品目录中的“很棒的老游戏”,价格合理,无DRM限制,而且充满了很棒的东西。虽然Windows上的GOG客户端已经存在了很长的时间,但是官方的Linux版本客户端却是无处可见。因此,如果你不想等待官方的正式版本,一个名为LGOGDownloader非官方的开放源码计划能让你在命令行中访问你的库。

在Linux中安装 LGOGDownloader

对于Ubuntu用户来说,其官方页面建议您下载源代码并执行:

$ sudo apt-get install build-essential libcurl4-openssl-dev liboauth-dev libjsoncpp-dev libhtmlcxx-dev libboost-system-dev libboost-filesystem-dev libboost-regex-dev libboost-program-options-dev libboost-date-time-dev libtinyxml-dev librhash-dev help2man
$ tar -xvzf lgogdownloader-2.17.tar.gz
$ cd lgogdownloader-2.17
$ make release
$ sudo make install 

如果你是ArchLinux用户。有一个AUR 包等着你:

LGOGDownloader 的使用

一旦安装了该程序,你需要用下面的命令登录:

$ lgogdownloader --login 

如果你需要配置文件,那它在这里:~/.config/lgogdownloader/config.cfg

验证通过后,你可以列出你库中所有的游戏:

$ lgogdownloader --list 

用下面的命令下载游戏:

$ lgogdownloader --download --game [game name] 

你可以注意到lgogdownloader允许你恢复之前中断的下载,这当下载的游戏并不小时是很有用的。

像每一个可敬的命令行实用程序,您可以添加各种选项:

  • --platform [number] 选择您的操作系统,1是 Windows, 4是Linux。
  • --directory [destination] 下载安装包到指定的目录。
  • --language [number] 下载特定的语言包 (根据你的语言查阅手册上对应的数字)。
  • --limit-rate [speed] 限制下载速度。

一个额外的福利,lgogdownloader同样可以检查GOG网站上的更新:

$ lgogdownloader --update-check 

结果将列出论坛上收到的私人邮件的数量以及更新的游戏数量。

最后,lgogdownloader是非常标准的命令行实用工具。我甚至可以说,它是清晰和连贯性的一个缩影。我们距离Steam Linux客户端的确还差的很远,但在另一方面,官方GOG Windows客户端不会做的比这个非官方的Linux版本更多。换句话说lgogdownloader是一个完美的替代品。我等不及要看到GOG上更多的Linux兼容游戏,尤其是在他们最近公告称会提供的无DRM电影,会有视频游戏的专题。希望在电影目录中有游戏库时能在客户端看到更新。

你觉得GOG怎么样?你会使用非官方的Linux客户端么?让我们在评论中知道你的想法。


via: http://xmodulo.com/2014/09/download-gog-games-command-line-linux.html

作者:Adrien Brochard 译者:geekpi 校对:wxy

本文由 LCTT 原创翻译,Linux中国 荣誉推出

你是否写过一些很长很长的文章,以至于你会认为你永远都看不到它的结束?那么你会很明白最糟糕的不是你投入了多少的时间,而是一旦你完成,你仍然要制定和格式化你的所引用的一些参考文献。很幸运的是,Linux 有很多的解决方案:参考书目和文献管理工具。借助BibTex的力量,这些工具可以帮你导入引用源,然后自动生成一个结构化文献目录。这里给大家提供了一些Linux上参考文献管理工具的不完全列表。

1. Zotero

这应该是最著名的参考文献聚集工具,Zotero作为一个浏览器的扩展插件。当然,它也有一个方便的Linux 独立工具。拥有强大的性能,Zotero 很容易上手,并且也可以和LibreOffice 或者是其他的文本编辑器配套使用来管理文档的参考文献。我个人很欣赏其操作界面和插件管理器。可惜的是,如果你对参考文献有很多不同的需求的话,很快就会发现 Zotero 功能有限。

2. JabRef

JabRef 是最先进的文献管理工具之一。你可以导入大量的格式,可以在其外部的数据库里查找相应的条目(像Google Scholar),并且能直接输出到你喜欢的编辑器。JabRef 可以很好的兼容你的运行环境,甚至也支持插件。最后还有一点,JabRef可以连接你自己的SQL 数据库。而唯一的缺点就是其学习使用的难度。

3. KBibTex

对于 KDE 使用者,这个桌面环境也拥有它自己专有的文献管理工具KBibTex。这个程序的品质,正如你所期望。程序可高度定制,通过快捷键就可以很好的操作和体验。你可以很容易找到副本、可以预览结果、也可以直接输出到LaTex 编辑器。而我认为这款软件最大的特色在于它集成了Bigsonomy ,Google Scholar ,甚至是你的Zotero账号。唯一的缺憾是界面看起来实在是有点乱。多花点时间设置软件可以让你使用起来得心应手。

4. Bibfilex

可以运行在Gtk 和Qt 环境中,Bibfilex是一个基于 Biblatex 的界面友好的工具。相对于JabRef 和KBibTex ,缺少了一些高级的功能,但这也让他更加的快速和轻巧。不用想太多,这绝对是快速做文献目录的一个聪明的选择。界面很舒服,仅仅反映了一些必要的功能。我给出了其使用的完全手册,你可以从官方的下载页面去获得。

5. Pybliographer

正如它的名字一样,Pybliographer是一个用 Python 写的非图形化的文献目录管理工具。我个人比较喜欢把Pybiographic 当做是图形化的前端。它的界面极其简洁和抽象。如果你仅仅需要输出少数的参考文献,而且也确实没有时间去学习更多的工具软件,那么 Pybliographer 确实是一个不错的选择。有一点点像 Bibfilex 的是,它是以让用户方便、快速的使用为目标的。

6. Referencer

这应该是我归纳这些时候的一个最大的惊喜,Referencer 确实是让人眼前一亮。完美兼容 Gnome ,它可以查找和导入你的文档,然后在网上查询他们的参考文献,并且输出到 LyX ,非常的漂亮和设计良好。为数不多的几个快捷键和插件让它拥有了图书馆的风格。

总的来说,很感谢这些工具软件,有了它们,你就可以不用再担心长长的文章了,至少是不用再担心参考文献的部分了。那么我们还有什么遗漏的吗?是否还有其他的文献管理工具你很喜欢?请在评论里告诉我们。


via: http://xmodulo.com/reference-management-software-linux.html

作者:Adrien Brochard 译者:barney-ro 校对:wxy

本文由 LCTT 原创翻译,Linux中国 荣誉推出

命令行听起来有时候会很吓人,特别是在刚刚接触的时候,你甚至可能做过有关命令行的噩梦。然而渐渐地,我们都会意识到命令行实际上并不是那么吓人,反而是非常有用。实际上,没有命令行正是每次我使用 Windows 时让我感到崩溃的地方。这种感觉上的变化是因为命令行工具实际上是很智能的。 你在任何一个 Linux 终端上所使用的基本工具功能都是很强大的, 但还远说不上是足够强大。 如果你想使你的命令行生涯更加愉悦, 这里有几个程序你可以下载下来替换原来的默认程序, 它还可以给你提供比原始程序更多的功能。

dfc

作为一个 LVM 使用者, 我非常喜欢随时查看我的硬盘存储器的使用情况. 我也从来没法真正理解为什么在 Windows 上我们非得打开资源管理器来查看电脑的基本信息。在 Linux 上, 我们可以使用如下命令:

$ df -h

该命令可显示电脑上每一分卷的大小、 已使用空间、 可用空间、 已使用空间百分比和挂载点。 注意, 我们必须使用 "-h" 选项使得所有数据以可读形式显示(使用 GiB 而不是 KiB)。 但你可以使用 dfc 来完全替代 df, 它不需要任何额外的选项就可以得到 df 命令所显示的内容, 并且会为每个设备绘制彩色的使用情况图, 因此可读性会更强。

另外, 你可以使用 "-q" 选项将各分卷排序, 使用 "-u" 选项指定你希望使用的单位, 甚至可以使用 "-e" 选项来获得 csv 或者 html 格式的输出.

dog

Dog 比 cat 好, 至少这个程序自己是这么宣称的。 你应该相信它一次。 所有 cat 命令能做的事, dog 都做的更好。 除了仅仅能在控制台上显示一些文本流之外, dog 还可以对其进行过滤。 例如, 你可以使用如下语法来获得网页上的所有图片:

$ dog --images [URL] 

或者是所有链接:

dog --links [URL] 

另外, dog 命令还可以处理一些其他的小任务, 比如全部转换为大写或小写, 使用不同的编码, 显示行号和处理十六进制文件。 总之, dog 是 cat 的必备替代品。

advcp

一个 Linux 中最基本的命令就是复制命令: cp。 它几乎和 cd 命令地位相同。 然而, 它的输出非常少。 你可以使用 verbose 模式来实时查看正在被复制的文件, 但如果一个文件非常大的话, 你看着屏幕等待却完全不知道后台在干什么。 一个简单的解决方法是加上一个进度条: 这正是 advcp (advanced cp 的缩写) 所做的! advcp 是 GNU coreutils 的一个 补丁版本, 它提供了 acp 和 amv 命令, 即"高级"的 cp 和 mv 命令. 使用语法如下:

$ acp -g [file] [copy] 

它把文件复制到另一个位置, 并显示一个进度条。

我还建议在 .bashrc 或 .zshrc 中设置如下命令别名:

alias cp="acp -g"
alias mv="amv -g"

(译者注: 原文给出的链接已貌似失效, 我写了一个可用的安装脚本放在了我的 gist 上, 用的是 AUR 里的 patch。)

(译者注:由于 GIST 被封,所以我将这个构建脚本贴到这里,大家可以使用它来构建一个自己用的二进制程序。)

#!/usr/bin/env bash
set -e
 
tmpdir=$(mktemp -t -d advcp.XXXXXX)
cd ${tmpdir}
 
wget https://aur.archlinux.org/packages/ad/advcp/advcp.tar.gz
tar xf advcp.tar.gz
 
source advcp/PKGBUILD
 
wget http://ftp.gnu.org/gnu/coreutils/coreutils-"${_pkgver}".tar.xz
tar xf coreutils-"${_pkgver}".tar.xz
 
cd coreutils-"${_pkgver}"
 
echo "Patching..."
patch -p1 -i ../advcp/advcpmv-"${_pkgver}"_"${pkgver}".patch || exit 1
 
echo "Start making..."
./configure || exit 1
make || exit 1
 
sudo install -Dm 755 "${PWD}"/src/cp /usr/local/bin/acp
sudo install -Dm 755 "${PWD}"/src/mv /usr/local/bin/amv
 
echo "Installation succeeded!"
echo "Don't forget to add \"alias cp='acp -g'\" and \"alias mv='amv -g'\" in your bashrc!"

The Silver Searcher

the silver searcher 这个名字听起来很不寻常(银搜索...), 它是一款设计用来替代 grep 和 ack 的工具。 The silver searcher 在文件中搜索你想要的部分, 它比 ack 要快, 而且能够忽略一些文件而不像 grep 那样。(译者注: 原文的意思貌似是 grep 无法忽略一些文件, 但 grep 有类似选项) the silver searcher 还有一些其他的功能,比如彩色输出, 跟随软连接, 使用正则表达式, 甚至是忽略某些模式。

作者在开发者主页上提供了一些搜索速度的统计数字, 如果它们的确是真的的话, 那是非常可观的。 另外, 你可以把它整合到 Vim 中, 用一个简洁的命令来调用它。 如果要用两个词来概括它, 那就是: 智能、快速。

plowshare

所有命令行的粉丝都喜欢使用 wget 或其他对应的替代品来从互联网上下载东西。 但如果你使用许多文件分享网站, 像 mediafire 或者 rapidshare。 你一定很乐意了解一款专门为这些网站设计的对应的程序, 叫做 plowshare。 安装成功之后, 你可以使用如下命令来下载文件:

$ plowdown [URL] 

或者是上传文件:

$ plowup [website name] [file] 

前提是如果你有那个文件分享网招的账号的话。

最后, 你可以获取分享文件夹中的一系列文件的链接:

$ plowlist [URL] 

或者是文件名、 大小、 哈希值等等:

$ plowprobe [URL] 

对于那些熟悉这些服务的人来说, plowshare 还是缓慢而令人难以忍受的 jDownloader 的一个很好的替代品。

htop

如果你经常使用 top 命令, 很有可能你会喜欢 htop 命令。 top 和 htop 命令都能对正在运行的进程提供了实时查看功能, 但 htop 还拥有一系列 top 命令所没有的人性化功能。 比如, 在 htop 中, 你可以水平或垂直滚动进程列表来查看每个进程的完整命令名, 还可以使用鼠标点击和方向键来进行一些基本的进程操作(比如 kill、 (re)nice 等),而不用输入进程标识符。

mtr

系统管理员的一个基本的网络诊断工具traceroute可以用于显示从本地网络到目标网络的网络第三层协议的路由。mtr(即“My Traceroute”的缩写)继承了强大的traceroute功能,并集成了 ping 的功能。当发现了一个完整的路由时,mtr会显示所有的中继节点的 ping 延迟的统计数据,对网络延迟的定位非常有用。虽然也有其它的 traceroute的变体(如:tcptraceroute 或 traceroute-nanog),但是我相信 mtr 是traceroute 工具里面最实用的一个增强工具。

总的来说, 这些十分有效的基本命令行的替代工具就像那些有用的小珍珠一样, 它们并不是那么容易被发现, 但当一旦你找到一个, 你就会惊讶你是如何忍受这么长没有它的时间! 如果你还知道其他的与上面描述相符的工具, 请在评论中分享给我们。


via: http://xmodulo.com/2014/07/better-alternatives-basic-command-line-utilities.html

作者:Adrien Brochard 译者:wangjiezhe 校对:wxy

本文由 LCTT 原创翻译,Linux中国 荣誉推出

无论何时要安装一款新的 Linux 发行系统,一般的建议都是让您通过有线连接来接到互联网的。这主要的原因有两条:第一,您的无线网卡也许安装的驱动不正确而不能用;第二,如果您是从命令行中来安装系统的,管理 WiFi 就非常可怕。我总是试图避免在命令行中处理 WiFi 。但 Linux 的世界,应具有无所畏惧的精神。如果您不知道怎样操作,您需要继续往下来学习之,这就是写这篇文章的唯一原因。所以我迫使自己学习如何在命令行中管理 WiFi 连接。

通过命令行来设置连接到 WiFi 当然有很多种方法,但在这篇文章里,同时也是一个建议,我使用最基本的方法:那就是使用在任何发布版本中都有的包含在“默认包”里的程序和工具。或者说我偏向于使用这一种方法。使用此方法显而易见的好处是这个操作过程能在任意有 Linux 系统的机器上复用。不好的一点是它相对来说比较复杂。

首先,我假设您们都已经正确安装了无线网卡的驱动程序。没有这前提,后续的一切都如镜花水月。如果您你机器确实没有正确安装上,您应该看看关于您的发布版本的维基和文档。

然后您就可以用如下命令来检查是哪一个接口来支持无线连接的:

$ iwconfig

一般来说,无线接口都叫做 wlan0。当然也有例外的,但在这篇教程中我们将会一直用通用叫法。

以防万一,你得确认下以使此接口服务是启动着的:

$ sudo ip link set wlan0 up

一但确认了无线接口是工作着的,你就可以用如下命令来扫描附近的无线网络了:

$ sudo iw dev wlan0 scan | less 

根据扫描出的结果,可以得到网络的名字(它的 SSID),它的信息强度,以及它使用的是哪个安全加密的(如:WEP、WPA/WPA2)。从此时起,将会分成两条路线:情况很好、很容易的以及情况稍微复杂的。

如果您想连接的网络是没有加密的,您可以用下面的命令直接连接:

$ sudo iw dev wlan0 connect [网络 SSID]

如果网络是用 WEP 加密的,也非常容易:

$ sudo iw dev wlan0 connect [网络 SSID] key 0:[WEP 密钥]

但网络使用的是 WPA 或 WPA2 协议的话,事情就不好办了。这种情况,您就得使用叫做 wpasupplicant 的工具,它默认是没有的。然后需要修改 /etc/wpasupplicant/wpa\_supplicant.conf 文件,增加如下行:

network={
    ssid="[网络 ssid]"
    psk="[密码]"
    priority=1
}

我建议你​​在文件的末尾添加它,并确保其他配置都注释掉。要注意 SSID 和密码字串都是大小写敏感的。在技术上您也可以把接入点的名称当做是 SSID,使用 wpa\_supplicant 工具的话会有合适的 SSID 来替代这个名字。

一旦配置文件修改完成后,在后台启动此命令:

$ sudo wpa_supplicant -i wlan0 -c /etc/wpa_supplicant/wpa_supplicant.conf

最后,无论是连到开放的网络还是加密的安全网络,您都得获取 IP 地址。简单地使用如下命令:

$ sudo dhcpcd wlan0

如果一切顺利的话,您应该已经通过 DHCP 获取到了一个全新的本地 IP,这个过程是在后台自动完成的。如果想确认下是否真正连接上的话,您可以再一次输入如下命令检查:

$ iwconfig

最后,我认为多次重复第一步的检查操作是很有必要的。您永远不会知道什么时候您的图形用户界面挂了,或者是什么时候不能访问无线连接了,所以现在就准备着用命令来检测吧。还有,前面提到过的,有很多种方式(如 NetworkManager、wicdnetcfgwifi 等等)来管理无线连接。我坚持使用最基本的方式,但在某些情况下,我使用的工具可能您还没有,所以您在之前就得先下载它们。另一方面,有很多高级的应用程序,他们确实是不包含在“默认包”里面的,使用它们会大大简化操作过程。但一般建议是开始的话最好从基本的来。

关于从命令行来管理连接 WiFi 您还有其他方式方法吗?请在评论中让我们知道。


via: http://xmodulo.com/2014/08/manage-wifi-connection-command-line.html

作者:Adrien Brochard 译者:runningwater 校对:校对者ID

本文由 LCTT 原创翻译,Linux中国 荣誉推出