首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【小家运维】达到Linux第三阶段的常用命令笔记记录---Part Ⅱ

【小家运维】达到Linux第三阶段的常用命令笔记记录---Part Ⅱ

作者头像
YourBatman
发布2019-09-03 15:15:57
5910
发布2019-09-03 15:15:57
举报
文章被收录于专栏:BAT的乌托邦BAT的乌托邦
用户和组

Linux是一个多用户多任务的操作系统,任何一个要使用系统资源,都需要先向管理员申请一个帐号,然后以这个帐号的身份登录进系统。

Linux用户被划分为两类:一类是根用户(root用户),也称为超级用户;另一类是普通用户。

每一个用户都有一个唯一的身份标识,称为用户ID(UID)。Linux的用户至少需要属于一个组。每一个用户组也有一个唯一的身份标识,称为用户组IDL(GID)

Linux系统中,所有用户(包括系统管理员)的账号和密码都可以在/etc/passwd和/etc/shadow这两个文件中找到,(用户和密码就放在文件中,不怕被其他人看的或者修改吗?/etc/passwd只有系统管理员才可以修改的,其他用户可以查看,/etc/shadow其他用户看不了)

/etc/passwd文件介绍

在该文件中,每一行用户记录的各个数据段用“:”分隔,分别定义了用户的各方面属性。各个字段的顺序和含义如下: (一共7段)

【注册名:口令:用户标识号:组标识号:说明:用户主目录:命令解释程序 】

  • 注册名:用于区分不同的用户。在同一系统中注册名是惟一的。大小写敏感
  • 口令:现在的Unix/Linux系统中,口令不再直接保存在passwd文件中,通常将passwd文件中的口令字段使用一个“x”来代替,将/etc /shadow作为真正的口令文件,用于保存包括个人口令在内的数据。当然shadow文件是不能被普通用户读取的,只有超级用户才有权读取。

超级用户root或某些高级用户可以使用系统命令passwd来更改系统中所有用户的口令,普通用户也可以在登录系统后使用passwd命令来更改自己的口令

  • 用户标识号:UID是一个数值,是Linux系统中惟一的用户标识,用于区别不同的用户。唯一的。

注册名和UID都可以用于标识用户,只不过对于系统来说UID更为重要。UID是给系统识别的,所以如果多个用户名的UID是相同的(这是允许的),那么其实就是同一用户

  • 组标识号:这是当前用户的缺省工作组标识。

除了在 passwd文件中指定其归属的基本组之外,还在/etc/group文件中指明一个组所包含用户。

  • 说明:关于账号的一些说明信息(暂时可以忽略)。如用户的真实姓名、办公室地址、联系电话等。
  • 用户home目录:超级用户root的工作目录为/root;而其它个人用户在/home目录下均有自己独立的工作环境。账号的家目录,家目录就是你登陆系统后默认的那个目录
  • 命令解释程序:账号使用的shell。如/bin/bash。

示例:

fangshixiang:x:18359:28004:VKBOT@fangshixiang:/home/fangshixiang:/bin/bash

虚拟用户:这类用户也被称之为伪用户或假用户,与真实用户区分开来,这类用户不具有登录系统的能力,但却是系统运行不可缺少的用户,比如bin、daemon、adm、ftp、mail等;这类用户都系统自身拥有的,而非后来添加的,当然我们也可以添加虚拟用户; UID从1-499是系统的预留的虚拟帐户。 自己添加一般都添加的是真实用户

/etc/shadow文件介绍

在该文件中,每一行用户记录的各个数据段用“:”分隔: (一共9段) 【注册名:口令:用户标识号:组标识号:说明:用户主目录:命令解释程序 】

  • 账户名:账户名与/etc/passwd里面的账户名是一一对应的关系。
  • 加密后密码:这里可以看到3类,分别是奇奇怪怪的字符串、*和!!等。星号代表帐号被锁定,双叹号表示这个密码已经过期了(公司里用堡垒机登录,一般密码都显示这个)。棉麻串是以$6$开头的,表明是用SHA-512加密的,$1$ 表明是用MD5加密的、$2$ 是用Blowfish加密的、$5$是用 SHA-256加密的。
在这里插入图片描述
在这里插入图片描述
  • 密码最近改动日期:这个是表明上一次修改密码的日期与1970-1-1相距的天数。8表示8天没改了,0表示不记录这个日期
  • 密码需要修改的期限:密码经常更换才能保证安全,为了提醒某些经常不更换密码的用户,可以设置一个天数,强制让用户更换密码,也就是说该用户的密码会在多少天后过期,如果为99999则没有限制
  • 修改期限前N天发出警告:
  • 密码过期的宽恕时间:如果在5中设置的日期过后,用户仍然没有修改密码,则该用户还可以继续使用的天数
  • 账号失效日期,过了这个日期账号就不能用了(一般都不需要设值)
  • 保留的
