linux第三天
Posted 景月
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了linux第三天相关的知识,希望对你有一定的参考价值。
一、用户的类型
1.root管理员:所有权限(r w x)
2.文件拥有者(u):谁创建谁拥有
3.组 (g):用户组
4.其它用户(o):不属于用户组,也不是文件的创建者,不是管理员
5.所有用户(a): u, g , o
r--读, w--写, x--执行
r w x
0 0 1==>1
0 1 0==>2
1 0 0==>4
111==>7
chmod 777 文件名(777是8进制的数)(注意赋予权限7是1+2+4,读写执行权限都有)
二、修改文件权限(读,写,执行)(x权限对目录文件很重要,文件夹不能无x权限,普通文件要有读写权限)
chmod 777 文件名
chmod 0777 文件名
chmod u+wrx, g-wr, o=wrx 文件名
u=wxr
u-r
u+r
三、默认权限
1、查看缺省默认权限
umask –S
2、修改默认权限
umask 022 (例如umask 000表示修改默认权限为xrd,用777-000得到所有权限,usmask -S 564 权限范围为213,用777-564得到权限内容)(设置的是目录文件权限,在目录文件新建普通文件的话普通文件没有x权限)
1)、普通文件: 002
6 6 6
6 6 4
2)、目录文件: 002
7 7 7
775
umask 001
四、文件重定向:重定向是对标准文件(文件重定向也可以实现复制操作)
1.标准输入文件(键盘): 0
2.标准输出文件(显示器): 1
3.标准错误文件(显示器): 2
wc , cat : 标准输入输出命令 (cat输出命令输入内容会显示内容,wc输入内容按ctrl+d会统计字符和行数)
wc输入
cat输出
标准输入重定向: 0</< 文件名 (此处0可以省略)
标准输出重定向: 1>/>文件名,1>>/>> 文件名 (此处1可以省略)(一个大于号把文件中的内容替换成了键盘输入的内容,两个大于号把键盘输入的内容新增到文件夹中)
标准错误重定向: 2>文件名,2>>文件名 (2不可以省略) (一定是错误命令否则看不到效果 ,例如cat r>>s 表示将r普通文件内容添加复制到s中)
标准错误与标准输出重定向: &> , &>>
五、管道命令:|
前一个命令的输出做为下一个命令的输入
ls -l | wc (wc会统计出行数,单词数和字符数)
ps -aux | grep vim (显示所有进程中名称为vim的进程)
六、进程管理 (程序, 进程)
0-255 系统进程, 255--2048保留进程 , 2048--- 无符号整数的上限
1.查看进程 ctrl + d 进程结束
ps -aux
ps -ef
-a:所有进程。()
-u:显示用户。()
-x:列出所有tty进程,tty是当前所使用虚拟终端。()
-e:所有进程,与a略有区别,这里不做具体区分。
-f:完整显示进程信息。
例:
1、先查看进程pid
ps -ef | grep 进程名
2、显示最大的进程id号
ps h | awk ‘{print $1}‘ | sort -nr | head -1 > file.txt
(另一种写法:ps h|awk ‘{print$1}‘|sort -n|tail -1)
ps h | awk ‘{print $1}‘ | sort -nr | head -1 |xargs kill -9
(1) ps h不显示“USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND”信息
(2)用awk输出你的PID列
(3)逆序排列 : n是按数字排序, r倒序排序
(4)输出第一行
你的应该可以用类似的方法实现
你可以试试
xargs命令是给其他命令传递参数的一个过滤器,也是组合多个命令的一个工具。
ps auxh| awk ‘{print $2}‘ | sort -nr | head -1
3.杀死
kill -9 进程id
ctrl + c
4.后台进程 ps -aux 中的STAT为 T 表示是一个后台进程
命令 &
ctrl + z
5.查看所有后台进程
jobs
6.将后台进程变为前台进程
fg %任务编号
fg % 进程编号PID
ctrl + d :正常结束
7.查看当前系统负载
w:
用于显示已经登陆系统的用户列表,并显示用户正在执行的指令。
执行这个命令可得知目前登入系统的用户有那些人,以及他们正在执行的程序。
单独执行w命令会显示所有的用户,您也可指定用户名称,仅显示某位用户的相关信息。
8.动态监控进程所占系统的资源,每隔3秒变一次
top
top -p 进程id
top命令经常用来监控Linux的系统状况,
比如cpu、内存的使用,程序员基本都知道这个命令,但比较奇怪的是能用好它的人却很少,例如top监控视图中内存数值的含义就有不少的曲解。
第一行:
10:01:23 — 当前系统时间
126 days, 14:29 — 系统已经运行了126天14小时29分钟(在这期间没有重启过)
2 users — 当前有2个用户登录系统
load average: 1.15, 1.42, 1.44 — load average后面的三个数分别是1分钟、5分钟、15分钟的负载情况。
load average数据是每隔5秒钟检查一次活跃的进程数,然后按特定算法计算出的数值。如果这个数除以逻辑CPU的数量,结果高于5的时候就表明系统在超负荷运转了。
第二行:
Tasks — 任务(进程),系统现在共有183个进程,其中处于运行中的有1个,182个在休眠(sleep),stoped状态的有0个,zombie状态(僵尸)的有0个。
第三行:cpu状态
6.7% us — 用户空间占用CPU的百分比。
0.4% sy — 内核空间占用CPU的百分比。
0.0% ni — 改变过优先级的进程占用CPU的百分比
92.9% id — 空闲CPU百分比
0.0% wa — IO等待占用CPU的百分比
0.0% hi — 硬中断(Hardware IRQ)占用CPU的百分比
0.0% si — 软中断(Software Interrupts)占用CPU的百分比
在这里CPU的使用比率和windows概念不同,如果你不理解用户空间和内核空间,需要充充电了。
第四行:内存状态
8306544k total — 物理内存总量(8GB)
7775876k used — 使用中的内存总量(7.7GB)
530668k free — 空闲内存总量(530M)
79236k buffers — 缓存的内存量 (79M)
第五行:swap交换分区
2031608k total — 交换区总量(2GB)
2556k used — 使用的交换区总量(2.5M)
2029052k free — 空闲交换区总量(2GB)
4231276k cached — 缓冲的交换区总量(4GB)
这里要说明的是不能用windows的内存概念理解这些数据,如果按windows的方式此台服务器“危矣”:8G的内存总量只剩下530M的可用内存。Linux的内存管理有其特殊性,复杂点需要一本书来说明,这里只是简单说点和我们传统概念(windows)的不同。
第四行中使用中的内存总量(used)指的是现在系统内核控制的内存数,空闲内存总量(free)是内核还未纳入其管控范围的数量。纳入内核管理的内存不见得都在使用中,还包括过去使用过的现在可以被重复利用的内存,内核并不把这些可被重新使用的内存交还到free中去,因此在linux上free内存会越来越少,但不用为此担心。
如果出于习惯去计算可用内存数,这里有个近似的计算公式:第四行的free + 第四行的buffers + 第五行的cached,按这个公式此台服务器的可用内存:530668+79236+4231276 = 4.7GB。
对于内存监控,在top里我们要时刻监控第五行swap交换分区的used,如果这个数值在不断的变化,说明内核在不断进行内存和swap的数据交换,这是真正的内存不够用了。
第六行是空行
第七行以下:各进程(任务)的状态监控
PID — 进程id
USER — 进程所有者
PR — 进程优先级
NI — nice值。负值表示高优先级,正值表示低优先级
VIRT — 进程使用的虚拟内存总量,单位kb。VIRT=SWAP+RES
RES — 进程使用的、未被换出的物理内存大小,单位kb。RES=CODE+DATA
SHR — 共享内存大小,单位kb
S — 进程状态。D=不可中断的睡眠状态 R=运行 S=睡眠 T=跟踪/停止 Z=僵尸进程
%CPU — 上次更新到现在的CPU时间占用百分比
%MEM — 进程使用的物理内存百分比
TIME+ — 进程使用的CPU时间总计,单位1/100秒
COMMAND — 进程名称(命令名/命令行)
9.监控当前系统状态
vmstat
vmstat命令是最常见的Linux/Unix监控工具,可以展现给定时间间隔的服务器的状态值,包括服务器的CPU使用率,内存使用,虚拟内存交换情况,IO读写情况。这个命令是我查看Linux/Unix最喜爱的命令,一个是Linux/Unix都支持,二是相比top,我可以看到整个机器的CPU,内存,IO的使用情况,而不是单单看到各个进程的CPU使用率和内存使用率(使用场景不一样)。
一般vmstat工具的使用是通过两个数字参数来完成的,第一个参数是采样的时间间隔数,单位是秒,第二个参数是采样的次数,
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时间。
9.查看内存使用状况
free
free的输出一共有四行,第四行为交换区的信息,分别是交换的总量(total),
使用量(used)和有多少空闲的交换区(free),这个比较清楚,不说太多。
free输出地第二行和第三行是比较让人迷惑的。这两行都是说明内存使用情况的。
第一列是总量(total),第二列是使用量(used),第三列是可用量(free)。
第一行的输出时从操作系统(OS)来看的。也就是说,从OS的角度来看,计算机上一共有:
24677460KB(缺省时free的单位为KB)物理内存,即FO[2][1];
在这些物理内存中有23276064KB(即FO[2][2])被使用了;
还用1401396KB(即FO[2][3])是可用的;
这里得到第一个等式:
FO[2][1] = FO[2][2] + FO[2][3]
FO[2][4]表示被几个进程共享的内存的,现在已经deprecated,其值总是0(当然在一些系统上也可能不是0,主要取决于free命令是怎么实现的)。
七、网络管理
IP :地址 ***.***.***.***
192.168.31.001
192.168.31.002
192.168.31.002
网络中唯一标识一台计算机
1.ifconfig 显示
2.ifconfig enss33 192.168.6.234 设置ip
3.ping ip地址 , 查检ip地址是否能使用
4.netstat 显示网络状况
Netstat命令用于显示各种网络相关信息,如网络连接,路由表,接口状态等从整体上看,netstat的输出结果可以分为两个部分:
一个是Active Internet connections,称为有源TCP连接,其中"Recv-Q"和"Send-Q"指 的是接收队列和发送队列。这些数字一般都应该是0。如果不是则表示软件包正在队列中堆积。这种情况只能在非常少的情况见到。
另一个是Active UNIX domain sockets,称为有源Unix域套接口(和网络套接字一样,但是只能用于本机通信,性能可以提高一倍)。
Proto显示连接使用的协议,RefCnt表示连接到本套接口上的进程号,Types显示套接口的类型,State显示套接口当前的状态,Path表示连接到套接口的其它进程使用的路径名。
2、linux通过端口查看进程:
netstat -nap(显示所有端口信息)
netstat -nap | grep 端口号
例 :通过nginx进程查看对应的端口号
命令:
ps -ef | grep nginx(没有程序无法找到端口号)
结果:
root 9836 1 0 Jul11 ? 00:00:00 nginx: master process /usr/local/nginx/sbin/nginx
nobody 9841 9836 0 Jul11 ? 00:00:09 nginx: worker process
#通过nginx进程pid查看占用端口(进程pid为9836)
命令:
netstat -nap | grep 9836
结果:
tcp 0 0 0.0.0.0:8081 0.0.0.0:* LISTEN 9836/nginx
tcp 0 0 0.0.0.0:81 0.0.0.0:* LISTEN 9836/nginx
tcp 0 0 0.0.0.0:8082 0.0.0.0:* LISTEN 9836/nginx
tcp 0 0 0.0.0.0:8083 0.0.0.0:* LISTEN 9836/nginx
-p 显示端口进程
例:1、查看8081号端口对应的进程名
命令:
netstat -nap | grep 8081
结果:
tcp 0 0 0.0.0.0:8081 0.0.0.0:* LISTEN 9836/nginx
2、通过pid查看占用端口
netstat -nap | grep 进程pid
netstat命令是一个监控TCP/IP网络的非常有用的工具,它可以显示路由表、实际的网络连接以及每一个网络接口设备的状态信息。
语法选项
netstat [选项]
-a或--all:显示所有连线中的Socket;
-A<网络类型>或--<网络类型>:列出该网络类型连线中的相关地址;
-c或--continuous:持续列出网络状态;
-C或--cache:显示路由器配置的快取信息;
-e或--extend:显示网络其他相关信息;
-F或--fib:显示FIB;
-g或--groups:显示多重广播功能群组组员名单;
-h或--help:在线帮助;
-i或--interfaces:显示网络界面信息表单;
-l或--listening:显示监控中的服务器的Socket;
-M或--masquerade:显示伪装的网络连线;
-n或--numeric:直接使用ip地址,而不通过域名服务器;
-N或--netlink或--symbolic:显示网络硬件外围设备的符号连接名称;
-o或--timers:显示计时器;
-p或--programs:显示正在使用Socket的程序识别码和程序名称;
-r或--route:显示Routing Table;
-s或--statistice:显示网络工作信息统计表;
-t或--tcp:显示TCP传输协议的连线状况;
-u或--udp:显示UDP传输协议的连线状况;
-v或--verbose:显示指令执行过程;
-V或--version:显示版本信息;
-w或--raw:显示RAW传输协议的连线状况;
-x或--unix:此参数的效果和指定"-A unix"参数相同;
--ip或--inet:此参数的效果和指定"-A inet"参数相同。
例子
列出所有端口情况
[root@xiesshavip002 ~]# netstat -a # 列出所有端口
[root@xiesshavip002 ~]# netstat -at # 列出所有TCP端口
[root@xiesshavip002 ~]# netstat -au # 列出所有UDP端口
列出所有处于监听状态的 Sockets
[root@xiesshavip002 ~]# netstat -l # 只显示监听端口
[root@xiesshavip002 ~]# netstat -lt # 显示监听TCP端口
[root@xiesshavip002 ~]# netstat -lu # 显示监听UDP端口
[root@xiesshavip002 ~]# netstat -lx # 显示监听UNIX端口
显示每个协议的统计信息
[root@xiesshavip002 ~]# netstat -s # 显示所有端口的统计信息
[root@xiesshavip002 ~]# netstat -st # 显示所有TCP的统计信息
[root@xiesshavip002 ~]# netstat -su # 显示所有UDP的统计信息
显示 PID 和进程名称
[root@xiesshavip002 ~]# netstat -p
显示核心路由信息
[root@xiesshavip002 ~]# netstat -r
Kernel IP routing table
Destination Gateway Genmask Flags MSS Window irtt Iface
default gateway 0.0.0.0 UG 0 0 0 eth0
192.168.130.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
[root@xiesshavip002 ~]# netstat -rn # 显示数字格式,不查询主机名称
Kernel IP routing table
Destination Gateway Genmask Flags MSS Window irtt Iface
0.0.0.0 192.168.130.1 0.0.0.0 UG 0 0 0 eth0
192.168.130.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
[root@xiesshavip002 ~]#
查看端口和服务
[root@xiesshavip002 ~]# netstat -antp | grep ssh
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 734/sshd
tcp 0 52 192.168.130.20:22 119.129.118.189:58737 ESTABLISHED 1846/sshd: root@pts
tcp6 0 0 :::22 :::* LISTEN 734/sshd
[root@xiesshavip002 ~]# netstat -antp | grep 22
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 734/sshd
tcp 0 52 192.168.130.20:22 119.129.118.189:58737 ESTABLISHED 1846/sshd: root@pts
tcp6 0 0 :::22 :::* LISTEN 734/sshd
[root@xiesshavip002 ~]#
netstat --help
[root@xiesshavip002 ~]# netstat --help
usage: netstat [-vWeenNcCF] [] -r netstat {-V|--version|-h|--help}
netstat [-vWnNcaeol] [ ...]
netstat { [-vWeenNac] -I[] | [-veenNac] -i | [-cnNe] -M | -s [-6tuw] } [delay]
-r, --route display routing table
-I, --interfaces= display interface table for
-i, --interfaces display interface table
-g, --groups display multicast group memberships
-s, --statistics display networking statistics (like SNMP)
-M, --masquerade display masqueraded connections
-v, --verbose be verbose
-W, --wide don‘t truncate IP addresses
-n, --numeric don‘t resolve names
--numeric-hosts don‘t resolve host names
--numeric-ports don‘t resolve port names
--numeric-users don‘t resolve user names
-N, --symbolic resolve hardware names
-e, --extend display other/more information
-p, --programs display PID/Program name for sockets
-o, --timers display timers
-c, --continuous continuous listing
-l, --listening display listening server sockets
-a, --all display all sockets (default: connected)
-F, --fib display Forwarding Information Base (default)
-C, --cache display routing cache instead of FIB
-Z, --context display SELinux security context for sockets
={-t|--tcp} {-u|--udp} {-U|--udplite} {-w|--raw} {-x|--unix}
--ax25 --ipx --netrom
=Use ‘-6|-4‘ or ‘-A ‘ or ‘--‘; default: inet
List of possible address families (which support routing):
inet (DARPA Internet) inet6 (IPv6) ax25 (AMPR AX.25)
netrom (AMPR NET/ROM) ipx (Novell IPX) ddp (Appletalk DDP)
x25 (CCITT X.25)
SecureFXPortable:它可以提供安全文件传输。无论您连接的是任何一种服务器,它都能提供安全的传输服务
SecureCRTPortable: 是一款非常好用的、支持多标签的 SSH 客户端,极大方便了管理多个 SSH 会话。
九、链接文件:(删除原文件软连接文件也无意义,软连接也叫别名文件)
硬链接文件:ln -d 源文名 链接文件名
指向文件的指针多一个
删除文件,指向文件的指针少一个,文件指针为0时,才真正删除
ls -l
-
软链接文件:ln -s 源文名 链接文件名
指向文件的指针不会
删除文件,文件不存在
ls -l
l
搭建服务器
1.tomcat: 是root用户
1.语言环境:jdk
1)查看本机是否已安装jdk
rpm -qa | grep java
2)删除存在的jdk
yum -y remove java
rpm -e java-1.8.0-openjdk-headless
rpm -e java-1.7.0-openjdk-headless
3)jdk安装
rpm -ivh jdk-8u171-linux-x64.rpm
4)查看是否安装成功
java -version
5)配置jdk环境变量
vim /etc/profile写入
JAVA_HOME=/usr/java/jdk1.8.0_171-amd64
export JAVA_HOME
6)环境变量生效
source /etc/profile
2.tomcat:
1)解压tomcat文件
tar -xzvf apache-tomcat-8.5.30.tar.gz
2)将解压后的文件复制到/usr/local目录下
cp -r apache-tomcat-8.5.30 /usr/local
3)由于apache-tomcat-8.5.30文件名过长使用不方便,建一个链接文件tomcat
ln -s apache-tomcat-8.5.30 tomcat
4)启动tomcat
tomcat/bin/startup.sh
3.查询tomcat安装是否成功
浏览器输入url :
http://127.0.0.1:8080
http://192.168.92.154:8080
http://locahst:8080
2.服务器:
1.语言环境:jdk, php
2.tomcat:
3.数据库:mysql, or
3.测试环境:
客户端 ---》服务端
B/S
1.浏览器:ie , o, c
2.语言环境: java--> jdk php -->php
3.测试工具
4.测试。。。
5.
C/S
1.真机。。。,模拟器。。。
2.apk
3.测试工具
4.测试
5.
十、 附加
在linux下搭载数据库怎么做?
使用rpm 或者yum安装
1.查找以前是否安装有mysql,使用下面命令:
rpm -qa|grep -i mysql
rpm -qa|grep mariadb(查下mariadb-libs-5.5.56-2.el7.x86_64这个文件是否存在,存在要删掉此文件才能安装)
rpm -e --nodeps mariadb-libs-5.5.56-2.el7.x86_64(这个是删除这个包的命令)
2.如果已安装,则需要删除已安装的数据库,使用以下命令来删除数据库
删除命令:rpm -e --nodeps 包名
rpm -e --nodeps mariadb-libs-5.5.56-2.el7.x86_64(这个是删除这个包的命令)
3.下载mysql的rpm包
可以通过wget下载具体的地址因为不能用链接请大家去官网去找
4.安装MySQL Server的rpm包
rpm -ivh MySQL-server-5.6.21-1.linux_glibc2.5.x86_64.rpm(这步安装不成功使用yum下载内容,最好是最后一步安装)
5.安装MySQL客户端
rpm -ivh MySQL-client-5.6.21-1.linux_glibc2.5.x86_64.rpm
6.安装MySQL开发依赖包
rpm -ivh MySQL-devel-5.6.21-1.linux_glibc2.5.x86_64.rpm
yum命令下载内容
yum -y install autoconf
/usr/bin/mysql_install_db
7.启动msyql
安装完成后mysql是没有启动的,运行mysql命令会提示如下错误:
ERROR 2002 (HY000): Can‘t connect to local MySQL server through socket ‘/var/lib/mysql/mysql.sock‘ (2)
可使用如下命令启动MySQL:
service mysql start
安装依赖包libaio,可通过yum快速安装
rpm -e --nodeps MySQL-client-5.6.21-1.linux_glibc2.5.x86_64
rpm -e --nodeps MySQL-devel-5.6.21-1.linux_glibc2.5.x86_64
rpm -e --nodeps MySQL-server-5.6.21-1.linux_glibc2.5.x86_64
以上是关于linux第三天的主要内容,如果未能解决你的问题,请参考以下文章