Linux-Unix系统操作与维护常用命令

来源:互联网 发布:在哪里可以投诉淘宝网 编辑:程序博客网 时间:2024/05/01 19:00

Linux-Unix系统操作与维护常用命令

(关注常用、实用目录)

                       

 

1 Linux下挂载新建硬盘的方法

1.1新硬盘分区及挂载

进入系统后,用root用户操作: fdisk -l 会看到有一块新的设置,如果你先前有一块硬盘(sda, sda1...),新加的这块应该是(/dev/sdb)如果还有其它硬盘就会依次递增(/dev/sdc, /dev/sdd....)。

1.2 分区

# fdisk /dev/sdb
进入fdisk模式:
Command (m for help):m //查看fdisk命令帮助
Command (m for help):n //创建新分区
Command action:
e extended //输入e为创建扩展分区
p primary partition (1-4)     //输入p为创建主分区,这里我们选择p
Partion number(1-4):1     //第一个扩展分区,按需求可以最多分4个主分区
First Cylinder(1-1014,default 1): 1 //第一个主分区起始的磁盘块数,可以选择默认值
Last cylindet or +siza or +sizeM or +sizeK: +1024MB //定义该分区的大小,如果按默认(按回车)即是使用全部可用存储额,也可以是用M或m单位结尾的数字(大写M是大B的意思,如果输入1M实际上是X8也就是8m的空间),这样我们就创建完一个分区,如果要创建更多分区可以照上面的步骤继续创建。所有分区创建完后用w保存分区。
Command (m for help): w
The partition table has been altered!
保存完成后重启服务器,可以用#fdisk -l 命令检查刚刚所建分区,可以在返回结果中确认/dev/sdb1的信息。

1.3格式化该新添加的分区

键入:mkfs -t ext3  /dev/sda3

格式化指定的分区,依次类推,现在的系统大部分都是 ext3 格式

1.4挂载该分区

手动挂载,则键入:mount /dev/sda3 /home/work/       

 "表示将该新分区挂载到/home/work/这个目录下面"

开机自动挂载,则修改/etc/fstab文件,在这个文件里面添加一行:

/dev/sda3      /home/work      ext3   defaults,       1       2    如:

vi /etc/fstab

LABEL=/                /                      ext3     defaults        1 1
tmpfs                  /dev/shm             tmpfs   defaults        0 0
devpts                 /dev/pts              devpts gid=5,mode=620 0 0
sysfs                  /sys                   sysfs    defaults        0 0
proc                   /proc                  proc     defaults       0 0
LABEL=SWAP-sda2  /swap           swap    defaults        0 0
/dev/sda3           /home/work            ext3   defaults        1 2

fstab中存放了与分区有关的重要信息,其中每一行为一个分区记录,每一行又可分为六个部份,下面以/dev/hda7 / ext2 defaults 11为例逐个说明:

  1. 第一项是您想要mount的储存装置的实体位置,如hdb或如上例的/dev/hda7。

  2. 第二项就是您想要将其加入至哪个目录位置,如/home或如上例的/,这其实就是在安装时提示的挂入点。

  3. 第三项就是所谓的local filesystem,其包含了以下格式:如ext、ext2、msdos、iso9660、nfs、swap等,或如上例的ext2,可以参见/prco/filesystems说明。

  4. 第四项就是您mount时,所要设定的状态,如ro(只读)或如上例的defaults(包括了其它参数如rw、suid、exec、auto、nouser、async),可以参见「mount nfs」。

  5. 第五项是提供DUMP功能,在系统DUMP时是否需要BACKUP的标志位,其内定值是0。

6. 第六项是设定此filesystem是否要在开机时做check的动作,除了root的filesystem其必要的check为1之外,其它皆可视需要设定,内定值是0。

 

2 Linux环境变量配置文件(常用)

查看系统当前的环境变量:env

查看变量的值:echo $变量名

设置环境变量: export 变量名=Hello!

清除环境变量:unset $变量名

常用预定义环境变量:

PATH 当前用户的主目录

HOME 当前用户的可执行文件搜索路径

LANG 系统使用的默认语言

SHELL 系统默认的shell。

 