fangshixiang:!!:17598:0:99999:7:::
/etc/group文件介绍

用户组(Group)配置文件主要有 /etc/group和/etc/gshadow,其中/etc/gshadow是/etc/group的加密信息文件; 【组名:组密码:组ID:数据该组的用户们】

  • 组名:唯一性
  • 组密码:一般用户组都没有密码。所以一般都为空或者x
  • 组ID:
  • 用户们:不同用户之间用逗号(,)分隔。这个用户组可能是用户的主组,也可能是附加组

groups 用户名:命令可以查看用户所在的组们(用户名不写就查当前用户):

在这里插入图片描述
在这里插入图片描述
添加用户(useradd或者adduser)

只有root用户才能使用该命令。

在这里插入图片描述
在这里插入图片描述

如果添加的用户已经存在:

在这里插入图片描述
在这里插入图片描述

上面介绍的/etc/passwd里面的几段,都可以通过此命令+参数来设定。但是本文只介绍最简单应用:添加用户

账号建好之后,再用passwd设定账号的密码。使用useradd命令所建立的账号,实际上是保存在/etc/passwd文本文件中。

修改用户(usermod)

可以修改用户的用户名、密码等几段信息。

usermod -g staff newuser2:将 newuser2 添加到组 staff 中 锁定帐号和解锁帐号:

在这里插入图片描述
在这里插入图片描述

usermod 不 允 许 你 改 变 正 在线 上 的 使 用 者 帐 号 名 称 。 当 usermod 用 来 改 变 user ID, 必 须 确 认 这 名 user 没 在 电 脑 上 执 行 任 何 程 序。

修改密码(passwd)

passwd 作为普通用户和超级权限用户都可以运行,但作为普通用户只能更改自己的用户密码,但前提是没有被root用户锁定;如果root用户运行passwd ,可以设置或修改任何用户的密码; passwd 用户名:用户名不填写 表示修改自己的密码

常用参数介绍: -k:保留即将过期的用户在期满后能仍能使用 -d:删除用户密码,仅能以root权限操作 -l:锁住用户无权更改其密码,仅能通过root权限操作 -u:解除锁定 -f:强制删除

删除用户(userdel)

userdel -r [username]

执行前需要查看是否在线运行程序以及是否有定时任务

ps -aux | grep "testf" -- 查当前用于的进程们
crontab -u testf -r -- 查这个用户的定时任务
userdel testf #删除用户但还会保留家目录
userdel -r #删除用户以及删除它的家目录
添加用户组(groupadd)

-g:指定新建工作组的id,默认从大于499中选取; -r:创建系统工作组,系统工作组的组ID小于500;

修改用户组(groupmod)
删除用户组(groupdel)

必须在所有用户都退出的情况下才能删除组

与用户相关的基础命令

who命令:显示当前登录用户的用户名,登陆终端,登陆时间以及登陆地址

在这里插入图片描述
在这里插入图片描述

last命令:查询最近用户登录 id命令:用于显示用户当前UID,GID和用户所属的组的列表 如:id testf whoami命令:用于显示当前用户的名称,有时可能会忘记自己是以什么身份登录到系统,特别当需要以特定身份启动某个服务器程序时。

在这里插入图片描述
在这里插入图片描述

groups命令:用于显示指定用户所属的用户组,如果未指定则显示当前用户所属的组 newgrp命令:切换群组。

单一用户要同时隶属多个群组,需利用交替用户的设置。若不指定群组名称,则newgrp指令会登入该用户名称的预设群组。

pwd命令:显示当前目录 cd命令:切换目录。cd 或者 cs ~直接回到家目录

运行级别

常用的运行级别是3和5

在这里插入图片描述
在这里插入图片描述

切换运行级别使用命令:init

面试题:如果root密码忘了,怎么找回? 答案:开机–>在引导时输入 回车键–> 进入单用户模式(因为单用户模式root不需要密码就能进入)–>使用passwd来修改密码

ls命令

该命令使用太频繁了。不加参数它显示除隐藏文件外的所有文件及目录的名字。

-a 列出目录下的所有文件,包括以 . 开头的隐含文件。 -k 以 k 字节的形式表示文件的大小。(比如联合-l一起使用:ls -lk) -l 列出文件的详细信息(常用) -R 列出所有子目录下的文件(慎用) -S 以文件大小排序 ls -l --color=no:去除掉颜色区分 -t按最后修改时间排序 -h显示文件大小时增加可读性(例:1K 234M 2G)

在这里插入图片描述
在这里插入图片描述

解释: 第一部分:drwxrwxr-x 第一个字符3种情况:文件(-)、目录(d),链接(l) 后面的9个字符:每3个为一组,分别代表文件所有者文件所有者所在用户组其它用户对文件拥有的权限。(rwx),读(r)、写(w)、执行(x)执行的权限有两个字符可选,最常见的一个是“x”代表可执行,另一个是“s”代表套接口文件(较为少见)。

