现在的位置: 首页 > 综合 > 正文

一些linux应用小技巧,网络相关,系统管理,shell,程序使用

2013年10月22日 ⁄ 综合 ⁄ 共 10513字 ⁄ 字号 评论关闭
 转自LinuxFans:http://www.linuxfans.org/nuke/modules.php?name=Forums&file=viewtopic&t=97710网络相关:

1、关于arp协议:

关于arp命令,注意其中的Flags,如果是C,表示是动态的,但是如果使用arp -s 来绑定的话则是显示M,是静态

所以后边每个侦都需要加入填充字符以达到以太网的最小长度要求60字节。

大多数的bsd实现把完成tcp连接请求的时间限制设置为75秒。

1byte=8bit

2、关于tcpdump

想输出点分十进制:tcpdump -n ***

想输出mac地址:tcpdump -e ***

抓到目标为A的包:tcpdump dst A

问题:如何使用Tcpdump显示抓到的包的长度,因为以太网包的最小长度为60,用packetyzer抓到48

3、Linux的路由重定向

/proc/sys/net/ipv4/conf/uall/send_redirects

/proc/sys/net/ipv4/conf/default/send_redirects

/proc/sys/net/ipv4/conf/eth0/send_redirects

4、如何修改Linux网卡的mtu

 (1) ifconfig eth0 mtu
1400        (使用系统都带的ifconfig)

 (2) ip link set eth0 mtu 1400     (使用系统都带的ip)

5、以Tomcat用户来启动tomcat

#su - tomcat -c "/usr/local/tomcat"

但是难道这样不需要输入密码吗?

6、修改网卡MAC地址:

#ifconfig eth0 down

#ifconfig eth0 hw ether 00:AA:BB:CC:DD:EE

#ifconfig eth0 up

7、在Linux上释放所有arp:

#arp -d -a

8、Linux上添加路由

添加到某网段的路由:route add -net desIP rouIP dev eth0

添加到某ip的路由:  route add -host desIP rouIP dev eth0

9、关于TCP_WRAPPERS

这个跟xinetd有关系...而现在一般使用standalone模式...

10、关于dns的查询使用办法

nslookup

host

dig

11、关于ssh

scp

制造密钥

12、设置网卡为混杂模式

#ifconfig eth0 promisc

13、关于ip层的路由

路由器在查找路由表的时候,路由表有三种

1、特定主机 2、特定网络 3、默认路由

优先级依次递减,主机路由高于网络路由,网络路由高于默认路由,同时也是由掩码最大匹配来决定优先级

13、修改Linux网卡为混杂模式以sniff

#ifconfig eth0 promisc

虽然说是可以抓获所有的包,但是这种是否捕获或分析抓到的包是由os决定是否接收的,也就是说并不能真正的...

14、关闭Linux Kernel的路由重定向功能

在/etc/sysctl.conf中加入如下行:

net.ipv4.conf.all.send_redirects = 0

net.ipv4.conf.default.send_redirects = 0

net.ipv4.conf.eth0.send_redirects = 0

net.ipv4.conf.eth1.send_redirects = 0

15、关于netstat -rn中的flags的解释

U 该路由可以使用。

G 该路由是到一个网关(路由器)。如果没有设置该标志,说明目的地是直接相连的。

H 该路由是到一个主机,也就是说,目的地址是一个完整的主机地址。如果没有设置该

标志,说明该路由是到一个网络,而目的地址是一个网络地址:一个网络号,或者网

络号与子网号的组合。

D 该路由是由重定向报文创建的。

M 该路由已被重定向报文修改。

S 该路由是静态路由

16.查询计算机的NETBIOS名

nbtscan -r 192.168.1.0/24

Scans the whole C-class network.

nbtscan 192.168.1.25-137

Scans a range from 192.168.1.25 to 192.168.1.137

nbtscan -v -s : 192.168.1.0/24

Scans C-class network. Prints results in script-friendly

format using colon as field separator.

Produces output like that:

192.168.0.1:NT_SERVER:00U

192.168.0.1:MY_DOMAIN:00G

192.168.0.1:ADMINISTRATOR:03U

192.168.0.2:OTHER_BOX:00U

...

nbtscan -f iplist

Scans IP addresses specified in file iplist.

17查询NETBOIS名称的计算机IP

nmblookup 192.168.0.1

