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

Unix 与 Linux:操作系统的核心区别 阅读详情

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(bash,ksh对应的文件为/etc/kshrc)
   用户环境变量,只对当前用户有效,设置文件为当前用户主目录(~)下的:.profile、.bash_profile、.bashrc(bash,ksh对应的文件为.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:每天5:30执行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 Linux下find命令(常用实用)

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 find与xargs的用法

(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的命令长度做限制,就会报:”参数列太长“,这就需要使用xargs。xargs是部分取传来的文件。

(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 Linux中vi进行字符替换(常用实用)

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 dirname、basename指令(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

 

这表示vmstat每2秒采集数据,一直采集,直到我结束程序,这里采集了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为前几天

 

Unix 系统 1969年8月,肯·汤普森趁着妻子回家探亲,用了1个月的时间,使用汇编语言,写出了一个简版的Multics系统(包括一组内核程序,一些内核工具程序,以及一个小的文件系统)。教授(Andrew S. Tanenbaum,也译为谭宁邦),为了能在课堂上教授操作系统课程,决定在不使用任何AT&T源代码的前提下,自行开发与Unix兼容的操作系统。但是,效果并不理想。它属于底层软件,可以说是一个大管家,专门负责把所有的硬件和上层软件(中间件、数据库、应用程序等)管理和连通起来,并进行资源调配,完成用户下达的任务。 阅读详情

相关推荐

精通操作系统安装:UNIX与LINUX详解

htmltable {th, td {th {pre {简介:操作系统安装是电脑用户的基础技能,特别是对于初学者。本文详细介绍了UNIX和LINUX等主流操作系统的安装流程,确保读者通过清晰易懂的步骤指导,掌握必要的安装知识,包括硬件需求确认、数据备份、分区管理、用户设置等关键环节。同时,强调了安装后硬件驱动兼容性问题的处理以及系统更新和安全维护的重要性,以助于用户熟练操作并独立完成操作系统的安装。

weixin_32456485的博客 601

Lunix磁盘分区、挂载,添加磁盘(全是白话,小白也能看懂)

主要针对当Linux磁盘不够时我们需要扩容时的问题解决详情!!!

qq_61544409的博客 1364

Unix/linux 挂载 usb 移动硬盘 命令 dvd

Unix/linux 挂载 usb 移动硬盘 命令 看完包你知道怎么在unix或者linux下挂载各种设备。

unix命令

一. 查看机器上是否还有java线程 $ ps -ef | grep 'java' 二. 查看和清理机器文件 ## 1.查看机器磁盘总空间以及剩余空间大小 [root@localhost ~]# df -h ## 2.查看当前目录使用的总空间大小 [root@localhost /home/admin]# du -h --max-depth=0 ## 3.查看当前目录下某文件使用空间大小 [root@localhost /home/admin]# du -h --max-depth=1 文件名 ## 4.

zijikanwa 2106

【硬件】通俗易懂的讲解晶体管(三极管和MOS管)的工作原理

晶体管是一个简单的元器件,可用于构建许多有趣的项目。在本文中,我将用通俗易懂的语言给您讲解晶体管的工作原理,以便您可以在电路设计中更好的使用静态管。一旦你学习这些基础知识,对以后的设计和使用来说,将会变得非常容易。我们将重点介绍两种最常见的晶体管:双极型晶体管(三极管)和MOSFET。晶体管的工作原理其实是类似于电子开关。它可以打开和关闭电路。一个简单的思考方法是将晶体管视为无源的继电器。晶体管类似于继电器,从某种意义上说,您可以使用它来打开和关闭某些东西。但晶体管也可以部分导通,一般在放大电路中使用,这部

1万+

大宗农产品交易知识图谱推理引擎的构建--需求分析

大宗农产品交易知识图谱推理引擎的构建 一、项目概述 ​ 进入信息时代,全球产生的数据量爆炸式增长,一方面数据产生的方式发生改变,由手工产生越来越多地转为自动化生成,另一方面,人类的活动也越来越依赖数据;民以食为天,粮食方面的信息数据对人类来说至关重要,而当前繁杂的数据已经超出了人工处理的范围,这就对数据采集和数据处理提出了新的要求。 知识图谱是将大量收集的数据整理成机器能处理的知识库,并实现可视化的展示。知识图谱本质上是一种大规模的语义网络,其主要目的是对真实世界里的实体或概念之间的关联关系进行描述;构造

qq_40583949的博客 2586

【系统运维】阿里云服务器部署Python基础环境

当前操作系统Ubuntu16.04 目标 挂载磁盘 分配目录 配置端口 安装svn 安装python环境 安装nginx 挂载磁盘 查看已挂载磁盘信息 df -h 查看磁盘信息 fdisk -l 格式化磁盘 mkfs -t ext4 /dev/sdb 挂载磁盘 mount /dev/vdb /mnt 取消挂载 umount /dev/vdb 开机自动挂载磁盘 vi /etc/fstab 添加如...

942

利用Sigrity的SPEED2000进行时域电源噪声分析

SPEED2000进行时域电源噪声分析

ZHENGSA的博客 3620

(转)性能提升30%以上 JDHybrid h5加载优化实践

Hybrid技术的一种实现

u012413955的博客 1913

10分钟上手YOLOv11:最强姿态估计模型来了,代码开源,效果炸裂!

【10分钟玩转YOLOv11实时姿态估计】🚀 YOLOv11作为YOLO家族最新成员,在速度、精度和易用性上全面升级,尤其适用于姿态估计等复杂视觉任务。本文带您快速掌握: 1️⃣ 核心概念:姿态估计即识别人体17个关键点(如关节部位)并连接成数字骨架,是智能健身、体感游戏等应用的基础。 2️⃣ 技术优势: 超轻量级(最小仅2.9M参数) 极速推理(GPU仅1.7ms) 高精度(COCO mAP@50-95达50%) 3️⃣ 三步实操: ① 安装:pip install ultralytics ② 准备人物

weixin_41246802的博客 1787

UE5高斯泼溅落地全链路:从PLY导入到实时渲染的工程实践

3D高斯泼溅(3D Gaussian Splatting)正从NeRF后处理技术演进为新一代隐式几何渲染范式,其核心在于以可微椭球体替代传统三角面片,通过协方差矩阵与球谐系数实现高质量体素化渲染。该技术突破点云精度瓶颈,但与UE5现有资产管线存在根本性不兼容——静态网格导入器无法解析scale/rot/sh系数等非标顶点语义,标准光栅化管线亦无法执行高斯核采样计算。XV3DGS-UEPlugin通过自定义资产类型、StructuredBuffer GPU数据流与专用材质节点,将高斯泼溅重构为可编辑、可LOD

weixin_33692177的博客 357

Linux/Unix 常用命令 【更新】

该文章为本人学习记录使用,整理了日常使用的命令。如有错误欢迎指正。

qq_44153697的博客 1225

ifix5.8连接ab plc的点-通过rslinx

以ifix连接ab plc的点为例 1.先在rslinx上把plc的点导出为opc server 2.使用opc power tool 作为opc client 去连接 3.保存到项目的PDB文件夹下面,并且以节点名命名。 也可以不以节点名命名,系统自动会生成一个以节点名命名的这种文件,就显得很乱。 同时,项目的PDB目录下面必须还得拷过来一个de...

中国智造2025 4110

UNIX/Linux学习笔记

UNIX/Linux学习笔记

weixin_64709241的博客 2141

微信小程序 - 实现大文件上传分片/切片+本地选择文件上传超大文件,小程序大文件切片上传+断点续传+上传进度条+失败自动重传完整运行示例源码,支持图片、视频、文档各种文件(支持上传单个文件或批量上传)

微信小程序实现大文件上传,实现分片大文件上传,微信小程序 分片 断点续传 大文件上传,微信小程序实现大文件上传 分片上传 进度条,小程序文件分片上传,微信小程序如何上传很大的文件,在选择文件后,按指定大小将文件切割成独立的文件片,并逐片上传,uniapp 微信小程序上传大文件如何切片,微信小程序实现大文件分片上传、断点续传、秒传,解决大文件上传问题,大文件上传如何做断点续传,微信小程序wx.uploadFile,小程序上传视频,小程序上传文档,实现大文件上传(切片上传)实现大文件上传到服务器教程,支持批量多

🏆 前端领域优质创作者 1万+

YOLOv13添加轻量化的EMA模块Faster_EMA,轻量又涨点!map50提升4.56个点,召回率提升9.66!

本文介绍了YOLOv13模型的优化移植方法,通过添加Faster_EMA模块和超参数调整,使模型性能显著提升。主要修改包括:1) 创建新的模型配置文件yolov13-Faster_EMA.yaml;2) 在tasks.py中添加新模块;3) 修改__init__.py和block.py文件,新增Partial_conv3和DropPath类。优化后模型mAP50提升4.56%,召回率提升9.66%,验证了改进方案的有效性。代码实现了局部卷积和随机深度等先进技术,为YOLO系列模型性能优化提供了新思路。

FJN110的博客 2604

Linux操作系统

Linux操作系统(GNU/Linux)是一套免费使用和自由传播的类Unix操作系统,是一个基于POSIX的多用户、多任务、支持多线程和多CPU的操作系统。

m0_54850467的博客 1404

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

了解linux操作系统目录和使用

Linux操作系统是一种开源的、自由的、基于Unix的操作系统,它广泛用于服务器、桌面计算机、移动设备等各种领域。Linux操作系统采用了一种特殊的文件系统和目录规划,本文将为大家介绍Linux操作系统的文件系统和目录规划。

最近开始研究AIGC领域技术,欢迎交流 215

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

Unix/Linux 命令速查表

Unix/Linux 命令参考 文件命令 -------- ls – 列出目录 ls -al – 使用格式化列出隐藏文件 cd dir -更改目录到 dir cd – 更改到 home 目录 pwd – 显示当前目录 mkdir dir – 创建目录 dir rm file – 删除 file rm -r dir – 删除目录 dir rm -f file – 强制删...

weixin_30498807的博客 81

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

linux 常用命令

# uname -a # 查看内核/操作系统/CPU信息 # head -n 1 /etc/issue # 查看操作系统版本 # cat /proc/cpuinfo # 查看CPU信息 # hostname # 查看计算机名 # lspci -tv # 列出所有PCI设备 # lsusb -tv # 列出所有USB设备 # lsmod # 列出加载的内核模块# env # 查看环境变量 资源 ...

weixin_30515513的博客 67

Linux作业

Linux 1.操纵系统有哪些: WINDOW Linux MAC 麒麟 DOS 2. Linux的简介: Linux是一个基于POSIX和unix的多用户 多任务 支持多线程和 多cpu的一个操作系统 Linux的发行版: Ubuntu RedHat CentOS Debian SUse 。。。。 3.Linux的使用领域: LNMP Linux+Nginx+mysql+Php LAMP Linux+apache+mysql+Php 测试中什么使用linux?

weixin_44887440的博客 181

unix 与 linux 操作系统 介绍

第四章银行常用操作系统   本章将对银行计算机中常用的操作系统UNIX和Linux作简要的介绍,着重说明两者的特点和应用场合,而对另一个常用的操作系统Windows不作介绍。   4.1 操作系统的基本概念   计算机系统是由硬件和软件两部分构成的。如图4.1所示,软件大致可分成系统软件、支撑软件和应用软件三层。操作系统属于软件中的系统软件,它是紧挨着硬件的第一层,是对硬件功能的首次

互联网金融爱好者 5871

linux与unix区别

UNIX 与 Linux 之间的关系是一个很有意思的话题。在目前主流的服务器端操作系统中,UNIX 诞生于 20 世纪 60 年代末,Windows 诞生于 20 世纪 80 年代中期,Linux 诞生于 20 世纪 90 年代初,可以说 UNIX 是操作系统中的"老大哥",后来的 Windows 和 Linux 都参考了 UNIX。 现代的 Windows 系统已经朝着“图形界面”的方向发展了,和 UNIX 系统有了巨大的差异,从表面上甚至看不出两者的关联。 UNIX 的坎坷历史

manongxianfeng的博客 7468

UNIX 系统

1 UNIX操作系统 UNIX系统是一个交互式的分时操作系统 1974年《ACM通信》上发表了K. Thompson 和 D. Ritchie的论文“The UNIX Time-Sharing System”,UNIX系统公布于世。 作者:美国BELL实验室 Ken Thompson(K.汤普逊)Dennis Ritchie (D.里奇)(C语言的创始人) 1.1 UNIX操作系统的发展 1965...

weixin_43840862的博客 7288

【Linux基础】Unix与Linux操作系统介绍

一、Unix和Linux操作系统概述 1.Unix是什么 UNIX是一个计算机操作系统,一个用来协调、管理和控制计算机硬件和软件资源的控制程序。 2.Unix特点 (1)多用户:在同一时刻可以有多个用户同时使用UNIX操作系统而且他们互不干扰; (2)多任务:任何一个用户在同一时间可以在UNIX操作系统上运行多个程序。 3.GNU项目与GPL条款 (1)GNU项目 GNU计划,又称...

weixin_30367169的博客 449

linux和unix区别

转至:http://www.goceanedu.com.cn UNIX是历史最悠久的通用操作系统。1969年,美国贝尔实验室的K.Thompson和D.M.Ritchie在规模较小及较简单的分时操作系统MULTICS的基础上开发出UNIX, 当时是在DEC的PDP—7小型计算机上实现的,1970年正式投入运行。此后数年,UNIX一直是一个限于在AT&T内部使用的操作系统。1971年,发展出以 PDP-11/20汇编语言所写成的V1版,包括最基本的文件系统和一些简单的软件,之后,又经历了一些改进。 .

manongxianfeng的博客 6879
上一篇: Mysql 索引与优化 加锁处理分析
下一篇: Linux-Unix-Shell实战实例
romaticjun2011
博客等级 码龄15年 6粉丝 24原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值