也可用数字表示为:r=4,w=2,x=1 因此rwx=4+2+1=7

第二部分:"6"代表 “redis-2.8.2”这个目录下的目录文件数目(这个数目=隐藏目录数目+普通目录数目)。(如果这只是一个普通文件,那“2”就代表这个文件有两个别名,这个文件被人创建了一个硬链接文件)

第三部分:表示该文件的所属人 第四部分:表示该文件的所属组 第五部分:代表大小(字节数) 第六部分:Dec 2 2013代表文件(目录)的修改时间

用户、文件权限(chmod、chown、chgrp)
chmod

chmod命令:是我们进行授权时候经常用到的一个命令。 chmod 755 abc:赋予abc权限rwxr-xr-x chmod u=rwx,g=rx,o=rx abc:同上u=用户权限,g=组权限,o=不同组其他用户权限 chmod u-x,g+w abc:给abc去除用户执行的权限,增加组写的权限 chmod a+r abc:给所有用户添加读的权限

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
改变所有者(chown)和用户组(chgrp)命令

chown xiaoming abc:改变abc的所有者为xiaoming chgrp root abc:改变abc所属的组为root chown root ./abc:改变abc这个目录的所有者是root chown ‐R root ./abc:改变abc这个目录及其下面所有的文件和目录的所有者是root

任务调度 crontab

linux 系统则是由 cron (crond) 这个系统服务来控制的。Linux 系统上面原本就有非常多的计划性工作,因此这个系统服务是默认启动的。

crond 是linux下用来周期性的执行某种任务或等待处理某些事件的一个守护进程,与windows下的计划任务类似

在这里插入图片描述
在这里插入图片描述

用户任务调度:用户定期要执行的工作,比如用户数据备份、定时邮件提醒等。用户可以使用 crontab 工具来定制自己的计划任务。所有用户定义的crontab 文件都被保存在 /var/spool/cron目录中。其文件名与用户名一致。

在这里插入图片描述
在这里插入图片描述

/etc/cron.deny 该文件中所列用户不允许使用crontab命令 /var/spool/cron/:所有用户crontab文件存放的目录,以用户名命名

用户所建立的crontab文件中,每一行都代表一项任务,每行的每个字段代表一项设置,它的格式共分为六个字段,前五段是时间设定段,第六段是要执行的命令段,格式如下:

minute hour day month week command command:要执行的命令,可以是系统命令,也可以是自己编写的脚本文件。

在以上各个字段中,还可以使用以下特殊字符: 星号():代表所有可能的值,例如month字段如果是星号,则表示在满足其它字段的制约条件后每月都执行该命令操作。 逗号(,):可以用逗号隔开的值指定一个列表范围,例如,“1,2,5,7,8,9” 中杠(-):可以用整数之间的中杠表示一个整数范围,例如“2-6”表示“2,3,4,5,6” 正斜线(/):可以用正斜线指定时间的间隔频率,例如“0-23/2”表示每两小时执行一次。同时正斜线可以和星号一起使用,例如/10,如果用在minute字段,表示每十分钟执行一次。

crontab命令

crontab [-u user] file crontab [-u user] [ -e | -l | -r ]

-u user:用来设定某个用户的crontab服务(使用较少) -e:编辑某个用户的crontab文件内容。如果不指定用户,则表示编辑当前用户的crontab文件。 -l:显示某个用户的crontab文件内容,如果不指定用户,则表示显示当前用户的crontab文件内容。 -r:从/var/spool/cron目录中删除某个用户的crontab文件,如果不指定用户,则默认删除当前用户的crontab文件。 -i:在删除用户的crontab文件时给确认提示。

当crontab突然失效时,可以尝试/etc/init.d/crond restart解决问题。或者查看日志看某个job有没有执行/报错tail -f /var/log/cron。

磁盘管理 df、du
df命令

功能:检查文件系统的磁盘空间占用情况 -a 显示所有文件系统的磁盘使用情况,包括0块(block)的文件系统,如/proc文件系统。 -k 以k字节为单位显示。 -h 以可读性较好的方式显示。 df -h

du命令

功能:统计目录(或文件)所占磁盘空间的大小 该命令逐级进入指定目录的每一个子目录并显示该目录占用文件系统数据块(1024字节)的情况。若没有给出Names,则对当前目录进行统计。 -s 对每个Names参数只给出占用的数据块总数 -a 递归地显示指定目录中各文件及子孙目录中各文件占用的数据块数 -b 以字节为单位列出磁盘空间使用情况(系统缺省以k字节为单位)。 -k 以1024字节为单位列出磁盘空间使用情况 -c 最后再加上一个总计(系统缺省设置)。 -l 计算所有的文件大小,对硬链接文件,则计算多次

磁盘加载:mount、umount