18发送消息到NT机子

smbclient -M NETBIOS

19图形界面显示嗅探

sniffit -i

系统管理:

1、关于sysctl:

其实/etc/sysctl.conf对应的是/proc/sys/目录...

例如要修改/proc/sys/net/ipv4/ip_default_ttl的话,就修改/etc/sysctl.conf文件如下...

添加一行为:

net.ipv4.ip_default_ttl=255,也就是把文件夹变成小数点就可以啦

然后执行一次

#sysctl -p

就可以生效啦。

2、如何使用date修改系统时间:

$ date 1124170004

此命令将日期设置为 2004 年 (04) 11月 24 日 (1124) 17时 (1700)。

#hwclock写入bios

3、查看Linux分区

#fdisk -l

或者#parted

(parted)print

这样可以看到各个分区的类型及大小,不过这两个看到的结果并非相同

#cat /proc/partitions

查看分区卷标:

#e2label /dev/hdXn

3、修改系统时间

date -s "2003-04-14 cst",cst指时区,时间设定用date -s 18:10

修改后执行clock -w 写到CMOS

4、如何查看当前运行级别

#runlevel

或者

#who -r

5、修改主机名,ip设定

主要是三个文件(1)/etc/sysconfig/network-scripts/ifcfg-eth0

(2)/etc/hosts

(3)gateway设定:/etc/sysconfig/network

然后 service network restart;
示例环境:

OS: FC2
NIC: eth0
host name: fc2
ip: 192.168.0.20/24
default gateway: 192.168.0.254

  • 修改ip地址
    即时生效:
    # ifconfig eth0 192.168.0.20 netmask 255.255.255.0
    启动生效:
    修改/etc/sysconfig/network-scripts/ifcfg-eth0
  • 修改default gateway
    即时生效:
    # route add default gw 192.168.0.254
    启动生效:
    修改/etc/sysconfig/network-scripts/ifcfg-eth0
  • 修改dns
    修改/etc/resolv.conf
    修改后可即时生效,启动同样有效
  • 修改host name
    即时生效:
    # hostname fc2
    启动生效:
    修改/etc/sysconfig/network

6、在SCO上scosh不能telnet到Linux,要修改TERM

#export TERM=ANSI

7、用sysctl -a查看/proc/sys/下各个值

8、查询22端口正运行什么程序

#lsof -i :22

9、使退出登陆后程序继续运行:

# disown

或者是

nohup command &

10、Linux共有几种类型的文件:

d 目录。

l 符号链接(指向另一个文件)。

s 套接字文件。

b 块设备文件。

c 字符设备文件。

p 命名管道文件。

- 普通文件,或者更准确地说,不属于以上几种类型的文件。

11、针对文件的权限:

r 读权限。

w 写权限。

x 执行权限。

s 文件属主和组set-ID。

t 粘性位*。

l 给文件加锁,使其他用户无法访问。

12、redhat的版本如何判断

#cat
/proc/version          (如何怎么修改使系统启动后就为默认的Jintao Linux v2.0)

#cat /etc/redhat-release

#cat /etc/issue

13、使用md5sum来校验文件

#md5sum isofile > hashfile

#md5sum -c hashfile

14、查看硬盘的使用情况

#df -k  以k为单位

#df -m  以m为单位

#df -h  以人性化单位显示

15、查看目录的大小

#du -sh dirname

-s 仅仅显示总计

-h 显示人性化的信息

16、字符模式下设置环境变量

#export 变量名=变量值

17、系统默认的suid/sgid程序

/usr/bin/passwd

如果不让用户自己有权限修改自己密码,可以把其s位去掉

/usr/sbin/userhelper

/usr/sbin/userisdnctl

/usr/sbin/usrnetctl

/sbin/pam_timestamp_check

/sbin/unix_chkpwd

/sbin/pwdb_chkpwd

18、关于grub

重新安装一次grub

#grub-install /dev/hda1

19、关于pam

/etc/pam.d

20、自动化任务  cron,at,batch

系统管理员通过cron.deny和cron.allow来禁止和允许用户拥有自己的crontab文件...

crontab的格式:  分 时 日 月 星期 要运行的命令(注意使用的命令必须是绝对路径)

crontab -e 编辑

crontab -r 删除

crontab -u user 用某用户来执行

crontab -l 列出当前crontab内容

