一、搜索
find
格式:“find <指定目录> <指定条件> <指定动作>”
举例:搜索在根目录下的所有test文件(不含文件夹)
find / -type f -name 'test'
更多:find - -help
locate
说明:要比find -name快得多,原因在于它不搜索具体目录,而是搜索一个数据库/var/lib/mlocate/mlocate.db 。这个数据库中含有本地所有文件信息。Linux系统自动创建这个数据库,并且每天自动更新一次,因此,我们在用whereis和locate 查找文件时,有时会找到已经被删除的数据,或者刚刚建立文件,却无法查找到,原因就是因为数据库文件没有被更新。为了避免这种情况,可以在使用locate之前,先使用updatedb命令,手动更新数据库。
举例1:搜索etc目录下所有以ts开头的文件
locate /etc/ts
举例2:新增的文件无法locate,使用updatedb
touch new.txt
locate new.txt #首次搜索没有结果
updatedb #手动更新db(需要root权限)
locate new.txt #再次搜索出现结果
更多: locate - -help
whereis
说明:搜索linux系统中的所有可执行文件即二进制文件
举例:whereis nginx
nginx: /usr/sbin/nginx /etc/nginx
更多:whereis - -help
which
说明:查看系统命令是否存在,并返回系统命令所在的位置
举例:which nginx
/usr/sbin/nginx
type
说明:查看系统中的某个命令是否为系统自带的命令,如果是,返回命令位置
举例:type nginx
nginx is /usr/sbin/nginx
二、内存
free
说明:默认单位为KB,可以用free –m或 free –g分别以MB和GB显示
举例:
第一行和第二行都有used/free两项,区别在于:
1、第一行是从OS的角度来看,因为对于OS,buffers/cached 都是属于被使用,所以他的可用内存是105MB;已用内存是3725MB,其中包括,内核(OS)使用+Application(X,oracle,etc)使用的+buffers+cached。
2、第二行是从应用程序角度来看,对于应用程序来说,buffers/cached 是等于可用的,因为buffer/cached是为了提高文件读取的性能,当应用程序需在用到内存的时候,buffer/cached会很快地被回收。所以从应用程序的角度来说,可用内存=系统freememory+buffers+cached。如上例: 455MB=105+109+241
cat /proc/meminfo
说明:/proc目录下面存放着系统信息的各种实时信息文件:CPU、memory、虚拟机、Linux内核、filesystems等,其它命令都是从这里取的数据。
举例:cat /proc/meminfo
cat /proc/ cpuinfo
cat /proc/version
top
说明:top命令可以实时看到CPU、Memory、进程等信息,还可以控制显示方式
举例:
第一部分:系统信息栏
第一行:
“11:05:06”为系统当前时刻;
“up 314 days, 15:48”为系统启动后到现在的运作时间;
“3 users”为当前登录到系统的用户,更确切的说是登录到用户的终端数 -- 同一个用户同一时间对系统多个终端的连接将被视为多个用户连接到系统,这里的用户数也将表现为终端的数目;
“load average”为当前系统负载的平均值,后面的三个值分别为1分钟前、5分钟前、15分钟前进程的平均数,一般的可以认为这个数值超过 CPU 数目时,CPU 将比较吃力的负载当前系统所包含的进程;
第二行(Tasks):
“129 total”为当前系统进程总数;
“1 running”为当前运行中的进程数;
“128 sleeping”为当前处于等待状态中的进程数;
“0 stoped”为被停止的系统进程数;
“0 zombie”为被复原的进程数;
第三行(Cpus):
0.3% us 用户空间占用CPU百分比
1.0% sy 内核空间占用CPU百分比
0.0% ni 用户进程空间内改变过优先级的进程占用CPU百分比
98.7% id 空闲CPU百分比
0.0% wa 等待输入输出的CPU时间百分比
0.0% hi 硬中断
0.0% si 软中断
第四行(Mem):
分别表示了内存总量、当前使用量、空闲内存量、以及缓冲使用中的内存量;
第五行(Swap):
表示类别同第四行(Mem),但此处反映着交换分区(Swap)的使用情况。通常,交换分区(Swap)被频繁使用的情况,将被视作物理内存不足而造成的。
第二部分 -内部命令提示栏:
top运行中可以通过 top 的内部命令对进程的显示方式进行控制。内部命令如下表:
s - 改变画面更新频率
l - 关闭或开启第一部分第一行 top 信息的表示
t - 关闭或开启第一部分第二行 Tasks 和第三行 Cpus 信息的表示
m - 关闭或开启第一部分第四行 Mem 和 第五行 Swap 信息的表示
N - 以 PID 的大小的顺序排列表示进程列表
P - 以 CPU 占用率大小的顺序排列进程列表
M - 以内存占用率大小的顺序排列进程列表
h - 显示帮助
n - 设置在进程列表所显示进程的数量
q - 退出 top
s - 改变画面更新周期
第三部分 - 最下部分的进程列表栏:
以 PID 区分的进程列表将根据所设定的画面更新时间定期的更新。通过 top 内部命令可以控制此处的显示方式。例如想看PID为257和86两个进程的情况:top –p 257,86; 想看root用户下的进程的情况:top –u root。
每一列的含义如下:
PID:进程的ID
USER:进程所有者
PR:进程的优先级别,越小越优先被执行
NInice:值
VIRT:进程占用的虚拟内存
RES:进程占用的物理内存
SHR:进程使用的共享内存
S:进程的状态。S表示休眠,R表示正在运行,Z表示僵死状态,N表示该进程优先值为负数
%CPU:进程占用CPU的使用率
%MEM:进程使用的物理内存和总内存的百分比
TIME+:该进程启动后占用的总的CPU时间,即占用CPU使用时间的累加值。
COMMAND:进程启动命令名称
三、进程
ps -ef |grep $pid
举例:
pmap $pid
说明:pmap命令用于显示一个或多个进程的内存状态。其报告进程的地址空间和内存状态信息。查看多个pid可以如下:pmap 1013 12171118
属性含义如下:
Address:内存开始地址
Kbytes: 占用内存的字节数(KB)
RSS: 保留内存的字节数(KB)
Dirty: 脏页的字节数(包括共享和私有的)(KB)
Mode: 内存的权限:read、write、execute、shared、private (写时复制)
Mapping: 占用内存的文件、或[anon](分配的内存)、或[stack](堆栈)
Offset: 文件偏移
Device: 设备名 (major:minor)
四、磁盘
df
说明:用来查看文件系统的磁盘空间占用情况。获取硬盘被占用了多少空间,目前还剩下多少空间等信息。
使用:df [选项] [文件]
df
df –m 已MB为单位展示大小
df –h 已GB为单位展示大小i
df –H 等于“-h”,但是计算式,1K=1000,而不是1K=1024
df –i 展示的是文件系统“元数据”的信息,不表示文件的大小
ps:在df -h和df -i 显示使用率100%,基本解决方法都是删除文件。
df -h 是去删除比较大无用的文件-----------大文件占用大量的磁盘容量。
df -i 则去删除数量过多的小文件-----------过多的文件占用了大量的inode号。
du
说明:统计目录及文件所占磁盘空间的大小
使用:
重要
du /opt/dir 默认以KB展示dir目录,及它下面所有目录及子目录的大
du –h 以友好的形式展示大小,例如4.0kb
du -h --max-depth=1 用max-depth来控制所展示的目录的深度
du -ah --max-depth=1 用a表示既展示目录,又展示文件的大小
其它
du –k[-m/-g] /home/linux 以KB[MB/GB]为单位显示一个目录树及其每个子树的磁盘使用情况
du -sh user 只查看当前目录下user目录的大小,并不想看其他目录以及其子目录
du -h - -exclude=’*xyz*’ 列出当前目录中的目录名不包括xyz字符串的目录的大小
五、内核&操作系统
uname –a
如图各项的含义如下:
1、内核名称:uname-s
2、网络节点上的主机名:uname-n
3、内核发行号:uname-r
4、内核版本:uname-v
5、分别表示:硬件架构名称/uname-m;cpu类型/uname -p;硬件平台/uname -i
6、操作系统名称:uname-o
cat /proc/version
说明:类似uname –a 能够看到:内核发行号、gcc编译器版本、内核版本
cat /etc/issue
说明:可以清楚地看到操作系统的发行版本,系统安装时默认的发行版本信息,通常安装好系统后文件内容不会发生变化。所以有可能看到的是不准确的,例如手动升级内核。
lsb_release –a
说明:类似 cat /etc/issue,可以看到操作系统发行版本信息。
六、网络
netstat
说明:netstat命令的功能是显示网络连接、路由表和网络接口信息,可以让用户得知有哪些网络连接正在运作。使用时如果不带参数,netstat显示活动的 TCP 连接,默认不显示LISTEN和LISTENING的状态。
常用参数:
-n 拒绝显示别名,能显示数字的全部转化成数字
-t 仅显示tcp相关选项
-l 仅列出有在 Listen(监听) 的服務状态
-p 显示建立相关链接的程序名和pid
例如:我想查看端口号为8444的进程的pid(以便杀死进程):netstat–ntlp | grep 8444
其它参数:
-a (all)显示所有选项,默认不显示LISTEN相关
-u (udp)仅显示udp相关选项
-e 显示扩展信息,例如uid等
-c 每隔一个固定时间,执行该netstat命令。
-s 按各个协议进行统计
-r 显示路由信息,路由表
路由表的信息说明:(以windows为例:netstat –r (同:route print))
u 这张表里的路由是由这几部分组成的:要去哪,从哪走,哪个接口,距离
u 网络目标+掩码,确定的是目标网段,即“要去哪”
u 网关和接口,指定的是从哪儿出去,下一个结点的IP是多少
u 距离确定的是优先级,相同目标的时候,比的就是这个消耗,越低越好
u 最后一条的意思是,如果要去172.16.48.0/255.255.248.0 这个网段,就从172.16.50.253走,是直连的,距离是4501
u 0.0.0.0/0.0.0.0表示默认路由,即,目标网段不存在于路由表中的时候,默认都从这走。
查看外网IP
curl ipinfo.io (curlipinfo.io/ip)
curl ifconfig.me(curl ifconfig.me/all)
七、防火墙
状态&开闭
查看是否开启:service iptalbes status
改变状态:
即时生效,重启后失效:
开启: service iptables start
关闭: service iptables stop
重启后生效,永不失效:
开启: chkconfig iptables on
关闭: chkconfig iptables off
打开某个端口
例如打开80端口:
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A OUTPUT -p tcp --sport 80 -j ACCEPT
然后用iptables -L -n 是否添加上去, 看到添加了:
命令解释:
-A参数就看成是添加一条 INPUT 的规则
-p 指定是什么协议我们常用的tcp 协议,当然也有udp 例如53端口的DNS到时我们要配置DNS用到53端口 大家就会发现使用udp协议的而 --dport 就是目标端口 当数据从外部进入服务器为目标端口反之数据从服务器出去 则为数据源端口 使用 --sport
-j 就是指定是 ACCEPT 接收 或者 DROP 不接收
禁止某个IP访问
iptables -A INPUT -p tcp -s 192.168.1.2 -jDROP
命令解释:
-s 就是来源的意思
删除规则
首先通过 iptables -L -n --line-number 可以显示规则和相对应的编号
然后通过iptables -D INPUT2 即可删除编号为2的这条规则
八、环境变量
查看:
env 查看所有环境变量(可以grep出需要的:env|grep PATH)
echo查看某一个环境变量(例如:echo $PATH)
set 查看所有环境变量(可以grep出需要的:set|grep PATH)
添加:
1、在/etc/profile文件中添加变量【对所有用户生效(永久的)】
例如:编辑/etc/profile文件,添加CLASSPATH变量
# vi /etc/profile
export CLASSPATH=./JAVA_HOME/lib:$JAVA_HOME/jre/lib
注:修改文件后要想马上生效还要运行# source /etc/profile不然只能在下次重进此用户时生效
2、用户目录下的.bash_profile文件中增加变量【对当前的单一用户生效(永久的)】
例如:添加PATH环境变量
#cd
#vibash_profile
PATH=$PATH:$HOME/bin
export PATH
注:同样,修改文件后要想马上生效还要运行# source /etc/profile不然只能在下次重进此用户时生效
3、直接运行export命令定义变量【只对当前连接shell(BASH)有效(临时的)】
直接使用[export 变量名=变量值] 定义变量,例如:export USR=kobe
注:shell关闭了,变量也就失效了,再打开新shell时就没有这个变量
修改:
修改值:
PATH=/java_home/bin
exportPATH=/wzp/bin:$PATH
设为只读:
$export TEST="Test..." #增加一个环境变量TEST
$ readonly TEST#将环境变量TEST设为只读
注:设为只读后不能删除(unset)和修改
删除:
unset PATH(不用加$符号)即可删除环境变量PATH
常用的系统环境变量:
PATH 决定了shell将到哪些目录中寻找命令或程序
HOME 当前用户主目录
HISTSIZE 历史记录数
LOGNAME 当前用户的登录名
HOSTNAME 指主机的名称
SHELL 当前用户Shell类型
LANGUGE 语言相关的环境变量,多语言可以修改此环境变量
MAIL 当前用户的邮件存放目录
PS1 基本提示符,对于root用户是#,对于普通用户是$
PS2 是附属提示符,默认是“>”。可以通过修改此环境变量来修改当前的命令符.
注:写shell命令(脚本)时,环境变量可以用加前缀符号$进行引用,例如$PATH带便当前的PATH环境变量的值