环境变量设置文件


   全局环境变量,对所有Linux用户有效,设置文件:/etc/profile、/etc/bashrc(bashksh对应的文件为/etc/kshrc
   用户环境变量,只对当前用户有效,设置文件为当前用户主目录(~)下的:.profile、.bash_profile、.bashrc(bashksh对应的文件为.ksh_profile.kshrc

登录shell:作为Linux用户登录到Linux操作系统,或者用su - username切换到其他用户,都为登录shell,环境变量也同时切换。

非登录shell,用su  username,即为非登录shell,环境变量仍为当前用户的环境变量。
    根据是否为登录shell,读取环境变量配置文件是不同的。

登录shell读取环境变量顺序:

/etc/profile > /etc/profile.d/*.sh> ~/.bash_profile> ~/.bashrc> /etc/bashrc
   非登录shell读取环境变量顺序:

~/.bashrc > /etc/bashrc> /etc/profile.d/*.sh 

环境变量更改后,在用户下次登陆时生效,如果想立刻生效,则可执行下面的语句:source .bash_profile或者 . .bash_profile

 

3 ls du df的用法(常用实用)

3.1 显示文件大小

ls -lrt--block-size=MB

ls 命令显示文件大小:

可以通过 block-size 参数,来显示文件的KB/MB/GB大小值

因为它们都是取近似值,所以最好是三者都用,这样获得的信息更准确。

 

[root@fullcent datastore]#ls -l--block-size=KB

total 3148813kB

[root@fullcent datastore]#ls -l--block-size=MB

total 3149MB

[root@fullcent datastore]#ls -l--block-size=GB

total 4GB

也可以加入h 参数,来显示大小:

[root@fullcent datastore]#ls -l

total 3075012

[root@fullcent datastore]# ls -lh

total 3.0G

 

3.2 查看文件数

查看当前目录下文件的个数

ls -l | grep"^-" | wc -l

查看当前目录下文件的个数,包括子目录里的。

ls -lR| grep"^-" | wc -l

查看某目录下文件夹(目录)的个数,包括子目录里的。

ls -lR| grep"^d" | wc –l

 

3.4 linux查看文件夹下文件的大小

du -sk/-sm 文件详细路径    例如:du -sm ./

3.5 查看文件系统空间

df -h

df -k

df -m

du -sk ./* | sort-n

找出目录的空间大小,按大小排序

一般在管理多文件是需要使用一些特殊排序方式

默认排序:du-sm|sort -n

按照列排序:du-sm|sort +n(列数) -n(倒序用-r)

 

4 Linux下grep命令(常用)

grep(General Regular Expression Parser,通用规则表达式分析程序)是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来。

它的使用语法为:

grep [选项] pattern [文件名]

. 匹配任意一个字符
* 匹配0 个或多个*前的字符
^ 匹配行开头
$ 匹配行结尾
[] 匹配[ ]中的任意一个字符,[]中可用 - 表示范围,
例如[a-z]表示字母a 至z 中的任意一个
\ 转意字符
命令中的选项为:
-b 显示块号
-c 仅显示各指定文件中包含模式的总行数
-i 模式中字母不区分大小写
-h 不将包含模式的文件名显示在该行上
-l 仅显示包含模式的文件名
-n 显示模式所在行的行号
-s 指定文件若不存在或不可读,不提示错误信息
-v 显示所有不包含模式的行

其中,pattern为所要匹配的字符串。如在/etc/passwd文件下查找包含“carey”字符的行:

grep carey/etc/passwd

要用好grep这个工具,其实就是要写好正则表达式,所以这里不对grep的所有功能进行实例讲解,只列几个例子,讲解一个正则表达式的写法。

grep 'test' d*

显示所有以d开头的文件中包含test的行。

ls -l | grep'^public'

通过管道过滤ls -l输出的内容,只显示以public开头的行。

后面的^字符强制grep命令只在每行的开头找public。整个搜索模式(pattern)用单引号括起来,使shell不理会它们。shell只将单引号去掉,将搜索模式送给grep命令。

grep -i 'helloworld' menu.h main.c

显示在menu.h和main.c文件中匹配“hello world”的行,忽略大小写。

例如:

grep'sample' -R * 

 

grep -v "^#" ./redis.conf

grep -v "^#" ./redis.conf | grep-v "^$" 

grep是文本过滤,-v选项是显示不包含匹配文本的行,^#表示以#开头的行.
grep -v ^#
表示不显示以#开头的行.
grep -v ^$
表示不显示空行.

5 Netstat 命令

Netstat 命令用于显示各种网络相关信息,如网络连接,路由表,接口状态 (Interface Statistics),masquerade 连接,多播成员(Multicast Memberships) 等等从整体上看,netstat的输出结果可以分为两个部分:

一个是Active Internet connections,称为有源TCP连接,其中"Recv-Q"和"Send-Q"指%0A的是接收队列和发送队列。这些数字一般都应该是0。如果不是则表示软件包正在队列中堆积。这种情况只能在非常少的情况见到。

另一个是Active UNIX domain sockets,称为有源Unix域套接口(和网络套接字一样,但是只能用于本机通信,性能可以提高一倍)。

Proto显示连接使用的协议,RefCnt表示连接到本套接口上的进程号,Types显示套接口的类型,State显示套接口当前的状态,Path表示连接到套接口的其它进程使用的路径名。

常见参数

lsof -i :port 查看指定端口运行的程序,同时还有当前连接

LISTENING:正在监听,只有tcp端口才可以这样(如果是udp的话,那么肯定是木马)

ESTABLISHED:正在共享,表示两者连接着(如果135端口这样的话,注意杀毒)

CLOSE_WAIT:有过连接,现在已经结束了

netstat -ntl

lsof -i :port 查看指定端口运行的程序,同时还有当前连接

LISTENING:正在监听,只有tcp端口才可以这样(如果是udp的话,那么肯定是木马)

ESTABLISHED:正在共享,表示两者连接着(如果135端口这样的话,注意杀毒)

CLOSE_WAIT:有过连接,现在已经结束了

netstat -ntl

 

netstat -nul  

-a (all)显示所有选项,默认不显示LISTEN相关

-t (tcp)仅显示tcp相关选项

-u (udp)仅显示udp相关选项

-n 拒绝显示别名,能显示数字的全部转化成数字。

-l 仅列出有在 Listen (监听) 的服務状态

-p 显示建立相关链接的程序名

-r 显示路由信息,路由表

-e 显示扩展信息,例如uid等

-s 按各个协议进行统计

-c 每隔一个固定时间,执行该netstat命令。

提示:LISTEN和LISTENING的状态只有用-a或者-l才能看到

实用命令实例

 

1. 列出所有端口 (包括监听和未监听的)

  列出所有端口 netstat -a

  列出所有 tcp 端口 netstat-at

  列出所有 udp 端口 netstat-au

2. 列出所有处于监听状态的 Sockets

只显示监听端口 netstat -l

只列出所有监听 tcp 端口 netstat -lt

只列出所有监听 udp 端口 netstat -lu

只列出所有监听 UNIX 端口 netstat -lx

3. 显示每个协议的统计信息

显示所有端口的统计信息 netstat -s

显示 TCP 或 UDP 端口的统计信息 netstat -st 或 -su

4. 在 netstat 输出中显示 PID 和进程名称 netstat-p

 netstat -pt

5. 在 netstat 输出中不显示主机,端口和用户名 (host, port or user)

netstat -an

6. 持续输出 netstat 信息

netstat -c

网络地址:http://www.cnblogs.com/ggjucheng/archive/2012/01/08/2316661.html

 

6 linux 查看系统信息命令(常用)

# cat /proc/meminfo

# uname -a # 查看内核/操作系统/CPU信息 

# head -n 1 /etc/issue# 查看操作系统版本 
# cat /proc/cpuinfo #
查看CPU信息 
# hostname #
查看计算机名 
# lspci -tv #
列出所有PCI设备 
# lsusb -tv #
列出所有USB设备 
# lsmod #
列出加载的内核模块 
# env #
查看环境变量资源 
# free -m #
查看内存使用量和交换区使用量 
# df -h #
查看各分区使用情况 
# du -sh <
目录名> #查看指定目录的大小 
# grep MemTotal /proc/meminfo # 查看内存总量 
# grep MemFree /proc/meminfo # 查看空闲内存量 
# uptime #
查看系统运行时间、用户数、负载 
# cat /proc/loadavg #
查看系统负载磁盘和分区 
# mount | column -t #
查看挂接的分区状态 
# fdisk -l #
查看所有分区 
# swapon -s #
查看所有交换分区 
# hdparm -i /dev/hda #
查看磁盘参数(仅适用于IDE设备
# dmesg | grep IDE #
查看启动时IDE设备检测状况网络 
# ifconfig #
查看所有网络接口的属性 
# iptables -L #
查看防火墙设置 
# route -n #
查看路由表 
# netstat -lntp #
查看所有监听端口 
# netstat -antp #
查看所有已经建立的连接 
# netstat -s #
查看网络统计信息进程 
# ps -ef #
查看所有进程 
# top #
实时显示进程状态用户 
# w #
查看活动用户 
# id <
用户名> # 查看指定用户信息 
# last #
查看用户登录日志 
# cut -d: -f1 /etc/passwd #
查看系统所有用户 
# cut -d: -f1 /etc/group #
查看系统所有组 
# crontab -l #
查看当前用户的计划任务服务 
# chkconfig
list #列出所有系统服务 
# chkconfig
list | grep on #列出所有启动的系统服务程序 
# rpm -qa #
查看所有安装的软件包 

 

7 Linux-Crontab计划任务入门详解

Cron简介
     cron是一个linux下的定时执行工具,可以在无需人工干预的情况下运行作业。

由于Cron 是Linux的内置服务,但它不自动起来,可以用以下的方法启动、关闭这个服务:
    /sbin/service crond start //启动服务
    /sbin/service crond stop //关闭服务
    /sbin/service crond restart //重启服务
    /sbin/service crond reload //重新载入配置


你也可以将这个服务在系统启动的时候自动启动,在/etc/rc.d/rc.local这个脚本的末尾加上:
    /sbin/service crond start
现在Cron这个服务已经在进程里面了,我们就可以用这个服务了。

 

任务调度的crond常驻命令
     crond 是linux用来定期执行程序的命令。当安装完成操作系统之后,默认便会启动此任务调度命令。

crond命令每分锺会定期检查是否有要执行的工作,如果有要执行的工作便会自动执行该工作。

1.linux任务调度的工作主要分为以下两类:
     *系统执行的工作:系统周期性所要执行的工作,如备份系统数据、清理缓存
     *个人执行的工作:某个用户定期要做的工作,例如每隔10分钟检查邮件服务器是否有新信,这些工作可由每个用户自行设置。

2.直接用crontab命令编辑
  cron服务提供crontab命令来设定cron服务的,以下是这个命令的一些参数与说明:
  crontab -u //设定某个用户的cron服务,一般root用户在执行这个命令的时候需要此参数
  crontab -l //列出某个用户cron服务的详细内容
crontab -r //删除 个用户的cron服务
  crontab -e //编辑某个用户的cron服务
  比如说root查看自己的cron设置:crontab -u root -l
  再例如,root想删除fred的cron设置:crontab -u fred -r
  在编辑cron服务时,编辑的内容有一些格式和约定,输入:crontab -u root -e
  进入vi编辑模式,编辑的内容一定要符合下面的格式:*/1 * * * * ls >> /tmp/ls.txt

3.cron文件语法:
         分    小时     日      月      星期        命令
       0-59   0-23  1-31   1-12     0-6    command     (取值范围,0表示周日一般一行对应一个任务)
4.记住几个特殊符号的含义:
       "*"代表取值范围内的数字,
       "/"代表"每",
       "-"代表从某个数字到某个数字,
       ","分开几个离散的数字

 

任务调度设置文件的写法
     可用crontab -e命令来编辑,编辑的是/var/spool/cron下对应用户的cron文件,

也可以直接修改/etc/crontab文件
具体格式如下:
      Minute  Hour  Day Month  Dayofweek   command
       分钟     小时   天    月       天每星期      命令
每个字段代表的含义如下:
     Minute           每个小时的第几分钟执行该任务
     Hour              每天的第几个小时执行该任务
     Day                每月的第几天执行该任务
     Month            每年的第几个月执行该任务
     DayOfWeek       每周的第几天执行该任务
     Command        指定要执行的程序
在这些字段里,除了“Command”是每次都必须指定的字段以外,其它字段皆为可选字段,可视需要决定。

对于不指定的字段,要用“*”来填补其位置。

举例如下:

5        *      *       *    *    ls    指定每小时的第5分钟执行一次ls命令
30      5       *       *    *    ls    指定每天的 5:30 执行ls命令
30      7       8       *    *    ls    指定每月8号的7:30分执行ls命令
30      5       8       6    *    ls    指定每年的6月8日5:30执行ls命令
30      6       *       *    0    ls    指定每星期日的6:30执行ls命令[注:0表示星期天,1表示星期1,以此类推,也可以用英文来表示,sun表示星期天,mon表示星期一等。]
30      3       10,20  *    *    ls    每月10号及20号的3:30执行ls命令[注:“,”用来连接多个不连续的时段]
25      8-11  *      *    *     ls    每天8-11点的第25分钟执行ls命令[注:“-”用来连接连续的时段]
*/15   *       *      *    *     ls    每15分钟执行一次ls命令 [即每个小时的第0 1530 45 60分钟执行ls命令 ]
30      6       */10   *    *    ls    每个月中,每隔10天6:30执行一次ls命令[即每月的1、11、21、31日是的6:30执行一次ls命令。 ]
50      7       *       *    *     root    run-parts     /etc/cron.daily  每天7:50以root 身份执行/etc/cron.daily目录中的所有可执行文件
 [ 注:run-parts参数表示,执行后面目录中的所有可执行文件。 ]


1.新增调度任务
   
新增调度任务可用两种方法:
     1
、在命令行输入: crontab-e然后添加相应的任务,wq存盘退出。
     2
、直接编辑/etc/crontab文件,即vi /etc/crontab,添加相应的任务。
2.查看调度任务
     crontab -l //列出当前的所有调度任务
     crontab -l -u jp  //列出用户jp的所有调度任务
3.删除任务调度工作
     crontab -r   //删除所有任务调度工作
4.任务调度执行结果的转向
     1:每天530执行ls命令,并把结果输出到/jp/test文件中
         30 5 * * * ls>/jp/test 2>&1
     注:2>&1表示执行结果及错误信息。


编辑/etc/crontab 文件配置cron  
  cron服务每分钟不仅要读一次/var/spool/cron内的所有文件,还需要读一次/etc/crontab,因此我们配置这个文件也能运用cron服务做一些事情。

     用crontab配置是针对某个用户的,而编辑/etc/crontab是针对系统的任务。此文件的文件格式是:  
  SHELL=/bin/bash  
  PATH=/sbin:/bin:/usr/sbin:/usr/bin  
  MAILTO=root //如果出现错误,或者有数据输出,数据作为邮件发给这个帐号  
  HOME=/ //使用者运行的路径,这里是根目录  
  # run-parts  
  01   *   *   *   *     rootrun-parts /etc/cron.hourly         //每小时执行/etc/cron.hourly内的脚本  
  02   4   *   *   *    root run-parts /etc/cron.daily          //每天执行/etc/cron.daily内的脚本  
  22   4   *   *   0    root run-parts /etc/cron.weekly       //每星期执行/etc/cron.weekly内的脚本  
  42   4   1   *   *    root run-parts /etc/cron.monthly     //每月去执行/etc/cron.monthly内的脚本  
  大家注意"run-parts"这个参数了,如果去掉这个参数的话,后面就可以写要运行的某个脚本名,而不是文件夹名了

 

**************注意*********************

脚本在手动执行的情况下,没有问题,但是使用crontab调用的时候,会报环境变量为空,找不到的问题。

原因:这其实是crontab的bug,不会缺省从profile文件中读取环境变量的原因导致的。

解决办法:

 

方法1:手动export

export HADOOP_HOME=/data/application/hadoop

export SQOOP_HOME=/data/application/sqoop

 

方法2:执行一些profile

. /etc/profile(注意点后有个空格)

 

8 Linuxfind命令(常用实用)

8.1 find命令用法

find / -name access_log 2>/dev/null
find /etc -name ‘*srm*’
find / -amin -10 # 查找在系统中最后10分钟访问的文件
find / -atime -2 # 查找在系统中最后48小时访问的文件
find / -mmin -5 # 查找在系统中最后5分钟里修改过的文件
find / -mtime -1 #查找在系统中最后24小时里修改过的文件
find / -cmin -5 # 查找在系统中最后5分钟里被改变状态的文件
find / -ctime -1 #查找在系统中最后24小时里被改变状态的文件
find / -user reda #查找在系统中属于fred这个用户的文件
find / -not -user reda #查找在系统中不属于FRED这个用户的文件
find / -group redagrp # 查找在系统中属于redagrp组的文件
find / -gid 501 #查找系统中属于组id为501的文件
find / -user fred -a -group redagrp
find / -user reda -o -user tracy
find / -nouser #查找在系统中属于作废用户的文件
find / -empty # 查找在系统中为空的文件或者为空的文件夹
find / -false #查找系统中总是错误的文件
find / -size +5k #查找系统中大于5k字节的文件
find / -size +5c #查找系统中大于5字节的文件
find / -perm +6000
find / -type b

文件类型:
b   块(缓冲)设备.
c   字符设备.
d   目录.
p   有名管道(FIFO).
f    规则文件.
l    符号链结.
s    SOCKET.
find / -maxdepth 2 -name fred
find /tmp -size +10000000c -and -mtime +2
find / -user reda -or -user tracy
find /tmp ! -user reda
find / -name "httpd.conf" -ls
find / -user reda -exec ls -l {} \;
find / -user reda -ok #确认后执行
find / -user reda | xargs ls -l 

8.2 find命令使用经验

find pathname  -options [-print-exec -ok]
pathname find命令所查找的目录路径。例如用.来表示当前目录,用/来表示系统根目录。
  -print find命令将匹配的文件输出到标准输出。
  -exec find命令对匹配的文件执行该参数所给出的shell命令。
  相应命令的形式为'command'{} \;,注意{}和\;之间的空格。
  -ok和-exec的作用相同,只不过以一种更为安全的模式来执行该参数所给出的shell命令,在执行每一个命令之前,都会给出提示,让用户来确定是否执行


文件状态判断:
-mtime: 指定时间文件内容被修改过
-ctime: 指定时间文件权限被修改过
-atime: 指定时间文件被读取过

找出3天“以前”被修改过的文档
# find /var/log/ -mtime +3 -type f -print

找出3天“”被修改过的文档
# find /var/log/ -mtime -3 -type f -print

找出3被修改过的文档.
# find /var/log/ -mtime 3 -type f -print
或这样写:
#find /var/log/ -mtime +2 -mtime -4 -type f -print

注:访问过用amin,修改过用mmin,文件状态改变过用cmin
精确到分钟的用amin,mmin,cmin,精确到天的用atime,mtime,ctime

 

8.3 find用法小结

1. 通过文件的特征查找:
===============================
1)
按文件名
   find /    -name httpd.conf
   find /usr -name httpd.conf
   find /etc -name '*srm*'

2) 按大小
   find / -size 1500c      # 查找文件大小为1,500 bytes的文件,字符 c 表明这个要查找的文件的大小是以bytes为单位。
   find/ -size +10000000c  # "+”是表示要求系统只列出大于指定大小的文件,  "-”表示小于
   find / -empty           # 查找在系统中为空的文件或者文件夹

   -size:表示文件大小,+表示大于某个数,-表示小于某个数。c表示单位是字节,你可以将c换成k,M,G。

