Linux不常见命令参考


分享一些不常见的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
!$
!$是一个特殊的环境变量,它代表了上一个命令的最后一个字符串。如:你可能会这样:
$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