天天看点

20个 Unix/Linux 命令技巧20个 Unix/Linux 命令技巧

让我们用这些unix/linux命令技巧开启新的一年,提高在终端下的生产力。我已经找了很久了,现在就与你们分享。

20个 Unix/Linux 命令技巧20个 Unix/Linux 命令技巧

<a target="_blank"></a>

我在生产服务器上有一个很大的200gb的日志文件需要删除。我的rm和ls命令已经崩溃,我担心这是由于巨大的磁盘io造成的,要删除这个大文件,输入:

<code>&gt; /path/to/file.log</code>

<code># 或使用如下格式</code>

<code>: &gt; /path/to/file.log</code>

<code></code>

<code># 然后删除它</code>

<code>rm /path/to/file.log</code>

试试使用script命令行工具来为你的终端输出创建输出记录。

<code>script my.terminal.sessio</code>

输入命令:

<code>ls</code>

<code>date</code>

<code>sudo service foo stop</code>

要退出(结束script会话),输入 exit 或者 logout 或者按下 control-d。

<code>exit</code>

要浏览输入:

<code>more my.terminal.session</code>

<code>less my.terminal.session</code>

<code>cat my.terminal.session</code>

<code>mkdir /tmp</code>

<code>chmod 1777 /tmp</code>

<code>chown root:root /tmp</code>

<code>ls -ld /tmp</code>

为了我的数据隐私,我想要锁定我文件服务器下的/downloads文件夹。因此我运行了:

<code>chmod 0000 /downloads</code>

root用户仍旧可以访问,而ls和cd命令则不工作。要还原它用:

<code>chmod 0755 /downloads</code>

害怕root用户或者其他人偷窥你的个人文件么?尝试在vim中用密码保护,输入:

<code>vim +x filename</code>

或者,在退出vim之前使用:x 命令来加密你的文件,vim会提示你输入一个密码。

只要输入:

<code>reset</code>

传递-h或者-h(和其他选项)选项给gnu或者bsd工具来获取像ls、df、du等命令以易读的格式输出:

<code>ls -lh</code>

<code># 以易读的格式 (比如: 1k 234m 2g)</code>

<code>df -h</code>

<code>df -k</code>

<code># 以字节、kb、mb 或 gb 输出:</code>

<code>free -b</code>

<code>free -k</code>

<code>free -m</code>

<code>free -g</code>

<code># 以易读的格式输出 (比如 1k 234m 2g)</code>

<code>du -h</code>

<code># 以易读的格式显示文件系统权限</code>

<code>stat -c %a /boot</code>

<code># 比较易读的数字</code>

<code>sort -h -a file</code>

<code># 在linux上以易读的形式显示cpu信息</code>

<code>lscpu</code>

<code>lscpu -e</code>

<code>lscpu -e=cpu,node</code>

<code># 以易读的形式显示每个文件的大小</code>

<code>tree -h</code>

<code>tree -h /boot</code>

<code>## linux 版本 ##</code>

<code>lslogins</code>

<code>## bsd 版本 ##</code>

<code>logins</code>

示例输出:

<code>uid user pwd-lock pwd-deny last-login gecos</code>

<code>0 root 0 0 22:37:59 root</code>

<code>1 bin 0 1 bin</code>

<code>2 daemon 0 1 daemon</code>

<code>3 adm 0 1 adm</code>

<code>4 lp 0 1 lp</code>

<code>5 sync 0 1 sync</code>

<code>6 shutdown 0 1 2014-dec17 shutdown</code>

<code>7 halt 0 1 halt</code>

<code>8 mail 0 1 mail</code>

<code>10 uucp 0 1 uucp</code>

<code>11 operator 0 1 operator</code>

<code>12 games 0 1 games</code>

<code>13 gopher 0 1 gopher</code>

<code>14 ftp 0 1 ftp user</code>

<code>27 mysql 0 1 mysql server</code>

<code>38 ntp 0 1</code>

<code>48 apache 0 1 apache</code>

<code>68 haldaemon 0 1 hal daemon</code>

<code>69 vcsa 0 1 virtual console memory owner</code>

<code>72 tcpdump 0 1</code>

<code>74 sshd 0 1 privilege-separated ssh</code>

<code>81 dbus 0 1 system message bus</code>

<code>89 postfix 0 1</code>

<code>99 nobody 0 1 nobody</code>

