文章目录
一、部署服务的基础操作
方向键↑ ↓
:取得历史命令。当我们移动上方向键时,每按一次,都会查询更前一次命令。
管道操作符|
:将上一个命令的输出结果,传给下一个命令,作为后者的输入
筛选匹配grep
:从文本文件或管道数据流中筛选匹配的行和数据。
1.1 系统监测
1.1.1 查看资源使用情况
- top 查看资源,c 详细内容
- shift+m:内存排序
- shift+p:CPU排序
1.1.2 查看端口占用情况
netstat -tunlp 用于显示 tcp,udp 的端口和进程等相关情况。
netstat -tunlp | grep 端口号
1.1.3 查看主机的IP地址
hostname -i
1.1.4 查看网路权限是否可通
ping通常用来测试与目标主机的连通性,根据它输出的信息来确定目标主机是否可访问。
linux下的ping和windows下的ping稍有区别,linux下ping不会自动终止,需要按ctrl+c终止或者用参数-c指定要求完成的回应次数。
示例如下:
ping 192.168.120.205
1、ping的通的情况
2、ping不通的情况
1.2 进程管理
1.2.1 查看指定进程
ps -aux|grep predict
1.2.2 查看所有进程
top:动态查看进程。
1.2.3 杀死进程
kill -9:强制杀死进程。
1.3 nohup起服务
nohup命令是在Linux系统下用于在后台执行命令,以防止用户退出终端或网络连接中断导致命令停止运行。
nohup python test.py >> test.log 2>&1
nohup命令将命令的输出重定向到文件中,使命令可以在后台持续运行。
> 和 >>
:输出重定向。前者覆盖旧文件,后者不覆盖、追加新内容。
2>&1
:将标准错误重定向到标准输出。即将报错信息记录到指定文件中。
1.4 定时任务
crontab命令用于设置周期性被执行的指令。该命令从标准输入设备读取指令,并将其存放于“crontab”文件中,以供之后读取和执行。crond 命令每分钟会定期检查是否有要执行的工作,如果有要执行的工作便会自动执行该工作。
1.4.1 查看crontab内容
crontab -l
:列出当前用户的crontab内容。
1.4.2 修改crontab文件
crontab -e
:修改当前用户的crontab内容。
- 按
i
键,进入到编辑模式,输入命令行内容。 - 按
esc
键,退出编辑模式,返回命令模式。 - 键盘打下
:wq
,保存退出。
1.4.3 时间格式
- * * * * command
分 时 日 月 周 命令
第1列表示分钟1~59 每分钟用*或者 */1表示
第2列表示小时1~23(0表示0点)
第3列表示日期1~31
第4列表示月份1~12
第5列标识号星期0~6(0表示星期天)
第6列要运行的命令
星号(*)
:代表所有可能的值,如month字段为星号,则表示每月都执行该命令操作。
逗号(,)
:可以用逗号隔开的值指定一个列表范围,例如,“1,2,5,7,8,9”
中杠(-)
:可以用整数之间的中杠表示一个整数范围,例如“2-6”表示“2,3,4,5,6”
正斜线(/)
:可以用正斜线指定时间的间隔频率,例如“*/2”表示每两小时执行一次。
1.5 linux的三种模式
1.5.1 命令模式
用户刚刚启动 vi/vim,便进入了命令模式。此状态下敲击键盘动作会被Vim识别为命令,而非输入字符。比如我们此时按下i,并不会输入一个字符,i被当作了一个命令。
i/o/a
:切换到编辑模式,以输入字符。: (英文冒号)
:切换到底线命令模式,以在最底一行输入命令。
1.5.2 编辑模式
在编辑模式中,这就和一般的文本编辑器一样了,用来输入代码等内容。
esc键
: 退出输入模式,切换到命令模式
1.5.3 底线命令模式
在命令模式下按下:(英文冒号)
就进入了底线命令模式。基本的命令有:
:q
:退出程序:w
:保存文件:wq
: 保存并退出
1.6 删除文件
删除非空文件夹
rm -rf 文件名
二、shell脚本编写
echo "***************start,time:" $(date "+%Y-%m-%d %H:%M:%S")
2.1 shell脚本
参考资料:Shell脚本编写
- shell入门
- shell注释
- shell变量
- shell字符串
- shell数组
- shell运算符
- shell流程控制
- shell函数
2.2 解决编码问题
当在Linux系统下执行本来存在的shell脚本文件,但是在执行时就是提示你文件不存在。in/sh^M: bad interpreter: No such file or directory。
此时一般原因就是你shell脚本在编写时的系统跟你的执行脚本的系统不一致。比如你在window系统编写的脚本,当拷贝到Linux系统时就会遇见此问题。或者在github上使用windows系统下载源文件中包含shell脚本文件时,当你解压并拷贝到Linux系统执行时,也可能发生此问题。
在windows下编辑的.sh文件的格式为dos格式,而linux只能执行格式为unix格式的脚本。因为在dos/window下按一次回车键实际上输入的是“回车(CR)”和“换行(LF)”,而Linux/unix下按一次回车键只输入“换行(LF)”,所以修改的sh文件在每行都会多了一个CR,所以Linux下运行时就会报错找不到命令。
解决办法:通过vi编辑器来修改文件的format格式。
1、首先用vi命令打开文件
[root@localhost test]# vi test.sh
2、在vi命令模式中使用 :set ff
命令,可以看到文件的格式为
fileformat=dos
3、修改文件format为unix,输入以下两种都可以
:set ff=unix
:set fileformat=unix
4、输入:wq
保存退出,重新执行脚本就正常了
三、进阶操作
3.1 用户和用户组
3.1.1 两种用户
Linux下有两种用户:超级用户(root)、普通用户。
超级用户:可以再linux系统下做任何事情,不受限制
普通用户:在linux下做有限的事情。
超级用户的命令提示符是“#”,普通用户的命令提示符是“$”。
3.1.2 su和sudo
1、su 切换用户
要从root用户切换到普通用户user,则使用 su user
。
要从普通用户user切换到root用户则使用 su、su root
,此时系统会提示输入root用户的口令。
注意:没有时间限制。
2、sudo 提升权限
普通用户只能对自己目录下的文件进行访问和修改,如果想要执行一个需要 root 权限的操作,通常是不行的。如果想要成功执行,则需要提升当前用户的级别。而 sudo 就是用来执行需要提升权限(通常是作为 root 用户)的命令。
PS:并不是所有用户都能使用 sudo 指令,用户能使用 sudo 的前提,是在 /etc/sudoers 文件里有与该用户相关的信息(即用户属于 sudo 用户组)。
sudo
: 暂时切换到超级用户模式以执行超级用户权限,提示输入密码时该密码为当前用户的密码,而不是超级账户的密码。不过有时间限制,Ubuntu默认为一次时长15分钟。
sudo -i
: 为了频繁的执行某些只有超级用户才能执行的权限,而不用每次输入密码,可以使用该命令。提示输入密码时该密码为当前账户的密码。没有时间限制。执行该命令后提示符变为“#”而不是“$”。想退回普通账户可以执行“exit”或“logout” 。
sudo su
:运行sudo命令给su命令提权,运行su命令。
3.2 文件
3.2.1 树状目录结构
各部分含义,参考资料:Linux基础-目录结构
3.2.2 文件权限
linux文件的权限可以分为四类:可读、可写、可执行、没有权限。分别用字符r、w、x、- 表示。
在linux命令行中,输入:ls -la
, 可以查看当前目录下面所有文件的权限。权限不分,一共包含9个字符(最前面的-不算),每三个一组分别代表拥有者、用户组其它用户以及其它用户的权限。
3.2.3 常用操作
pwd:查看当前工作目录
cd:定位到指定工作目录
ls -l / ls -a:列出目录内容
cp:复制文件和目录
3.2.4 文件解压缩
tar:文件后缀.tar/.tgz。
gzip/gunzip:文件后缀.gz。
zip:文件后缀.zip。Windows常用,Linux不常用。
3.3 yum工具—软件包管理
待补充
3.4 环境
待补充
四、运维
4.1 资源监测
Linux系统可以通过top命令查看系统的运行状态,包括负载,内存使用(交换分区),CPU使用、当前运行的线程,进程等信息。
top - 11:09:00 up 324 days, 17:24, 1 user, load average: 0.38, 0.38, 0.37
Tasks: 136 total, 1 running, 135 sleeping, 0 stopped, 0 zombie
%Cpu(s): 0.9 us, 0.5 sy, 0.0 ni, 98.5 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem : 16267100 total, 1142448 free, 7907452 used, 7217200 buff/cache
KiB Swap: 0 total, 0 free, 0 used. 7969352 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
5466 elastic+ 20 0 7503920 1.508g 39564 S 4.0 9.7 4:46.62 java
9544 root 20 0 1306232 190444 6404 S 2.0 1.2 4425:19 mongod
第一行:这行显示的信息与命令uptime显示的信息相同
top - 11:09:00 up 324 days, 17:24, 1 user, load average: 0.38, 0.38, 0.37
对应的信息:系统当前时间 up 系统到目前为止运行的时间, 当前系统的登陆用户数量,load average后面的三个数字分别表示距离现在一分钟,五分钟,十五分钟的负载情况。
注意:load average数据是每隔5秒钟检查一次活跃的进程数,然后按特定算法计算出的数值。如果这个数除以逻辑CPU的数量,结果高于5的时候就表明系统在超负荷运转了。
第二行:任务进程
Tasks: 136 total, 1 running, 135 sleeping, 0 stopped, 0 zombie
对应的信息:tasks表示任务(进程),136则表示现在有136个进程,其中处于运行中的有1个,135个在休眠(挂起),stopped状态即停止的进程数为0,zombie状态即僵尸的进程数为0个。
第三行:CPU状态信息
%Cpu(s): 0.9 us, 0.5 sy, 0.0 ni, 98.5 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
依次对应:
us——用户空间(user)占用cpu的百分比
sy——内核空间(system)占用cpu的百分比
ni——改变过优先级(niced)的进程占用cpu的百分比
id——空闲(idolt)CPU百分比
wa——IO等待(wait)占用cpu的百分比
hi——IRQ 硬中断(Hardware)占用cpu的百分比
si——软中断(software)占用cpu的百分比
st——被hypervisor偷去的时间
第四和第五行:当前内存状态信息, 单位都是KiB
KiB Mem : 16267100 total, 1142448 free, 7907452 used, 7217200 buff/cache
KiB Swap: 0 total, 0 free, 0 used. 7969352 avail Mem
对应信息:
- Mem:物理内存总量(16G)
- free: 空闲内存总量(1G)
- used: 使用中的内存总量
- buff/cache: 用作内核缓存的内存量
对于内存监控,在top里我们要时刻监控swap交换分区的used,如果这个数值在不断的变化,说明内核在不断进行内存和swap的数据交换,这是真正的内存不够用了。正常情况下swap应该很少被使用,used值比较大说明交换空间被使用的比较多,如果通过vmstat命令看到swap in/out的比较频繁的话,说明系统内存严重不足,整体性能已经受到严重影响
- Swap: 交换区总量
- free:空闲交换区总量
- used: 使用的交换区总量
- avail Mem:表示可用于进程下一次分配的物理内存数量,这个大小一般比free大一点,因为除了free的空间外,系统还能立即释放出一些空间来。
第七行:各进程的监控
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
依次对应:
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 — 进程名称(命令名/命令行)