at也通过/etc/at.allow和at.deny文件空子后哪些用户可以使用at命令,哪些不行

21、创建文件时即规定日期

#touch -t 11091531
file          
//11.09日15:31分

22、物理安全--->防止ctrl_alt_del重新启动服务器

#vi /etc/inittab

# Trap CTRL-ALT-DELETE

#ca::ctrlaltdel:/sbin/shutdown -t3 -r now

将ca这行给注释掉...

23、判断当前登陆用户

echo $LOGNAME

echo $USER

id

whoami

who am i

logname

24、关于用户登陆终端的显示:

如果使用网络登陆,则TTY显示为如下:

USER     TTY    
FROM            
LOGIN@   IDLE   JCPU   PCPU  WHAT

root     pts/0  
169.254.1.2       6:57am  0.00s
25.28s  0.03s  w

如果使用本地登陆,则显示如下:

root     tty1   
-              
12:36pm  3.00s  0.43s  0.43s  -bash

25、实时查看系统所使用内存

#free -b -s5

5秒循环一次...

26./configure

./configure生成Makefile时查看帮助

./configure --help
27 关于man

1 用户级命令和应用程序

2 系统调用和内核出错代码

3 库调用

4 设备驱动和网络协议

5 标准文件格式

6 游戏和演示

7 各种文件和文档

8 系统管理命令

9 少见隐秘的内核规范和接口

28.更改终端欢迎信息

vi /etc/motd

29.增强cd功能:

cd ()

{

        builtin cd "$@"

        es=$?

         [ $es -eq 0 ] && echo "$OLDPWD  ------------> $PWD"

        return $es

}

将上面这段加入到~/.bashrc中,再用cd时就会告诉你从哪来,到哪去。

[root@LFS ~]#cd /etc

/root  ------------> /etc

[root@LFS etc]#

30.删除特殊文件:

删除以-开头的文件:rm -- -file  --表示这是rm最后一个参数

删除乱码文件:一些乱码文件,无法打出它的文件名,通常在gui下也无法删除它

这时可以使用下面这个方法删除:

[root@LFS ~]#ls >ls.list 将乱码文件名写入到ls.list中

[root@LFS ~]#vi ls.list 编辑ls.list,首行加上:

#!/bin/bash  将ls.list变为shell script

去掉不想删除的文件,在乱码文件名前加上rm:

rm asdasd (假设asdasd为乱码)

[root@LFS ~]#chmod +x ls.list

[root@LFS ~]#./ls.list 