3)
按时间
   find / -amin -10        #
查找在系统中最后10分钟访问的文件
   find / -atime -2        # 查找在系统中最后48小时访问的文件
   find / -mmin -5         # 查找在系统中最后5分钟里修改过的文件
   find / -mtime -1        # 查找在系统中最后24小时里修改过的文件
   find / -cmin -5         # 查找在系统中最后5分钟里被改变状态的文件
   find / -ctime -1        # 查找在系统中最后24小时里被改变状态的文件
     访问过用amin,修改过用mmin,文件状态改变过用cmin
  精确到分钟的用amin,mmin,cmin,精确到天的用atime,mtime,ctime
  在5分钟之内的用-5,在5分钟以上的用+5
4)
按用户
   find / -user fred       #
查找在系统中属于FRED这个用户的文件
   find / -group cat       # 查找在系统中属于 groupcat的文件
   find / -nouser          # 查找在系统中属于作废用户的文件
  5) 其他
   -false 查找系统中总是错误的文件
   -fstype type 查找系统中存在于指定文件系统的文件,例如:ext2 .
   -gid n 查找系统中文件数字组 ID 为 n的文件
   -group gname 查找系统中文件属于gnam文件组,并且指定组和ID的文件

8.4 findxargs的用法

(1) find . -type f -exec ls -l {} \;
解释:查找当前路径下的所有普通文件,并把它们列出来。
(2)find logs -type f -mtime +5 -exec rm {} \;
解释:删除logs目录下更新时间为5日以上的文件。
(3)find . -name "*.log" -mtime +5 -ok rm {} \;
解释:删除当前路径下以。log结尾的五日以上的文件,删除之前要确认。
(4) find ~ -type f -perm 4755 -print
解释:查找$HOME目录下suid位被设置,文件属性为755的文件打印出来。