略 df命令用来查看磁盘的使用情况。常用df -ah 或者 df -h;可以查看一级文件夹大小、使用比例、档案系统及其挂入点,但对文件却无能为力 du可以查看文件及文件夹的大小,统计文件大小相加。du命令用来查询档案或目录的磁盘使用空间,常用:du -sh 目录 或者 du -h 目录

主机名

查看主机名:hostname命令 hostname newName:可以临时更改主机名,重启后失效 hostname命令参数: -s, --short short host name -a, --alias alias names -i, --ip-address addresses for the host name

hostname与/etc/hostst ; /etc/sysconfig/network的关系

hosts文件的作用相当如DNS,提供IP地址到hostname的对应。早期的互联网计算机少,单机hosts文件里足够存放所有联网计算机。不过随着互联网的发展,这就远远不够了。于是就出现了分布式的DNS系统。由DNS服务器来提供类似的IP地址到域名的对应。

  • 第一部份:网络IP地址;
  • 第二部份:主机名或域名;
  • 第三部份:主机名别名;
在这里插入图片描述
在这里插入图片描述

Linux系统在向DNS服务器发出域名解析请求之前会查询/etc/hosts文件,如果里面有相应的记录,就会使用hosts里面的记录。/etc/hosts文件通常里面包含这一条记录。windows也是一样的,都会先检查本地的host

/etc/sysconfig/network文件:

在这里插入图片描述
在这里插入图片描述

此文件是针对本计算机的,是给计算机起的一个名字,是计算机的一个标识。因此要永久的修改主机名,请修改network文件

网络配置
手动设置ip地址

ifconfig <网络接口名称> network <子网掩码>

ifconfig eth0 192.168.1.222 netmask 255.255.255.0

注:手工配置linux网络只限于临时使用,配置不保存。

/etc/rc.d/init.d/network start 启动network
/etc/rc.d/init.d/network stop 停止network
/etc/rc.d/init.d/network restart 重启network

###修改完成后 一定要重启服务
service netword restart
ip命令

ip命令和ifconfig命令一样,但是功能更加强大,并旨在取代后者。

ip addr:可以查看所有的网卡的相关信息(包括ip地址) ip addr show eth0:查看指定网卡eth0的相关信息 ip route show:查看路由包来自的接口(本地接口)——

netstat命令

Netstat 命令用于显示各种网络相关信息,如网络连接,路由表,接口状态,端口使用情况等

-a (all)显示所有选项,netstat默认不显示LISTEN相关 -t (tcp)仅显示tcp相关选项 -u (udp)仅显示udp相关选项 -n 拒绝显示别名,能显示数字的全部转化成数字。(重要) -l 仅列出有在 Listen (监听) 的服務状态(一般我们也会加上此参数)

-p 显示建立相关链接的程序名(macOS中表示协议 -p protocol) -r 显示路由信息,路由表 -e 显示扩展信息,例如uid等 -c 每隔一个固定时间,执行该netstat命令。

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

案例: 列出所有端口: netstat -a (包含监听中的、连接中的。一般总数会有好几百个) 列出所有tcp端口: netstat -at 列出所有udp端口: netstat -au

只显示监听端口: netstat -l 显示 TCP 或 UDP 端口的统计信息 netstat -st 或 -su(使用较少)

netstat -p 可以与其它开关一起使用,就可以添加 “PID/进程名称” 到 netstat 输出中

持续输出 netstat 信息: netstat 将每隔一秒输出网络信息。 netstat -t -c 2 查找某个端口的运行信息: netstat -an | grep ':22'

最常用的: netstat -tunlp |grep 端口号:用于查看指定的端口号的进程情况,如查看8000端口的情况

netstat -tunlp |grep 9090

lsof -i:端口号 用于查看某一端口的占用情况,比如查看8000端口使用情况,lsof -i:8000

lsof(list open files)默认没有安装,若该命令没有需要安装

进程管理

在Linux系统中,每个执行的程序(代码)都称为一个进程。每一个进程都分配一个ID号

使用ps命令监控系统进程

ps命令有两种不同风格的语法规则: 最常用的为:ps -efps -aux

常用参数说明: -a:显示当前终端所有进程信息 -u:以用户的格式显示进程 -x:显示进程使用的参数

-A:显示所有进程。 -e :所有进程。等同于-A。 -f:全格式显示

-h 不显示标题。

ps 与grep 常用组合用法,查找特定进程 ps -ef |grep ssh

在这里插入图片描述
在这里插入图片描述
kill和killall

kill[参数][进程号]

kill命令可以带信号号码选项,也可以不带。如果没有信号号码,kill命令就会发出终止信号(15),这个信号可以被进程捕获,使得进程在退出之前可以清理并释放资源。也可以用kill向进程发送特定的信号。例如:

可以向多个进程发信号或终止它们。

列出所有信号名称:kill -l