rm: remove regular  file `asdasd'? y

[root@LFS ~]#

Shell相关:

1、find命令常见使用方法:

查找名字为conf的目录

#find /目录  -type  d -name conf

注意type可能为b,c,d,l等...

查找文件权限为755的文件

#find /目录 -perm 755 -print

如果用八进制,则可以用

#find /目录 -perm -007 -print  (跟chmod里的表示方法相同)

查找文件属主为kt的文件

#find /目录 -user kt -print

查找group为kt的文件

#find /目录 -group kt -print

查找名字为file的文件

#find /目录 -name file

查找大小为0的文件

#find /目录 -size 0

忽略某个目录:

#find /目录 -name "/目录名" -prune -o -print

查找属主帐户已经被删除的文件:

#find /目录 -nouser -print

按更改时间查找文件

#find /目录 -mtime -5 -print  单位是5,查找更改时间在5日以内的文件

查找更改时间在3日以内的文件

#find /目录 -mtime +3 -print

查找更改时间比file1新但比file2旧的文件

#find /目录 file1 ! -newer file2 -exec ls -l {} /;

不仅查询根目录,而且查询子目录

#find /目录 -name file -depth -print

只在当前文件系统内部查询,而不进入其他文件系统

#find /目录 -name file -mount -print

用exec对查找出的文件进行操作

#find /目录 -type f -exec ls -l {} /;     //-exec ls
-l {} /;则表示执行"ls -l"的操作.

用exec安全模式,在删除前有提示

#find /目录 -name "*.log" -mtime +5 -ok rm {} /; 
//这样在删除文件前会先提示

根据inode号来取得硬链接

#find /目录 -inum inode号

对find找出的文件执行操作可以使用-exec 执行指令 {} /;也可以使用 | xargs 指令

2、关于if语句的test

EXPRESSION1 -a EXPRESSION2 两条语句都为true

EXPRESSION1 -o EXPRESSION2 两条语句任意一条为true

[-n]
STRING              
String串非零

-z
STRING                
串的长度为0

STRING1 = STRING2        
两个串相等

STRING1 != STRING2        两个串不相等

INTEGER1 -eq INTEGER2    
两个整数相同          
           equal

INTEGER1 -ge INTEGER2    
INTEGER1大于等于INTEGER2       
  greater equal

INTEGER1 -gt INTEGER2    
INTEGER1大于INTEGER2        
  greater than

INTEGER1 -le INTEGER2    
INTEGER1小于等于INTEGER2       
  less equal

INTEGER1 -lt INTEGER2    
INTEGER1小于INTEGER2        
     less than

INTEGER1 -ne INTEGER2    
INTEGER1不等于INTEGER2         not
equal

FILE1 -ef
FILE2          
file1跟file2有同个设备和inode号   equal file

FILE1 -nt
FILE2          
file1比file2新         
          newer than

FILE1 -ot
FILE2          
file1比file2老         
older than

-b file        
file存在也是块设备         
block

-c file        
file存在且是字符设备         
character

-d file        
file存在且是文件夹         
directory

-e file        
file存在          
   exist

-f file        
file存在并是个普通文件

-g
file                  
file存在并是SGID

-h file        
file存在并是个符号链接

-G file        
file存在并被有效的组拥有

-k file          file存在并有s位

-L file        
file存在并是个符号链接

-O
file                  
file存在并被有效用户拥有

-p file        
file存在并是个named pipe

-r
file               
file存在并可读

-s
file                  
file存在并不为0(greater than 0)

-S file        
file存在并是个socket

-t [FD]          文件描述FD
?????  这个主要是为了测试shell是否是交互式...

-u file       

file存在并且s位设置过

-w file         
file存在并可写

-x file          file存在并可执行

3、关于grep的选项

常用的grep选项有:

-c 只输出匹配行的行数。

-i 不区分大小写(只适用于单字符)。

-h 查询多文件时不显示文件名。

-l 查询多文件时只输出包含匹配字符的文件名。

-n 显示匹配行及行号。

-s 不显示不存在或无匹配文本的错误信息。

-v 显示不包含匹配文本的所有行。

-w 精确匹配某个单词

'/<abc/>' file 精确匹配file文件中的abc字符

精确匹配的三种grep:

1 grep -w "abc" data.f

2 grep '/<48/>' data.f

3 grep "48/>" data.f

常用grep,   cniv

grep在使用正则表达式的时候,在匹配策略外面最好用单引号来括上

4、关于unset

#firstVar=first

#set

#unset firstVar

5、awk的使用...

精确匹配第三个字符为48的行

awk '{ if(~/^48$/ ) print }' test.txt  
//注意这里尽管用正则表达式来匹配,但不能用//^48$/,而是可以直接使用^48$

如果是匹配第三个字符包含48的行

awk '{ if(~/48/) print }' test.txt

awk中正则表达式中使用.来表示单个字符,但是shell中使用?匹配单个字符。

用|表示1或2的关系,但只取一个,使用|时,必须使用圆括号括起来,如

awk '~/(Yellow|Brown)/' test.txt

用&&表示与的关系,&&的两天最好也要用括号括起来,如

awk '{ if(=="fist" && =="second") print }' test.txt

用||表示或的关系,可以取一个,也可以取两个

awk '{ if (=="forth" || =="fifth") print }' test.txt

同时匹配两个条件的使用:

awk '条件1 &&  条件2 { print $xxx }'

6、shell中`的作用

表达不清楚了...如

test=`echo $LOGNAME`

则echo $test的结果为echo $LOGNAME的结果...

7、tr的使用

将test.txt中的小写字母转换成大写

tr "[a-z]" "[A-Z]" < test.txt

不能用 tr "[a-z]" "[A-Z]" < test.txt

8、关于shell中控制字符对应的二进制码

 字符      代码

 ^      136

 ^M      015

 tab      011

 ^Z      032

响铃      007

 /n

空格      040

9、cat的用法

cat -v test.txt    显示转换字符

10、关于参数

$# 传递到脚本的参数个数

$* 以一个单字符串显示所有向脚本传递的参数。与位置变量不同,此选项参数可超过9个

