那些你可能不常用却很有用的Linux命令及配置

1. du -sh directory     查询directory占用磁盘空间的大小du -sh * 可查看当前目录下所有文件夹所占空间大小,如果直接用du -sh可查询当前目录占用的磁盘空间。

long@long-Ubuntu:~$ du -sh *
28K	forsystempro
370M	Git
12M	ipbench2
761M	linux-3.7.1
719M	linux-3.7.3
184M	mywork_g1_s2

2. grep -v [pattern] [file1, file2...]       用来输出文件中不包含pattern形式的行。

                   
3. ls --full-time       显示文件被修改的详细时间,包括年月日时分秒,还有时区。
           
long@long-Ubuntu:~$ ls --full-time
总用量 188
drwxrwxr-x  2 long long  4096 2013-01-05 09:19:16.849998240 +0800 forsystempro
drwxrwxr-x  3 long long  4096 2013-01-03 12:16:27.023333001 +0800 Git
drwxr-xr-x 10 long long  4096 2013-03-05 23:27:21.436202000 +0800 ipbench2
drwxrwxr-x 24 long long  4096 2013-03-07 13:58:52.808348013 +0800 linux-3.7.1
drwxrwxr-x 23 long long  4096 2013-02-24 16:48:08.186917994 +0800 linux-3.7.3

                                   
4. 统计文件总数
包括当前目录及子目录: find . -type f | wc -l
统计子目录个数: ls -lR|grep "^d"|wc -l
参考链接:http://bbs.linuxeden.com/thread-165574-1-4.html
                                                       
5. 修改系统时间并保存
修改系统日期:date -s yy/mm/dd 
修改系统时钟:date -s hh/mm/ss
将修改后的时间保存到CMOS:clock -w
                                                         
6. 通配符进行文件名匹配
(1)使用星号"* "可以匹配文件名中的任何字符串;
(2)使用问号"?"可以匹配文件名中的单个字符;
(3)使用 [...]可以用来匹配方括号[] 中的任何字符。在这一方法中,还可以使用一个横杠 -来连
接两个字母或数字,以此来表示一个范围, 使用 [!...] 不匹配 [] 中的任意字符。
参考链接:http://www.lupaworld.com/home/space-16106-do-blog-id-114802.html
                            
7. 读取内存的相关信息--hexdump & od
如果因某种需要,想直接从内存的某个位置读取数据,譬如BIOS的一些信息,是可以在进入系统之后读取出来的,所需要读取的文件就是/dev/mem
已知我要读取的位置偏移是0xFF4F0, 读取长度为8 bytes。那么可以用 hexdump 直接读取出来:
[root@localhost ~]# hexdump -C -n 8 -s 0xff4f0 /dev/mem 
000ff4f0  31 41 43 42 54 30 35 31                           |1ACBT051|
000ff4f8
也可以通过 od 命令读取:
[root@localhost ~]# od -c  -N 8 -j 0x0FF4F0 /dev/mem 
3772360   1   A   C   B   T   0   5   1
3772370


8. 关闭控制台响铃

(1)关闭命令行的响铃:
打开/etc/inputrc
文件中应该有一行如下内容:
#set bell-style none
这一行就是用来打开或者关闭控制台命令行响铃的,当前状态是被注释掉的,因此删除'#'即可,
set bell-style none
当然,如果文件中没有这一行内容的话,直接添加上去即可。
这个更改会在下一次启动系统生效。

(2)关闭vi编辑器的响铃:
打开/etc/virc或/etc/vim/vimrc,想该文件中添加一行:
set vb t_vb= 
这个修改是即时生效的。编辑完成之后,再用vi编辑其他文件,就没有了响铃。           
                                                         

9. Linux下获取主板相关号信息 --  dmidecode


10. vi以标签页方式打开多个文件
#vi -p file1 file2
:tabp {count}  跳到前一个或者第count个文件
:tabn {count}  跳到下一个或者第count个文件
:tabc[lose]    关闭单签标签页,应该用:q也可以关闭.
更多信息请参考:http://hi.baidu.com/cdcchen/blog/item/abc7f6a9baefcff91f17a235.html

11. 保存iptables配置的规则
这里是以Redhat系列的Linux为例,具体实现方法:
#/sbin/service iptables save
保存在/etc/sysconfig/iptables中,下次系统启动会自动引导已经保存的所有iptables规则。


12. vi中设置ctags的路径