在这里插入图片描述
在这里插入图片描述

只有第9种信号(SIGKILL)才可以无条件终止进程,其他信号进程都有权利忽略。所以此处一般只需要记住kill -9就可以了

Linux系统中的killall命令用于杀死指定名字的进程(kill processes by name)。我们可以使用kill命令杀死指定进程PID的进程,如果要找到我们需要杀死的进程,我们还需要在之前使用ps等命令再配合grep来查找进程,而killall把这两个过程合二为一,是一个很好用的命令。

killall[参数][进程名]

-Z 只杀死拥有scontext 的进程 -e 要求匹配进程名称 -I 忽略小写 -g 杀死进程组而不是进程 -i 交互模式,杀死进程前先询问用户 -l 列出所有的已知信号名称 -q 不输出警告信息 -s 发送指定的信号 -v 报告信号是否成功发送 -w 等待进程死亡 –help 显示帮助信息 –version 显示版本显示

杀死所有同名进程: killall nginx killall -9 bash 向进程发送指定信号: killall -TERM ngixn 或者 killall -KILL nginx

备注:killall其实使用较少,因为还是非常危险的

最佳实践:T掉某个非法用户
ps -aux | grep sshd

# 找到这个pId后
kill -9 pid
查看进程树pstree

pstree命令以树状图显示进程间的关系(display a tree of processes)。ps命令可以显示当前正在运行的那些进程的信息,但是对于它们之间的关系却显示得不够清晰。在Linux系统中,系统调用fork可以创建子进程,通过子shell也可以创建子进程,Linux系统中进程之间的关系天生就是一棵树,树的根就是进程PID为1的init进程。

-p:显示进程的PID -u:显示进程的所属用户

service

服务service本质就是进程,但是是运行在后台的。通常都会监听某个端口等待其它程序的请求。比如Mysql、SSHD、防火墙等。因此这个我们又称为守护进程,是Linux非常重要的知识点

其实service的绝对路径为/sbin/service ,打开这个文件cat /sbin/service,我们会发现其实它就是一个很普通的shell脚本:

#!/bin/sh

. /etc/init.d/functions

VERSION="$(basename $0) ver. 0.91"
USAGE="Usage: $(basename $0) < option > | --status-all | \
[ service_name [ command | --full-restart ] ]"
SERVICE=
SERVICEDIR="/etc/init.d"
OPTIONS=