$$ 脚本运行的当前进程ID号

$! 后台运行的最后一个进程的进程ID号

$@ 与$#相同,但是使用时加引号,并在引号中返回每个参数

$- 显示shell使用的当前选项,与set命令功能相同

$? 显示最后命令的退出状态。0表示没有错误,其他任何值表明有错误。

11、关于sed

sed -n '2p' test.txt  //打印test.txt中第二行的内容

sed -n '1,3p' test.txt //打印test.txt中第一到第三行的内容  单引号有无无所谓,","表示行到行

sed -n '4,/The/p' test.txt  //打印第四行中匹配The

sed -n '1,$p' quote.txt   //打印整个文件

sed 's/a/b/8'   //替换每行中匹配第8a,改为b

sed = filename | sed 'N;s//n/:/' filename  

正则表达式:

字符类 描述

[:alnum:] 字母数字 [a-z A-Z 0-9]

[:alpha:] 字母 [a-z A-Z]

[:blank:] 空格或制表键

[:cntrl:] 任何控制字符

[:digit:] 数字 [0-9]

[:graph:] 任何可视字符(无空格)

[:lower:] 小写 [a-z]

[:print:] 非控制字符

[:punct:] 标点字符

[:space:] 空格

[:upper:] 大写 [A-Z]

[:xdigit:] 十六进制数字 [0-9 a-f A-F]

利用sed来定位

xx为一行号,如1

x,y 表示行号范围从x到y,如2,5表示从第2行到第5行

/pattern/ 查询包含模式的行。例如/ disk /或/[a-z]/

/pattern/pattern/ 查询包含两个模式的行。例如/ disk/disks/

pattern/,x 在给定行号上查询包含模式的行。如/ ribbon / , 3

x,/pattern/ 通过行号和模式查询匹配行。3 . / vdu /

x,y! 查询不包含指定行号x和y的行。1 , 2 !

12、关于test

可以使用如下命令判断文件是否可写

(1)#[ -w fruit.txt ]    //注意其中空格

#echo $?

(2)#test -w fruit.txt

#echo $?

这里根据返回的状态来判断是否可写,如果返回0,则表示可写。0就表示成功...

13、关于expr

首先请注意,必须是整数计算...

#expr 10+10 结果为10+10

#expr 10 + 10则结果为20

用乘号时需要用/转义..

14 shell中的系统变量

$LOGNAME   当前用户的名字...

15 一般需要用/屏蔽的字符

$.'"*[]^|0/+?

16 关于正则表达式

匹配某字符出现次数

pattern/ 匹配模式出现n次。

pattern/ 匹配模式出现最少n次。

pattern/ 匹配模式出现n到m次之间,n , m为0 - 2 5 5中任意整数。

17 正则表达式

用来匹配IP:

'[0-9][0-9][0-9].[0-9][0-9][0-9].[0-9][0-9][0-9].[0-9][0-9][0-9]'

等同

'[0-9]//.[0-9]/'

18 使用gpg校验

#gpg --verify xxx.asc

程序使用:

关于vim的使用:

替换当前行的某个单词    :s/old/new/g

替换全文所有符合的单词  :%s/old/new/g

替换全文所有符合的单词并让用户确认: :%s/old/new/gc

:set ai        自动缩进

:syntax on     语法高亮
:set nu        显示行号

:set showmatch 自动匹配{}[]()

:set all       显示所有选项。

:ce            光标所在文本居中

:le            光标所在文本左对齐

:ri            光标所在文本右对齐

:% ce          全文居中

:1,10 ce      1--10行居中

:set paste     粘贴模式,此时向vi中复制格式化后的文本,原样的贴上,vi不会对其缩进

:n   :N       vi同时编辑多个文件时(vi file1 file2),切换文件,n(向后) N(向前)

 

把文件设成不可改变的只要用下面的命令:

[root@deep]# chattr +i /etc/inetd.conf

这样可以避免“inetd.conf”文件的任何改变(意外或是别的原因)。一个有“i”属性的文件是不能被改动的:不能删除或重命名,不能创建这个文件的链接,不能往这个文件里写数据。只有系统管理员才能设置和清除这个属性。如果要改变inetd.conf文件,你必须先清除这个不允许改变的标志:

[root@deep]# chattr -i /etc/inetd.conf

 

抱歉!评论已关闭.