通常,在源码目录,用ctags -R ./* 就可以生成整个源码的tags文件。这时,进入源码的子目录的话,发现不能引用到tags文件。
解决的方法如下:
编辑vi的配置文件.vimrc或.virc文件,添加一行内容: 

set tags=tags; 
set autochdir

     第一个命令里的分号是必不可少的。这个命令让vim首先在当前目录里寻找tags文件,如果没有找到tags文件,或者没有找到对应的目标,就到父目录中查找,一直向上递归。因为tags文件中记录的路径总是相对于tags文件所在的路径,所以要使用第二个设置项来改变vim的当前目录。
    当然你如果想直接使用绝对路径,这样也是可以的:

    set tags=/path/to/tags

更多vim配置参考:http://blog.csdn.net/longerzone/article/details/7789581  


13.grep, sed 在目录及递归子目录中的所有文件 查找并替换字符串    
查找: grep "要找的字符串" -rl 目录
替换: sed -i "s/要查找的字符串/替换字符串/g" `grep "要查找的字符串" -rl 目录`
注意: 替换中的 grep 命令要被 TAB 键上边的那个引号包起来
参考链接:http://hi.baidu.com/kik107732781/blog/item/469c5d7f28c5370029388a5a.html

14. 在shell中使用ftp,避免交互
#!/bin/bash
HOST='xx.xx.xx.xx'
USER='user'
PASSWD='passwd'
FILE='yourfile'

ftp -n $HOST << END_SCRIPT
quote USER $USER
quote PASS $PASSWD
bin
prompt
get(/put) $FILE
quit
END_SCRIPT
exit 0
通过以上的脚本,就可以实现自动的从ftp服务器上下载文件,或者上传文件。
                                                      
15. 检测MD5字符串的有效性
应用情形是这样的:一个文件,存储的全是MD5值,而且每一个MD5从顶格占一行。行尾可能是‘\n’或者'\r\n',需要输出所有无效的MD5的行。
使用awk,命令如下:
             
 $ awk --re-interval '$0 !~/^[0-9A-Fa-f]{32}[\r]?$/' md5file

16. diff 递归目录的代码
               $ diff -rq -x .svn dirA/ dirB/
diff中递归比较带子目录的源码使用-r选项,只打印文件名使用-q选项。要排除一些目录或者文件,不参与比较,可以使用-x选项。比如通常我们不比较版本代码中的.svn中的文件。
                                                           
17. vsftp服务器上文件时间的配置
问题:直接登陆系统看到/var/ftp/pub目录下所有文件的日期与通过ftp登陆上去看到文件的时间不一致,我的测试环境上是相差8个小时,应该就是时区设置的问题。
对vsftp的配置文件/etc/vsftpd/vsftpd.conf最后添加一行内容,如下:
               use_localtime=YES
重启vsftpd即可。可见,默认情况下vsftpd使用的是GMT时间。
                                                          
18. 删除名字中带空格或换行符的目录或文件
通常我们想删除某些文件的时候,可以使用find+xargs命令的组合:
$find . -name filename | xargs rm -rf
但是,当搜索的文件名是某个长文件名的一部分,或者该文件的路径中某个目录名为带空格或者换行符的时候,最终无法删除该文件。
这个原因在于当前find和xargs默认文件名的分隔符是以空格或者换行符的,遇到一次空格就认为一个文件了。因此,处理带空格或者换行符的文件名时将失败,修正的方法就是修改find和xargs处理文件名是的分割符,让它们以NULL(0)为分隔符,修正方式如下:
$find . -name filename -print0 | xargs -0 rm -rf
这样就实现了find输出的所有文件名以NUL分割,xargs也以同样的方式进一步处理find输出的所有文件。
                                                          
19. tar排除指定目录打包
如果 /opt/apache/目录下有 a b c d  这几个目录
现在要将 a b目录tar打包,不打包c d目录

命令如下,当前在opt目录下
opt>  tar -zcvf apache.tar.gz --exclude=c --exclude=d    apache
opt> tar -zcvf test.tar.gz --exclude=/apache/c --exclude=apache/d   apache 

注意: 要打包的目录要放在最后面的!、--------------------------------------------

tar分卷压缩:tar cvzpf - somedir | split -d -b 500m (-d不是split的选项,是shell的选项,表示将tar命令的输出作为split的输入)

tar多卷合并:cat x* > mytarfile.tar.gz
引用链接:http://blog.chinaunix.net/u/19637/showart_441607.html
                                                          
20. 非交互进行ftp下载--wget
下载单个文件:
#$wget -b ftp://user:pass@ftpserver/[dir/]file
其中[dir/]/file代表所欲下载的文件相对于ftp根目录的路径。

21.对于终端下命令行前缀的修改
现在很多终端下使用命令行,前缀都会标记出当前目录,但是如果目录很深的话,这么长的前缀难免会影响工作,所以,我们可以使用:
root@long-Ubuntu:/home/long/linux-3.7.3/drivers/uio# it's too long^C^C
root@long-Ubuntu:/home/long/linux-3.7.3/drivers/uio# PS1=#
#ls

22. 添加IP地址与mac地址的关联
ip neigh add 192.168.1.226 lladdr 00:11:09:40:68:3f dev eth0 nud perm

23.网络查找命令
用namp对局域网扫描一遍,然后查看arp缓存表就可以知道局域内ip-mac的对应了,namp比较强大也可以直接扫描mac地址和端口。
首先进行安装:(Ubuntu下直接apt-get即可)#apt-get install nmap
进行ping扫描,打印出对扫描做出响应的主机:   
nmap -sP 192.168.1.0/24   

仅列出指定网络上的每台主机,不发送任何报文到目标主机:   
nmap -sL 192.168.1.0/24   

探测目标主机开放的端口,可以指定一个以逗号分隔的端口列表(如-PS22,23,25,80):   
nmap -PS 192.168.1.234  
 
使用UDP ping探测主机:   
nmap -PU 192.168.1.0/24  
 
使用频率最高的扫描选项:SYN扫描,又称为半开放扫描,它不打开一个完全的TCP连接,执行得很快:   
nmap -sS 192.168.1.0/24 
执行扫描之后就可以 cat /proc/net/arp查看arp缓存表了



 注:本文有部分摘抄网上前辈的博客(有些已发现错误本文中已改正),但是我会为这篇博客添加更多我自己的东西,所以在此处就先标记为原创。本文会不断更新,记录我学到的比较好的命令。最后再次祈求原作者不要介意。
    [1]  http://blog.chinaunix.net/uid-10167808-id-25956.html

你可能感兴趣的:(linux,命令,配置)