Linux不常见命令参考
2013-04-28 14:50:09 阿炯

分享一些不常见的shell命令行用法,简短而实用。

!$
!$是一个特殊的环境变量,它代表了上一个命令的最后一个字符串。如:你可能会这样:
$mkdir mydir
$cd mydir
可以改成:
$mkdir mydir
$cd !$

sudo !!
以root的身份执行上一条命令 。

cd –
回到上一次的目录 。
场景举例:当前目录为/home/a,用cd ../b切换到/home/b。这时可以通过反复执行'cd –'命令在/home/a和/home/b之间来回方便的切换。也可以使用'cd $    OLDPWD'来实现。

'ALT+.' or '<ESC> .'
热建alt+. 或 esc+. 可以把上次命令行的参数给重复出来。

du -s * | sort -n | tail
列出当前目录里最大的10个文件。

:w !sudo tee %
在vi中保存一个只有root可以写的文件

date -d@1367130858
时间截转时间

> file.txt
创建一个空文件,比touch短。

在命令行前加空格,该命令不会记录到history里。

echo 'ls -l' | at midnight
在某个时间运行某个命令。

ps aux | sort -nk +10 | tail

列出头十个最耗内存的进程

man ascii

显示ascii码表。

ctrl-x e
快速启动你的默认编辑器(由变量$EDITOR设置)。

ssh user@server bash < /path/to/local/script.sh
在远程机器上运行一段脚本。这条命令最大的好处就是不用把脚本拷到远程机器上。

ssh user@host cat /path/to/remotefile | diff /path/to/localfile -
比较一个远程文件和一个本地文件

screen -d -m -S some_name ping my_router
后台运行一段不终止的程序,并可以随时查看它的状态。-d -m参数启动'分离'模式,-S指定了一个session的标识。可以通过-R命令来重新“挂载”一个标识的session。更多细节请参考linux中screen命令用法参考

lsof –i
实时查看本机网络服务的活动状态。

vim scp://username@host//path/to/somefile
vim一个远程文件

修改ssh登录提示信息
就是通过ssh等客户端软件登录系统后所看到的信息,可以在/etc/motd ->/var/run/motd或者/etc/issue、/etc/issue.net文件中修改。

在sed和awk脚本中使用变量
如果在脚本中偶尔需要用到sed工具,那么它很有可能要使用到脚本中定义的变量,使用方法如下
var="name"
sed -n '/'$var'/p' datafile

要在sed的正在表达式中使用单引号来引用定义过的变量
对于awk,使用方法如下:使用-v选项来定义你所要使用到的变量
var="name"
awk -v temp=$var '{print temp}' file

查看系统是哪个发布版
cat /etc/issue
cat /proc/version

查看操作系统是多少位
getconf LONG_BIT

判断CPU是否是64bit
cat /proc/cpuinfo | grep flags | grep 'lm'|wc -l  
#(结果大于0, 说明支持64bit计算. lm指long mode, 支持lm则是64bit)

判断CPU是否支持虚拟化技术
cat /proc/cpuinfo|grep –i 'VMX|SVM'|wc –l
cat /proc/cpuinfo | grep -i  VMX (for Intel CPU)
or cat /proc/cpuinfo | grep -i  SVM (for AMD CPU)

#如果结果大于0,就表明支持,其中VMX (for Intel CPU);SVM (for AMD CPU)

注:(1)、一些厂商禁止了机器BIOS中的VT选项,这种方式下VT不能被重新打开。
(2)、/proc/cpuinfo仅从Linux 2.6.15(Intel)和Linux 2.6.16(AMD)开始显示虚拟化方面的信息,请使用uname -r命令查询您的内核版本。

统计当前目录下文件数
查看当前目录下文件的个数
ls -l | grep "^-" | wc -l

查看当前目录下文件的个数,包括子目录里的。
ls -lR| grep "^-" | wc -l

查看某目录下文件夹(目录)的个数,包括子目录里的。
ls -lR| grep "^d" | wc -l

简要说明:
ls -l
长列表输出该目录下文件信息(注意这里的文件,不同于一般的文件,可能是目录、链接、设备文件等)
grep "^-"
这里将长列表输出信息过滤一部分,只保留一般文件,如果只保留目录就是 ^d
wc -l
统计输出信息的行数,因为已经过滤得只剩一

统计一个目录中的目录个数
ls -l | awk '/^d/' | wc -l
统计一个目录中的文件个数
ls -l | awk '/^-/' | wc -l

统计一个目录中的全部文件数
find ./ -type f -print | wc -l
统计一个目录中的全部子目录数
find ./ -type d -print | wc -l

find -name 'prm20100220*'  -d print | wc -l
 
rm删除大量文件
我在Linux系统下,发现文件数量到达一定数量后,rm指令就不行执行了.

解决方法:
cd 文件所在目录
ls . | xargs rm -f
或者
echo * | xargs rm
或者
find . -name "*" -exec rm {} \; -print

rm删除应该没有文件个数限制,所说的限制我认为应该类似这样的限制吧:
rm -rf `ls ./*`
这不是rm地 限制,linux/unix对命令行参数长度的限制一般的命令的参数的总长度不能超过4096个字节。

Linux下批量删除.svn文件,用这个命令就可以了:
find . -type d -name “.svn”|xargs rm -rf