说明: find在有点系统中会一次性得到将匹配到的文件都传给exec,但是有的系统对exec的命令长度做限制,就会报:”参数列太长“,这就需要使用xargsxargs是部分取传来的文件。

(5)find / -type f -print |xargs file
解释:xargs测试文件分类
(6)find . -name "core*" -print|xargs echo "">/tmp/core.log
解释:将core文件信息查询结果报存到core。log日志。
(7)find / -type f -print | xargs chmod o -w
(8)find . -name * -print |xargs grep "DBO" 

 

9 Ftp应用命令

下载文件

  下载文件通常用get和mget这两条命令。

a) get 

  格式:get [remote-file] [local-file]

  将文件从远端主机中传送至本地主机中.

  如要获取服务器上E:/rose/1.bmp,则

  ftp> get /rose/1.bmp 1.bmp (回车)

b) mget

  格式:mget [remote-files]

  从远端主机接收一批文件至本地主机.

  如要获取服务器上E:/rose/下的所有文件,则

  ftp> cd /rose

  ftp> mget *.* (回车)

  注意:文件都下载到了linux主机的当前目录下。比如,在 /root/yint下运行的ftp命令,则文件都下载到了/root/yint下。

上传文件

  a) put

  格式:put local-file [remote-file]

  将本地一个文件传送至远端主机中.

  如要把本地的1.bmp传送到远端主机E:/rose,并改名为333.bmp

  ftp> put 1.bmp /rose/333.bmp (回车)

  b) mput

  格式:mput local-files

  将本地主机中一批文件传送至远端主机.

  如要把本地当前目录下所有bmp文件上传到服务器E:/rose 下

  ftp> cd /rose (回车)

  ftp> mput *.bmp (回车)

  注意:上传文件都来自于主机的当前目录下。比如,在 /root/yint下运行的ftp命令,则只有在/root/yint下的文件linux才会上传到服务器E:/rose 下。


断开连接

bye:中断与服务器的连接。

  ftp> bye (回车)

 

ls 列出远程机的当前目录 
cd 在远程机上改变工作目录 
lcd 在本地机上改变工作目录 
ascii 设置文件传输方式为ASCII模式 
binary 设置文件传输方式为二进制模式 
close 终止当前的ftp会话 
hash 每次传输完数据缓冲区中的数据后就显示一个#号 
get(mget)从远程机传送指定文件到本地机 
put(mput)从本地机传送指定文件到远程机 
open 连接远程ftp站点 
断开与远程机的连接并退出ftp 
? 显示本地帮助信息 
! 转到Shell中  

10 Linuxvi进行字符替换(常用实用)

Linux环境下vi/vim 可以使用 :s 命令来替换字符串。以前只会使用编辑软件进行替换,今天发现该命令有很多种写法(vi 真是强大啊,还有很多需要学习),记录几种在此,方便以后查询。

:s/well/good/ 替换当前行第一个 well为 good

:s/well/good/g 替换当前行所有 well 为 good

:n,$s/well/good/ 替换第 n 行开始到最后一行中每一行的第一个 well 为 good

:n,$s/well/good/g 替换第 n 行开始到最后一行中每一行所有 well 为 good

n 为数字,若 n 为 .,表示从当前行开始到最后一行