if [ $# -eq 0 ]; then
   echo "${USAGE}" >&2
   exit 1
fi

cd /
while [ $# -gt 0 ]; do
  case "${1}" in
    --help | -h | --h* )
       echo "${USAGE}" >&2
       exit 0
       ;;
    --version | -V )
       echo "${VERSION}" >&2
       exit 0
       ;;
    *)
       if [ -z "${SERVICE}" -a $# -eq 1 -a "${1}" = "--status-all" ]; then
          cd ${SERVICEDIR}
          for SERVICE in * ; do
            case "${SERVICE}" in
              functions | halt | killall | single| linuxconf| kudzu)
                  ;;
              *)
                if ! is_ignored_file "${SERVICE}" \
		    && [ -x "${SERVICEDIR}/${SERVICE}" ]; then
                  env -i PATH="$PATH" TERM="$TERM" "${SERVICEDIR}/${SERVICE}" status
                fi
                ;;
            esac
          done
          exit 0
       elif [ $# -eq 2 -a "${2}" = "--full-restart" ]; then
          SERVICE="${1}"
          if [ -x "${SERVICEDIR}/${SERVICE}" ]; then
            env -i PATH="$PATH" TERM="$TERM" "${SERVICEDIR}/${SERVICE}" stop
            env -i PATH="$PATH" TERM="$TERM" "${SERVICEDIR}/${SERVICE}" start
            exit $?
          fi
       elif [ -z "${SERVICE}" ]; then
         SERVICE="${1}"
       else
         OPTIONS="${OPTIONS} ${1}"
       fi
       shift
       ;;
   esac
done

if [ -f "${SERVICEDIR}/${SERVICE}" ]; then
   env -i PATH="$PATH" TERM="$TERM" "${SERVICEDIR}/${SERVICE}" ${OPTIONS}
else
   echo $"${SERVICE}: unrecognized service" >&2
   exit 1
fi

这个命令不是在所有的linux发行版本中都有。主要是在redhat、fedora、mandriva和centos中。 service命令用于对系统服务进行管理,比如启动(start)、停止(stop)、重启(restart)、查看状态(status)等。

所以如果你执行命令:service mysqld start其实相当于执行了命令/etc/init.d/mysqld stop start

因此如果你写shell脚本为了保证兼容性,可以用完整命令代替service命令哦

开启、关闭防火墙(非常实用) service iptables start/stop/restart

系统监控命令 top htop

Linux系统可以通过top命令查看系统的CPU、内存、运行时间、交换分区、执行的线程等信息。通过top命令可以有效的发现系统的缺陷出在哪里。是内存不够、CPU处理能力不够、IO读写过高….

在这里插入图片描述
在这里插入图片描述

第一行:这行信息与命令**uptime**显示的信息相同 10:08:45 — 当前系统时间 10 days, 3:05 — 系统已经运行了10天3小时5分钟(在这期间没有重启过) 1 users — 当前有1个用户登录系统 load average: 0.00, 0.00, 0.00 — load average后面的三个数分别是1分钟、5分钟、15分钟的负载情况。

load average数据是每隔5秒钟检查一次活跃的进程数,然后按特定算法计算出的数值。如果这个数除以逻辑CPU的数量,结果高于5的时候就表明系统在超负荷运转了。

第二行: Tasks — 任务(进程),系统现在共有135个进程,其中处于运行中的有1个,134个在休眠(sleep),stoped状态的有0个,zombie状态(僵尸)的有0个。

第三行:cpu状态 0.3% us — 用户空间占用CPU的百分比。 0.0% sy — 内核空间占用CPU的百分比。 0.0% ni — 改变过优先级的进程占用CPU的百分比 99.7% id — 空闲CPU百分比 0.0% wa — IO等待占用CPU的百分比 0.0% hi — 硬中断(Hardware IRQ)占用CPU的百分比 0.0% si — 软中断(Software Interrupts)占用CPU的百分比

在这里CPU的使用比率和windows概念不同,如果你不理解用户空间和内核空间,可以先度娘稍微了解一下。比如:应用程序崩溃不会造成内核崩溃,拿windows举例来说,QQ崩溃掉不会造成程序死机。每个应用程序或者进程都会有自己特定的地址、私有数据空间,程序之间一般不会相互影响,例如QQ崩溃不会造成微信的崩溃。空间的隔离极大地提高了系统运行的稳定性。

第四行:内存状态 3808060k total — 物理内存总量(4GB) 3660048k used — 使用中的内存总量(3.6GB) 148012k free — 空闲内存总量(148M) 359760k buffers — 缓存的内存量 (359M)

使用中的内存总量(used)指的是现在系统内核控制的内存数,空闲内存总量(free)是内核还未纳入其管控范围的数量。纳入内核管理的内存不见得都在使用中,还包括过去使用过的现在可以被重复利用的内存,内核并不把这些可被重新使用的内存交还到free中去,因此在linux上free内存会越来越少,但不用为此担心。

第五行:swap交换分区 4184924k total — 交换区总量(4G) 0k used — 使用的交换区总量(0M) 4184924k free — 空闲交换区总量(4G) 2483956k cached — 缓冲的交换区总量(2483M)

如果出于习惯去计算可用内存数,这里有个近似的计算公式:第四行的free + 第四行的buffers + 第五行的cached,按这个公式此台服务器的可用内存:148M+259M+2483M = 2990M。

对于内存监控,在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 — 进程名称(命令名/命令行)

交互命令: ENTER或者SPACE键: 刷新显示 ‘B’: 触发粗体显示(一些重要信息会以加粗字体显示。这个命令可以切换粗体显示) ‘d’ 或‘s’: 设置显示的刷新间隔 :当键下’d’或’s’时,你将被提示输入一个值(以秒为单位),它会以设置的值作为刷新间隔。如果你这里输入了6.0,top将会每秒刷新 ‘R’: 反向排序 M:根据驻留内存大小进行排序。 ‘c’: 切换是否显示进程启动时的完整路径和程序名。 (特别好用) q:退出程序 k:相当于kill。后面提示出入信号和进程id

查看CPU信息、内存信息

先普及两个基本概念:

总核数 = 物理CPU个数 X 每颗物理CPU的核数 总逻辑CPU数 = 物理CPU个数 X 每颗物理CPU的核数 X 超线程数

查看cpu个数:

cat /proc/cpuinfo| grep "physical id"| sort| uniq| wc -l

物理CPU:physical id就是每个物理CPU的ID,你能找到几个physical id就代表你的计算机实际有几个CPU

查看每个物理CPU中core的个数(即核数)

cat /proc/cpuinfo| grep "cpu cores"| uniq

查看逻辑cpu个数

cat /proc/cpuinfo| grep "processor"| wc -l

查看cup型号

cat /proc/cpuinfo | grep name | cut -f2 -d: | uniq -c
# 输出:
4  Intel(R) Xeon(R) CPU E5-2682 v4 @ 2.50GHz

逻辑CPU:操作系统可以使用逻辑CPU来模拟出真实CPU的效果。在之前没有多核处理器的时候,一个CPU只有一个核,而现在有了多核技术,其效果就好像把多个CPU集中在一个CPU上。当计算机没有开启超线程时,逻辑CPU的个数就是计算机的核数。而当超线程开启后,逻辑CPU的个数是核数的两倍。实际上逻辑CPU的数量就是平时称呼的几核几线程中的线程数量

相应的,查看内存信息(不做过多介绍了):

cat /proc/meminfo
RPM和yum
wget、yum与apt-get用法及区别

RedHat 系列 1、常见的安装包格式 rpm包,安装rpm包的命令是“rpm -参数” 2、包管理工具 yum 3、支持tar包

安装:yum install 卸载:yum remove 更新:yum update

Debian系列 1、常见的安装包格式 deb包,安装deb包的命令是“dpkg -参数” 2、包管理工具 apt-get 3、支持tar包

安装:apt-get install 卸载:apt-get remove 更新:apt-get update

wget不是安装方式,它是一种下载工具,类似于迅雷。如果要下载一个软件,可以直接运行:wget 下载地址

如果当前Linux未安装wget,可按下列操作进行安装和检查是否安装成功:

  1. sudo apt-get update
  2. sudo apt-get install wget
  3. wget --version

使用wget下载一个 rpm包, 然后用 rpm -ivh xxx.rpm 安装这个软件,嫌麻烦的话,就可以直接用 yum install sqoop 来自动下载和安装依赖的rpm软件

软件包分类

RPM包:一种用于互联网下载包的打包以及安装工具。它包含在某些Linux分发版本中。扩展名:.rpm。Redhat Pachage Manager的缩写。类似windows中的setup.exe。Linux发型版本很多都采用,可以说是公认的行业标准了。

在这里插入图片描述
在这里插入图片描述

参考链接:Linux下二进制包、源代码包、rpm包

二进制包(Binary)以及源代码包(Source)两种。二进制包可以直接安装在计算机中,而源代码包将会由 RPM自动编译、安装。源代码包经常以src.rpm作为后缀名。

常用参数: -i, --install install package(s) -v, --verbose provide more detailed output -h, --hash print hash marks as package installs (good with -v) --replacepkge 无论软件包是否已被安装,都强行安装软件包 –test 安装测试,并不实际安装 –force 忽略软件包及文件的冲突

常用命令组合: -ivh:安装显示安装进度–install–verbose–hash -Uvh:升级软件包–Update; -e:删除包(卸载) 备注:如果其它包依赖于你这个包,那会报错的。如果我们就是要删除这个包,可以增加参数 --nodeps,就可以强制删除了,但是一般不推荐这么做 rpm -e --nodeps redis

例子: rpm -q redis //查询程序是否安装 rpm -ivh /media/cdrom/RedHat/RPMS/redis-3.0.10-1.4E.i386.rpm //按路径安装并显示进度 rpm -ivh --relocate /=/opt/gaim gaim-1.3.0-1.fc4.i386.rpm //指定安装目录 rpm -qa | grep httpd      #[搜索指定rpm包是否安装]–all搜索httpd rpm -qpR file.rpm       #[查看包]依赖关系 rpm -qi redis 查看软件包的基本信息

yum

yum是一个Shell前端软件包管理器。基于RPM包管理,能够从指定的服务器自动下载RPM包并且安装好。可以自动处理依赖关系,硬切一次性安装所有依赖的软件包,使用yum的前提是需要联网。

无须繁琐地一次次下载、安装。yum提供了查找、安装、删除某一个、一组甚至全部软件包的命令,而且命令简洁而又好记。

yum的命令形式一般是如下:yum [options] [command] [package ...]

1 安装 yum install 全部安装 yum install package1 安装指定的安装包package1 yum groupinsall group1 安装程序组group1

2 更新和升级 yum update 全部更新 yum update package1 更新指定程序包package1 yum check-update 检查可更新的程序 yum upgrade package1 升级指定程序包package1 yum groupupdate group1 升级程序组group1

3 查找和显示 yum info package1 显示安装包信息package1 yum list 显示所有已经安装和可以安装的程序包 yum list package1 显示指定程序包安装情况package1 yum groupinfo group1 显示程序组group1信息yum search string 根据关键字string查找安装包

4 删除程序 yum remove | erase package1 删除程序包package1 yum groupremove group1 删除程序组group1 yum deplist package1 查看程序package1依赖情况

5 清除缓存 yum clean packages 清除缓存目录下的软件包 yum clean headers 清除缓存目录下的 headers yum clean oldheaders 清除缓存目录下旧的 headers yum clean, yum clean all (= yum clean packages; yum clean oldheaders) 清除缓存目录下的软件包及旧的headers

将yum默认的下载源更换为国内的源能使下载速度更快。推荐选择阿里的源

Linux中profile、bashrc、bash_profile之间的区别和联系

具体参考链接:Linux中profile、bashrc、bash_profile之间的区别和联系

Linux source命令与export命令的区别

具体参考:linux source命令与export命令的区别

export 变量名=变量值 (功能描述:将shell变量输出为环境变量) course 配置文件 (功能描述:让修改后的信息立即生效) echo $变量名 (功能描述:查看环境变量的值)

分号&&和&,|和||说明与用法

在用linux命令时候,我们可以一行执行多条命令或者有条件的执行下一条命令

“;”分号用法

方式:command1 ; command2 用;号隔开每个命令, 每个命令按照从左到右的顺序,顺序执行, 彼此之间不关心是否失败, 所有命令都会执行。

“| ”管道符用法

方式:command1 | command2 上一条命令的输出,作为下一条命令参数

Linux所提供的管道符“|”将两个命令隔开,管道符左边命令的输出就会作为管道符右边命令的输入。连续使用管道意味着第一个命令的输出会作为 第二个命令的输入,第二个命令的输出又会作为第三个命令的输入,依此类推

“&”符号用法

&放在启动参数后面表示设置此进程为后台进程 方式:command1 &

默认情况下,进程是前台进程,这时就把Shell给占据了,我们无法进行其他操作,对于那些没有交互的进程,很多时候,我们希望将其在后台启动,可以在启动参数的时候加一个’&'实现这个目的。

“&&”符号用法 和 “||”符号用法

shell 在执行某个命令的时候,会返回一个返回值,该返回值保存在 shell 变量 $? 中。当 $? == 0 时,表示执行成功;当 $? == 1 时(我认为是非0的数,返回值在0-255间),表示执行失败。

有时候,下一条命令依赖前一条命令是否执行成功。如:在成功地执行一条命令之后再执行另一条命令,或者在一条命令执行失败后再执行另一条命令等。 shell 提供了 && 和 || 来实现命令执行控制的功能,shell 将根据 && 或 || 前面命令的返回值来控制其后面命令的执行。

语法格式如下:

格式:command1 && command2 [&& command3 …]

只有在 && 左边的命令返回真(命令返回值 $? == 0),&& 右边的命令才会被执行。

只有在 || 左边的命令返回假(命令返回值 $? == 1),|| 右边的命令才会被执行。这和 c 语言中的逻辑或语法功能相同,即实现短路逻辑或操作。

举例,ping命令判断存活主机

    ping -c 1 -w 1 192.168.1.1 &> /dev/null && result=0 ||result=1
    if [ "$result" == 0 ];then
      echo "192.168.1.1 is UP!"     
    else
      echo "192.168.2.1 is DOWN!"
    fi

比如定时任务:

0 10 * * * cd /opt/sayabc/script/appoint && /opt/sayabc/script/venv/bin/python3.5 little_interview_before.py >> /opt/sayabc/script/appoint/little_interview.log
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019年01月11日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 用户和组
    • /etc/passwd文件介绍
      • /etc/shadow文件介绍
        • /etc/group文件介绍
          • 添加用户(useradd或者adduser)
            • 修改用户(usermod)
              • 修改密码(passwd)
                • 删除用户(userdel)
                  • 添加用户组(groupadd)
                    • 修改用户组(groupmod)
                      • 删除用户组(groupdel)
                        • 与用户相关的基础命令
                        • 运行级别
                        • ls命令
                        • 用户、文件权限(chmod、chown、chgrp)
                          • chmod
                            • 改变所有者(chown)和用户组(chgrp)命令
                            • 任务调度 crontab
                              • crontab命令
                              • 磁盘管理 df、du
                                • df命令
                                  • du命令
                                    • 磁盘加载:mount、umount
                                    • 主机名
                                      • hostname与/etc/hostst ; /etc/sysconfig/network的关系
                                      • 网络配置
                                        • 手动设置ip地址
                                          • ip命令
                                            • netstat命令
                                            • 进程管理
                                              • 使用ps命令监控系统进程
                                                • kill和killall
                                                  • 最佳实践:T掉某个非法用户
                                                    • 查看进程树pstree
                                                    • service
                                                    • 系统监控命令 top htop
                                                    • 查看CPU信息、内存信息
                                                    • RPM和yum
                                                      • wget、yum与apt-get用法及区别
                                                        • 软件包分类
                                                          • yum
                                                          • Linux中profile、bashrc、bash_profile之间的区别和联系
                                                          • Linux source命令与export命令的区别
                                                          • 分号&&和&,|和||说明与用法
                                                            • “;”分号用法
                                                              • “| ”管道符用法
                                                                • “&”符号用法
                                                                  • “&&”符号用法 和 “||”符号用法
                                                                  相关产品与服务
                                                                  访问管理
                                                                  访问管理(Cloud Access Management,CAM)可以帮助您安全、便捷地管理对腾讯云服务和资源的访问。您可以使用CAM创建子用户、用户组和角色,并通过策略控制其访问范围。CAM支持用户和角色SSO能力,您可以根据具体管理场景针对性设置企业内用户和腾讯云的互通能力。
                                                                  领券
                                                                  问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档