<code>173 abrt 0 1</code>

<code>497 vnstat 0 1 vnstat user</code>

<code>498 nginx 0 1 nginx user</code>

<code>499 saslauth 0 1 "saslauthd user"</code>

我意外在/var/www/html/而不是/home/projects/www/current下解压了一个tarball。它搞乱了/var/www/html下的文件,你甚至不知道哪些是误解压出来的。最简单修复这个问题的方法是:

<code>cd /var/www/html/</code>

<code>/bin/rm -f "$(tar ztf /path/to/file.tar.gz)"</code>

正经地说,你应该试一下用htop代替top:

<code>sudo htop</code>

只需要输入!!。比如:

<code>/myhome/dir/script/name arg1 arg2</code>

<code># 要再次运行相同的命令</code>

<code>!!</code>

<code>## 以root用户运行最后运行的命令</code>

<code>sudo !!</code>

!!会运行最近使用的命令。要运行最近运行的以“foo”开头命令:

<code>!foo</code>

<code># 以root用户运行上一次以“service”开头的命令</code>

<code>sudo !service</code>

!$用于运行带上最后一个参数的命令:

<code># 编辑 nginx.conf</code>

<code>sudo vi /etc/nginx/nginx.conf</code>

<code># 测试 nginx.conf</code>

<code>/sbin/nginx -t -c /etc/nginx/nginx.conf</code>

<code># 测试完 "/sbin/nginx -t -c /etc/nginx/nginx.conf"你可以用vi再次编辑这个文件了</code>

<code>sudo vi !$</code>

如果你需要提醒离开你的终端,输入下面的命令:

<code>leave +hhmm</code>

这里:

hhmm - 时间是以hhmm的形式,hh表示小时(12时制或者24小时制),mm代表分钟。所有的时间都转化成12时制,并且假定发生在接下来的12小时。

想要进入刚才进入的地方?运行:

<code>cd -</code>

需要快速地回到你的家目录?输入:

<code>cd</code>

变量cdpath定义了目录的搜索路径:

<code>export cdpath=/var/www:/nas10</code>

现在,不用输入cd */var/www/html/ 这样长了,我可以直接输入下面的命令进入 /var/www/html:

<code>cd html</code>

要编辑一个正在用less浏览的文件,可以按下v。你就可以用变量$editor所指定的编辑器来编辑了:

<code>less *.c</code>

<code>less foo.html</code>

<code>## 按下v键来编辑文件 ##</code>

<code>## 退出编辑器后,你可以继续用less浏览了 ##</code>

要看到你系统中的所有目录,运行:

<code>find / -type d | less</code>

<code># 列出$home 所有目录</code>

<code>find $home -type d -ls | less</code>

要看到所有的文件,运行:

<code>find / -type f | less</code>

<code># 列出 $home 中所有的文件</code>

<code>find $home -type f -ls | less</code>

你可以用mkdir加上-p选项一次创建一颗目录树:

<code>mkdir -p /jail/{dev,bin,sbin,etc,usr,lib,lib64}</code>

<code>ls -l /jail/</code>

不必运行:

<code>cp /path/to/file /usr/dir1</code>

<code>cp /path/to/file /var/dir2</code>

<code>cp /path/to/file /nas/dir3</code>

运行下面的命令来复制文件到多个目录中:

<code>echo /usr/dir1 /var/dir2 /nas/dir3 | xargs -n 1 cp -v /path/to/file</code>

diff命令会按行比较文件。但是它也可以比较两个目录:

<code>ls -l /tmp/r</code>

<code>ls -l /tmp/s</code>

<code># 使用 diff 比较两个文件夹</code>

<code>diff /tmp/r/ /tmp/s/</code>

20个 Unix/Linux 命令技巧20个 Unix/Linux 命令技巧

图片: 找出目录之间的不同

你可以用fmt命令重新格式化每个段落。在本例中,我要用分割超长的行并且填充短行:

<code>fmt file.txt</code>

你也可以分割长的行,但是不重新填充,也就是说分割长行,但是不填充短行:

<code>fmt -s file.txt</code>

如下使用tee命令在屏幕上看见输出并同样写入到日志文件my.log中:

<code>mycoolapp arg1 arg2 input.file | tee my.log</code>

tee可以保证你同时在屏幕上看到mycoolapp的输出并写入文件  my.log。

----------------------------------------------------------------------------------------------------------------------------