:%s/well/good/(等同于:g/well/s//good/)替换每一行的第一个 well 为 good

:%s/well/good/g(等同于:g/well/s//good/g)替换每一行中所有 well 为 good

可以使用 # 作为分隔符,此时中间出现的 / 不会作为分隔符

:s#well/#good/# 替换当前行第一个well/ 为 good/

:%s#/usr/bin#/bin#g

可以把文件中所有路径/usr/bin换成/bin

1. 基本的替换 

:s/vivian/sky/ 替换当前行第一个vivian 为 sky 

:s/vivian/sky/g 替换当前行所有vivian 为 sky 

:n,$s/vivian/sky/ 替换第 n 行开始到最后一行中每一行的第一个 vivian 为 sky 

:n,$s/vivian/sky/g 替换第 n 行开始到最后一行中每一行所有 vivian 为 sky 

(n 为数字,若 n 为 .,表示从当前行开始到最后一行) 

:%s/vivian/sky/(等同于:g/vivian/s//sky/)替换每一行的第一个 vivian 为 sky 

:%s/vivian/sky/g(等同于:g/vivian/s//sky/g)替换每一行中所有 vivian 为 sky 

2. 可以使用 #作为分隔符,此时中间出现的 /不会作为分隔符 

:s#vivian/#sky/# 替换当前行第一个vivian/ 为 sky/ 

:%s+/oradata/apras/+/user01/apras1+ (使用+ 来 替换 / ):/oradata/apras/替换成/user01/apras1/ 

3. 删除文本中的^M 

问题描述:对于换行,window下用回车换行(0A0D)来表示,linux下是回车(0A)来表示。这样,将window上的文件拷到unix上用时,总会有个^M,请写个用在unix下的过滤windows文件的换行符(0D)的shell或c程序。 

使用命令:cat filename1 | tr -d “^V^M” > newfile; 

使用命令:sed -e “s/^V^M//” filename > outputfilename 

需要注意的是在1、2两种方法中,^V和^M指的是Ctrl+V和Ctrl+M。你必须要手工进行输入,而不是粘贴。 

在vi中处理:首先使用vi打开文件,然后按ESC键,接着输入命令: 

:%s/^V^M// 

:%s/^M$//g 

如果上述方法无用,则正确的解决办法是: 

tr -d “\r” < src>dest 

tr -d “\015″ dest 

strings A>B 

4. 其它用法 

利用 :s 命令可以实现字符串的替换。具体的用法包括: 

:s/str1/str2/ 用字符串 str2 替换行中首次出现的字符串str1 

:s/str1/str2/g 用字符串 str2 替换行中所有出现的字符串str1 

:.,$ s/str1/str2/g 用字符串 str2 替换正文当前行到末尾所有出现的字符串 str1 

:1,$ s/str1/str2/g 用字符串 str2 替换正文中所有出现的字符串str1 

:g/str1/s//str2/g 功能同上 

:g/MsgExceptionHand/s//RtaMsgExceptionHand/g
从上述替换命令可以看到:g 放在命令末尾,表示对搜索字符串的每次出现进行替换;不加 g,表示只对搜索字符串的首次出现进行替换;g 放在命令开头,表示对正文中所有包含搜索字符串的行进行替换操作。

 

11 VI的快捷键及高级用法(实用)

11.1  VI跳到行首和行尾快捷键

Vi有三种基本的工作模式:指令行模式、文本输入模式、行末模式

指令模式(Command Mode) 下输入  a、i、o进入文本输入模式(InputMode)
文本输入模式(Input Mode) 下按ESC进入指令模式(Command Mode)

文本模式下:

shift+g 全局行尾

gg 全局行首

 

指令模式下:

shift+$ 一行的行尾

0(注:数字0) 一行的行首

11.2  VI搜索

使用vi编辑器编辑长文件时,常常是头昏眼花,也找不到需要更改的内容。

这时,使用查找功能尤为重要。

方法如下:

1、命令模式下输入“/字符串”,例如“/Section3”。

2、如果查找下一个,按“n”即可。

 

要自当前光标位置向上搜索,请使用以下命令:
/pattern Enter

其中,pattern表示要搜索的特定字符序列。
要自当前光标位置向下搜索,请使用以下命令:
?pattern Enter
按下 Enter键后,vi 将搜索指定的pattern,并将光标定位在 pattern的第一个字符处。

 

12  Linux xargs命令(实用)

xargs是给命令传递参数的一个过滤器,也是组合多个命令的一个工具。它把一个数据流分割为一些足够小的块,以方便过滤器和命令进行处理。通常情况下,xargs从管道或者stdin中读取数据,但是它也能够从文件的输出中读取数据。xargs的默认命令是echo,这意味着通过管道传递给xargs的输入将会包含换行和空白,不过通过xargs的处理,换行和空白将被空格取代。

xargs 是一个强有力的命令,它能够捕获一个命令的输出,然后传递给另外一个命令,下面是一些如何有效使用xargs 的实用例子。

1. 当你尝试用rm 删除太多的文件,你可能得到一个错误信息:/bin/rm Argument list too long. 用xargs 去避免这个问题

find ~ -name ‘*.log’ -print0 |xargs -0 rm -f

 

2. 获得/etc/ 下所有*.conf 结尾的文件列表,有几种不同的方法能得到相同的结果,下面的例子仅仅是示范怎么实用xargs ,在这个例子中实用 xargs将find 命令的输出传递给ls -l

# find /etc -name "*.conf" |xargs ls –l


3. 假如你有一个文件包含了很多你希望下载的URL, 你能够使用xargs 下载所有链接

# cat url-list.txt | xargs wget –c

 

4. 查找所有的jpg 文件,并且压缩它

# find / -name *.jpg -type f -print | xargstar -cvzf images.tar.gz


5. 拷贝所有的图片文件到一个外部的硬盘驱动 

# ls *.jpg | xargs -n1 -i cp {}/external-hard-drive/directory

 

EXAMPLES
find /tmp -name core -type f -print |xargs /bin/rm -f
Find files named core in or below the directory /tmp and delete them. Note that this will work incorrectly if there are any filenamescontaining newlines or spaces.

find /tmp -name core -type f -print0| xargs -0 /bin/rm -f
Find  files  named core in or below thedirectory /tmp and delete them, processing filenames in such a way that file ordirectory names containing spaces or newlines are correctly handled.

find /tmp -depth -name core -type f -delete
Find files named core in or below the directory /tmp and delete them,but more efficiently than in the previous example (because we avoid the need touse fork(2) and exec(2) to launch rm and we don't need the extra xargsprocess).

cut -d: -f1 < /etc/passwd | sort |xargs echo
Generates a compact listing of all the users on thesystem.

xargs sh -c 'emacs "$@"< /dev/tty' emacs
Launches the minimum number of copies of Emacs needed,one after the other, to edit the files listed on xargs' standard input. This example achieves the same effect as BSD's -o option, but in amore flexible and portable way.

 

13 linux解压包命令(常用实用)

tar -xzvf FileName.tar.gz

.tar

解包:tar xvf FileName.tar

打包:tar cvf FileName.tar DirName

(注:tar是打包,不是压缩!)

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

.gz

解压1:gunzip FileName.gz

解压2:gzip -d FileName.gz

压缩:gzip FileName

 

.tar.gz

解压:tar zxvf FileName.tar.gz

压缩:tar zcvf FileName.tar.gz DirName

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

.bz2

解压1:bzip2 -d FileName.bz2

解压2:bunzip2 FileName.bz2

压缩: bzip2 -z FileName

.tar.bz2

解压:tar jxvf FileName.tar.bz2

压缩:tar jcvf FileName.tar.bz2 DirName

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

.bz

解压1:bzip2 -d FileName.bz

解压2:bunzip2 FileName.bz

压缩:未知

.tar.bz

解压:tar jxvf FileName.tar.bz

压缩:未知

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

.Z

解压:uncompress FileName.Z

压缩:compress FileName

.tar.Z

解压:tar Zxvf FileName.tar.Z

压缩:tar Zcvf FileName.tar.Z DirName

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

.tgz

解压:tar zxvf FileName.tgz

压缩:未知

.tar.tgz

解压:tar zxvf FileName.tar.tgz

压缩:tar zcvf FileName.tar.tgz FileName

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

.zip

解压:unzip FileName.zip

压缩:zip FileName.zip DirName

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

.rar

解压:rar a FileName.rar

压缩:rar e FileName.rar

rar请到:http://www.rarsoft.com/download.htm下载!

解压后请将rar_static拷贝到/usr/bin目录(其他由$PATH环境变量指定的目录也可以):

[root@www2 tmp]# cp rar_static /usr/bin/rar

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

.lha

解压:lha -e FileName.lha

压缩:lha -a FileName.lha FileName

lha请到:http://www.infor.kanazawa-it.ac.jp/~ishii/lhaunix/下载!

解压后请将lha拷贝到/usr/bin目录(其他由$PATH环境变量指定的目录也可以):

[root@www2 tmp]# cp lha /usr/bin/

/home/ods/java6/bin

 

14 Linux dirnamebasename指令(shell中常用) 

一、dirname指令
1、功能:从给定的包含绝对路径的文件名中去除文件名(非目录的部分),然后返回剩下的路径(目录的部分)

2、用法:dirname  filename
例如下面几个例子
(1)# dirname /etc/sysconfig/network-scripts/ifcfg-eth0
   /etc/sysconfig/network-scripts
(2)# dirname /boot/grub/grub.conf
  /boot/grub
(3)# dirname /etc/inittab
  /etc
(4)# echo `pwd` && dirname modprobe.conf
/etc
.
(5)#echo `pwd` && dirname sysconfig/network-scripts/
 
/etc
  sysconfig
二、basename指令

1、功能:从给定的包含绝对路径的文件名中去除左边目录部分或者同时去除某个后缀的内容(目录的部分),然后返回剩下的部分(非目录的部分)

2、用法:basename  filename  [suffix]
例如下面几个例子
(1)#basename /etc/sysconfig/network-scripts/ifcfg-eth0
   ifcfg-eth0
(2)#basename /boot/grub/grub.conf
   grub.conf
(3)#echo `pwd` && basename sysconfig/network-scripts/

/etc

network-scripts

(4)# basename /boot/grub/grub.conf.bak .bak

grub.conf

(5)# basename /boot/grub/grub.conf.bak .conf.bak

Grub

 

15 Linux配置Java环境变量(常用实用)

一. 解压安装jdk 
在shell终端下进入jdk-6u14-linux-i586.bin文件所在目录, 
执行命令 ./jdk-6u14-linux-i586.bin 这时会出现一段协议,连继敲回车,当询问是否同意的时候,输入yes,回车。之后会在当前目录下生成一个jdk1.6.0_14目录,你可以将它复制到任何一个目录下。 

二. 需要配置的环境变量 
1. PATH环境变量。作用是指定命令搜索路径,在shell下面执行命令时,它会到PATH变量所指定的路径中查找看是否能找到相应的命令程序。我们需要把 jdk安装目录下的bin目录增加到现有的PATH变量中,bin目录中包含经常要用到的可执行文件如javac/java/javadoc等待,设置好 PATH变量后,就可以在任何目录下执行javac/java等工具了。 
2. CLASSPATH环境变量。作用是指定类搜索路径,要使用已经编写好的类,前提当然是能够找到它们了,JVM就是通过CLASSPTH来寻找类的。我们需要把jdk安装目录下的lib子目录中的dt.jar和tools.jar设置到CLASSPATH中,当然,当前目录“.”也必须加入到该变量中。 
3. JAVA_HOME环境变量。它指向jdk的安装目录,Eclipse/NetBeans/Tomcat等软件就是通过搜索JAVA_HOME变量来找到并使用安装好的jdk。 

三. 三种配置环境变量的方法1. 修改/etc/profile文件 
如果你的计算机仅仅作为开发使用时推荐使用这种方法,因为所有用户的shell都有权使用这些环境变量,可能会给系统带来安全性问题。 
·用文本编辑器打开/etc/profile 
·在profile文件末尾加入: 
export JAVA_HOME=/usr/share/jdk1.6.0_14 
export PATH=$JAVA_HOME/bin:$PATH 
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar 

·重新登录 
·注解 
a. 你要将 /usr/share/jdk1.6.0_14改为你的jdk安装目录 
b. linux下用冒号“:”来分隔路径 
c. $PATH / $CLASSPATH / $JAVA_HOME 是用来引用原来的环境变量的值 
在设置环境变量时特别要注意不能把原来的值给覆盖掉了,这是一种 
常见的错误。 
d. CLASSPATH中当前目录“.”不能丢,把当前目录丢掉也是常见的错误。 
e. export是把这三个变量导出为全局变量。 
f. 大小写必须严格区分。 

2. 修改.bash_profile文件 

这种方法更为安全,它可以把使用这些环境变量的权限控制到用户级别,如果你需要给某个用户权限使用这些环境变量,你只需要修改其个人用户主目录下的.bash_profile文件就可以了。 
·用文本编辑器打开用户目录下的.bash_profile文件 
·在.bash_profile文件末尾加入: 

export JAVA_HOME=/usr/share/jdk1.6.0_14 
export PATH=$JAVA_HOME/bin:$PATH 
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar 

·重新登录 

3. 直接在shell下设置变量 
不赞成使用这种方法,因为换个shell,你的设置就无效了,因此这种方法仅仅是临时使用,以后要使用的时候又要重新设置,比较麻烦。 
只需在shell终端执行下列命令: 
export JAVA_HOME=/usr/share/jdk1.6.0_14 
export PATH=$JAVA_HOME/bin:$PATH 
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar 

四. 测试jdk 
1. 用文本编辑器新建一个Test.java文件,在其中输入以下代码并保存: 
public class test { 
public static void main(String args[]) { 
System.out.println("A new jdk test !"); 
} 
} 
2. 编译:在shell终端执行命令 javac Test.java 
3. 运行:在shell终端执行命令 java Test 
当shell下出现“A new jdk test !”字样则jdk运行正常。 

五. 卸载jdk 
·找到jdk安装目录的_uninst子目录 
·在shell终端执行命令./uninstall.sh即可卸载jdk。 

 

16  Linux命令执行控制(易用实用)

1、&&

  方式:command1&& command2

  如果command1执行成功,则执行command2

 

2、||

方式:command1 || command2

如果command1执行失败,则执行command2


&&(命令执行控制) 
语法格式如下: 
command1 && command2 [&& command3 ...] 
1 命令之间使用 && 连接,实现逻辑与的功能。 
2 只有在 && 左边的命令返回真(命令返回值 $? == 0),&& 右边的命令才会被执行。 
3 只要有一个命令返回假(命令返回值 $? == 1),后面的命令就不会被执行。 

 

 

||(命令执行控制)
语法格式如下: 
command1 || command2 [|| command3 ...]
1 命令之间使用|| 连接,实现逻辑或的功能。
2 只有在 || 左边的命令返回假(命令返回值 $? == 1),|| 右边的命令才会被执行。这和 c 语言中的逻辑或语法功能相同,即实现短路逻辑或操作。
3 只要有一个命令返回真(命令返回值 $? == 0),后面的命令就不会被执行。

 

命令组合
语法格式如下:
(command1;command2[;command3...]) 
1 一条命令需要独占一个物理行,如果需要将多条命令放在同一行,命令之间使用命令分隔符(;)分隔。执行的效果等同于多个独立的命令单独执行的效果。
2 表示在当前 shell 中将多个命令作为一个整体执行。需要注意的是,使用 () 括起来的命令在执行前面都不会切换当前工作目录,也就是说命令组合都是在当前工作目录下被执行的,尽管命令中有切换目录的命令。
3 命令组合常和命令执行控制结合起来使用。

 

17 Linux vmstat命令(常用)

root@ubuntu:~# vmstat 2  
procs -----------memory---------- ---swap-- -----io---- -system-- ----cpu---- r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa 1  0      034998403158363819660    0    0     0     1    2    0  0  0100  0 0  0      034995843158363819660    0    0     0     0   88  158  0  0100  0 0  0      034997083158363819660    0    0     0     2   86  162  0  0100  0 0  0      034997083158363819660    0    0     0    10   81  151  0  0100  0 1  0      034997323158363819660    0    0     0     2   83  154  0  0100  0

 

#!/bin/sh

#chmod +x cm.sh

#./cm.sh > cm.log

while [ 1 ]

do

date

vmstat

sleep 3

done

 

这表示vmstat2秒采集数据,一直采集,直到我结束程序,这里采集了5次数据我就结束了程序。

好了,命令介绍完毕,现在开始实战讲解每个参数的意思。

r 表示运行队列(就是说多少个进程真的分配到CPU),我测试的服务器目前CPU比较空闲,没什么程序在跑,当这个值超过了CPU数目,就会出现CPU瓶颈了。这个也和top的负载有关系,一般负载超过了3就比较高,超过了5就高,超过了10就不正常了,服务器的状态很危险。top的负载类似每秒的运行队列。如果运行队列过大,表示你的CPU很繁忙,一般会造成CPU使用率很高。

b 表示阻塞的进程,这个不多说,进程阻塞,大家懂的。

swpd 虚拟内存已使用的大小,如果大于0,表示你的机器物理内存不足了,如果不是程序内存泄露的原因,那么你该升级内存了或者把耗内存的任务迁移到其他机器。

free   空闲的物理内存的大小,我的机器内存总共8G,剩余3415M。

buff   Linux/Unix系统是用来存储,目录里面有什么内容,权限等的缓存,我本机大概占用300多M

cache cache直接用来记忆我们打开的文件,给文件做缓冲,我本机大概占用300多M(这里是Linux/Unix的聪明之处,把空闲的物理内存的一部分拿来做文件和目录的缓存,是为了提高程序执行的性能,当程序使用内存时,buffer/cached会很快地被使用。)

si  每秒从磁盘读入虚拟内存的大小,如果这个值大于0,表示物理内存不够用或者内存泄露了,要查找耗内存进程解决掉。我的机器内存充裕,一切正常。

so  每秒虚拟内存写入磁盘的大小,如果这个值大于0,同上。

bi  块设备每秒接收的块数量,这里的块设备是指系统上所有的磁盘和其他块设备,默认块大小是1024byte,我本机上没什么IO操作,所以一直是0,但是我曾在处理拷贝大量数据(2-3T)的机器上看过可以达到140000/s,磁盘写入速度差不多140M每秒

bo 块设备每秒发送的块数量,例如我们读取文件,bo就要大于0。bi和bo一般都要接近0,不然就是IO过于频繁,需要调整。

in 每秒CPU的中断次数,包括时间中断

cs 每秒上下文切换次数,例如我们调用系统函数,就要进行上下文切换,线程的切换,也要进程上下文切换,这个值要越小越好,太大了,要考虑调低线程或者进程的数目,例如在apache和nginx这种web服务器中,我们一般做性能测试时会进行几千并发甚至几万并发的测试,选择web服务器的进程可以由进程或者线程的峰值一直下调,压测,直到cs到一个比较小的值,这个进程和线程数就是比较合适的值了。系统调用也是,每次调用系统函数,我们的代码就会进入内核空间,导致上下文切换,这个是很耗资源,也要尽量避免频繁调用系统函数。上下文切换次数过多表示你的CPU大部分浪费在上下文切换,导致CPU干正经事的时间少了,CPU没有充分利用,是不可取的。

us 用户CPU时间,我曾经在一个做加密解密很频繁的服务器上,可以看到us接近100,r运行队列达到80(机器在做压力测试,性能表现不佳)。

sy 系统CPU时间,如果太高,表示系统调用时间长,例如是IO操作频繁。

id  空闲 CPU时间,一般来说,id + us + sy = 100,一般我认为id是空闲CPU使用率,us是用户CPU使用率,sy是系统CPU使用率。

wt 等待IO CPU时间。

 

vmstat命令各指标含义

 

 

Procs(进程):

r: 运行队列中进程数量

b: 等待IO的进程数量

系统:

in: 每秒中断数,包括时钟中断。

cs: 每秒上下文切换数。

 

CPU(以百分比表示):

us: 用户进程执行时间(user time)

sys: 系统进程执行时间(system time)

wa: 等待IO时间

id: 空闲时间(包括IO等待时间),中央处理器的空闲时间 。以百分比表示。


 

Memory(内存):

swpd: 使用虚拟内存大小

free: 可用内存大小

buff: 用作缓冲的内存大小

cache: 用作缓存的内存大小

Swap

si: 每秒从交换区写到内存的大小

so: 每秒写入交换区的内存大小

IO:(现在的Linux版本块的大小为1024bytes)

bi: 每秒读取的块数

bo: 每秒写入的块数

 

备注: 如果 r经常大于 4 ,且id经常少于40,表示cpu的负荷很重。如果pi,po 长期不等于0,表示内存不足。如果disk 经常不等于0, 且在 b中的队列 大于3, 表示 io性能不好。Linux在具有高稳定性、可靠性的同时,具有很好的可伸缩性和扩展性,能够针对不同的应用和硬件环境调整,优化出满足当前应用需要的最佳性能。因此企业在维护Linux系统、进行系统调优时,了解系统性能分析工具是至关重要的。

 

 

18 Linux常用网络测试命令

1、可以使用ifconfig命令来配置并查看网络接口的配置情况。
    例如:
  (1)配置eth0的IP地址,同时激活该设备。
  #ifconfig eth0 192.168.1.10 netmask 255.255.255.0 up
  (2)配置eth0别名设备eth0:1的IP地址,并添加路由。
  #ifconfig eth0 192.168.1.3
  #route add –host 192.168.1.3 dev eth0:1
  (3)激活设备。
  #ifconfig eth0 up
  (4)禁用设备。
  #ifconfig eth0 down
  (5)查看指定的网络接口的配置。
  #ifconfig eth0
  (6)查看所有的网络接口配置。
  #ifconfig
2、route
  可以使用route命令来配置并查看内核路由表的配置情况。
  例如:
  (1)添加到主机的路由。
  #route add –host 192.168.1.2 dev eth0:0
  #route add –host 10.20.30.148 gw 10.20.30.40
  (2)添加到网络的路由。
  #route add –net 10.20.30.40 netmask 255.255.255.248 eth0
  #route add –net 10.20.30.48 netmask 255.255.255.248 gw 10.20.30.41
  #route add –net 192.168.1.0/24 eth1
  (3)添加默认网关。
  #route add default gw 192.168.1.1
  (4)查看内核路由表的配置。
  #route
  (5)删除路由。
  #route del –host 192.168.1.2 dev eth0:0
  #route del –host 10.20.30.148 gw 10.20.30.40
  #route del –net 10.20.30.40 netmask 255.255.255.248 eth0
  #route del –net 10.20.30.48 netmask 255.255.255.248 gw 10.20.30.41
  #route del –net 192.168.1.0/24 eth1
  #route del default gw 192.168.1.1
  对于1和2两点可使用下面的语句实现:
  Ifconfig eth0 172.16.19.71 netmask 255.255.255.0
  Route 0.0.0.0 gw 172.16.19.254
  Service network restart
3、traceroute
  可以使用traceroute命令显示数据包到达目的主机所经过的路由。
  例如:
  #traceroute 
4、ping
  可以使用ping 命令来网络的连通性。
  例如:
  #ping 
  #ping –c 4 192.168.1.12
5、netstat
  可以使用netstat命令来显示网络状态信息。
  例如:
  (1)显示网络接口状态信息。
  #netstat –i
  (2)显示所有监控中的服务器的Socket和正使用Socket的程序信息。
  #netstat –lpe
  (3)显示内核路由表信息。
  #netstat –r
  #netstat –nr
  (4)显示TCP/UDP传输协议的连接状态。
  #netstat –t
  #netstat –u
6、hostname
  可以使用hostname命令来更改主机名。例如;
  #hostname myhost
7、arp
  可以使用arp命令来配置并查看arp缓存。例如:
  (1)查看arp缓存。
  #arp
  (2)添加一个IP地址和MAC地址的对应记录。
  #arp –s 192.168.33.15 00:60:08:27:CE:B2
  (3)删除一个IP地址和MAC地址的对应缓存记录。
  #arp –d192.168.33.15

8

系统禁止ping

  #echo 1 >/proc/sys/net/ipv4/icmp_echo_ignore_all

  

系统允许ping

  # echo 0 >/proc/sys/net/ipv4/icmp_echo_ignore_all

  此上两条命令的效果实时生效,可以用另外的机器ping来测试是否生效。

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

  /etc/rc.d/rc.local中增加一行

  echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all

  0表示允许

1表示禁止

 

19 Scp命令(常用)

 

scp hadoop@134.64.114.150:/data/cdrhome/cdrFtpLocal/hf2/opt/opthb/data/bill/ctl/load/lte.tar /rtap/rtap 

 scp  root@192.168.128.47:/home/rhn6.2/EULA  /home

 scp-p port user@serverip:/home/user/filename /home/user/filename

以 上端口p 为参数,port 端口 user 为ssh userserverip 为远程服务器ip或者域名 ,/home/user/filename 为远程服务器的文件名 /home/user/filename 为本地服务服务器的文件名。该命令的作用就是将远程的filename复制到本地对应的目录下面

 

 

本地复制到远程
======
* 复制文件:
* 命令格式:
scp local_file remote_username@remote_ip:remote_folder
或者
scp local_file remote_username@remote_ip:remote_file
或者
scp local_file remote_ip:remote_folder
或者
scp local_file remote_ip:remote_file

第1,2个指定了用户名,命令执行后需要再输入密码,第1个仅指定了远程的目录,文件名字不变,第2个指定了文件名;
第3,4个没有指定用户名,命令执行后需要输入用户名和密码,第3个仅指定了远程的目录,文件名字不变,第4个指定了文件名;
* 例程:
scp /home/space/music/1.mp3 root@www.cumt.edu.cn:/home/root/others/music
scp /home/space/music/1.mp3 root@www.cumt.edu.cn:/home/root/others/music/002.mp3
scp /home/space/music/1.mp3 www.cumt.edu.cn:/home/root/others/music
scp /home/space/music/1.mp3 www.cumt.edu.cn:/home/root/others/music/002.mp3

 

scp./commons-beanutils-1.8.2.jar rta@192.168.128.77:/home/rta/storm/storm-0.8.2/lib

 

* 复制目录:
* 命令格式:
scp -r local_folder remote_username@remote_ip:remote_folder
或者
scp -r local_folder remote_ip:remote_folder

第1个指定了用户名,命令执行后需要再输入密码;
第2个没有指定用户名,命令执行后需要输入用户名和密码;
* 例程:
scp -r /home/space/music/ root@www.cumt.edu.cn:/home/root/others/
scp -r /home/space/music/ www.cumt.edu.cn:/home/root/others/

上面 命令 将 本地 music 目录 复制 到 远程 others 目录下,即复制后有 远程 有 ../others/music/ 目录

 

远程复制到本地
======
从 远程 复制到 本地,只要将 从 本地 复制到 远程 的命令 的 后2个参数 调换顺序 即可;

例如:
scp root@www.cumt.edu.cn:/home/root/others/music /home/space/music/i.mp3
scp -r www.cumt.edu.cn:/home/root/others/ /home/space/music/

 

20 Linux date命令的用法

 在linux shell编程中,经常用到日期的加减运算

以前都是自己通过expr函数计算,很麻烦

其实date命令本身提供了日期的加减运算

非常方便。例如:得到昨天的时间
date +%Y%m%d --date="-1 day"

date +%Y-%m-%d  --date="-1 day"

 

date 用法: date [OPTION]... [+FORMAT]
date [-u|--utc|--universal] [MMDDhhmm[[CC]YY][.ss]]
date 可以用来显示或设定系统的日期与时间。
1.在显示方面,使用者可以设定欲显示的格式,格式设定为一个加号后接数个标记,其中可用的标记列表如下: % :  打印出 %
%n : 下一行
%t : 跳格
%H : 小时(00..23)
%I : 小时(01..12)
%k : 小时(0..23)
%l : 小时(1..12)
%M : 分钟(00..59)
%p : 显示本地 AM 或 PM
%r : 直接显示时间 (12 小时制,格式为 hh:mm:ss [AP]M)
%s : 从 1970 年 1 月 1 日 00:00:00 UTC 到目前为止的秒数
%S : 秒(00..61)
%T : 直接显示时间 (24 小时制)
%X : 相当于 %H:%M:%S
%Z : 显示时区 %a : 星期几 (Sun..Sat)
%A : 星期几 (Sunday..Saturday)
%b : 月份 (Jan..Dec)
%B : 月份 (January..December)
%c : 直接显示日期与时间
%d : 日 (01..31)
%D : 直接显示日期 (mm/dd/yy)
%h : 同 %b
%j : 一年中的第几天 (001..366)
%m : 月份 (01..12)
%U : 一年中的第几周 (00..53) (以 Sunday 为一周的第一天的情形)
%w : 一周中的第几天 (0..6)
%W : 一年中的第几周 (00..53) (以 Monday 为一周的第一天的情形)
%x : 直接显示日期 (mm/dd/yy)
%y : 年份的最后两位数字 (00.99)
%Y : 完整年份 (0000..9999)

 

2.在设定时间方面
date -s //
设置当前时间,只有root权限才能设置,其他只能查看。
date -s 20080523 //
设置成20080523,这样会把具体时间设置成空00:00:00
date -s 01:01:01 //
设置具体时间,不会对日期做更改
date -s “01:01:01 2008-05-23″ //
这样可以设置全部时间
date -s “01:01:01 20080523″ //
这样可以设置全部时间
date -s “2008-05-23 01:01:01″ //
这样可以设置全部时间
date -s “20080523 01:01:01″ //
这样可以设置全部时间


3.加减
date +%Y%m%d         //显示现在天年月日
date +%Y%m%d --date="+1 day"  //显示后一天的日期
date +%Y%m%d --date="-1 day"  //显示前一天的日期
date +%Y%m%d --date="-1 month"  //显示上一月的日期
date +%Y%m%d --date="+1 month"  //显示下一月的日期
date +%Y%m%d --date="-1 year"  //显示前一年的日期
date +%Y%m%d --date="+1 year"  //显示下一年的日期

或者更简单点的  date=`date -d -${t}day '+%Y%m%d'` //为t为前几天

 

0 0
原创粉丝点击