操作系统的作用:
桌面操作系统
服务器操作系统
嵌入式操作系统
移动设备操作系统
/home/user
或~
:用户工作目录或家目录
/
:根目录,一般根目录只存放目录,在linux下有且只有一个根目录,所有东西从这开始
/bin、/usr/bin
:可执行二进制文件的目录,如常用的命令:ls,tar,mv,cat
/boot
:放置linux系统启动时用到的一些文件,如linux内核文件:/boot/vmlinuz,系统引导管理器:/boot/grup
/dev
:存放linux系统下的设备文件,访问文件相当于访问设备,挂载光驱:mount/dev/cdrom/mnt
etc
:系统配置文件存放的目录
/home
:系统默认的用户家目录,新增用户账号时,用户的家目录存放在此目录下
/lib、/usr/lib、/usr/local/lib
:系统使用的函数库的目录,程序在执行的过程中,需要调用一些额外的参数时需要函数库协助
lost+fount
:系统异常产生错误时会将一些遗失的片段放置于此目录下
mnt/media
:光盘默认挂载点,通常光盘挂载于/mnt/cdrom下,也可以选择任意位置进行挂载
/opt
:给主机额外安装软件所摆放的目录
/pro
:此目录的数据都在内存中,如系统核心、外部设备,不占用磁盘空间
/root
:系统管理员root的家目录
/sbin、/usr/sbin、/usr/local/sbin
:放置系统管理员使用的可执行命令
tmp
:一般用户和正在执行的程序临时存放文件的目录,任何人都可以访问,重要数据不存放此处
/srv
:服务启动之后需要访问的数据目录,如www服务需要访问的网页数据存放在/srv/www内
/usr
:应用程序存放目录
/usr/bin
:存放应用程序/usr/share
:存放共享数据/usr/lib
:存放不能直接运行的,却是许多程序运行所必需的一些函数库文件/usr/local
:存放软件升级包/usr/share/doc
:系统说明文件存放目录/usr/share/man
:程序说明文件存放目录/var
:放置系统执行过程中经常变化的文件
/var/log
:随时更改的日志文件/var/spool/mail
:邮件存放的目录/var/run
:程序或服务启动后,其PID存放在该目录下序号 | 命令 | 对应英文 | 作用 |
---|---|---|---|
01 | ls | list | 查看当前文件夹下的内容 |
02 | pwd | print work directory | 查看当前所在文件夹 |
03 | cd[目录名] | change directory | 切换文件夹 |
04 | touch[文件名] | touch | 如果文件不存在,新建文件 |
05 | mkdir[目录名] | make directory | 创建目录 |
06 | rm[文件名] | remove | 删除指定的文件名 |
07 | clear | clear | 清屏 |
终端命令格式
command [-options] [parameter]
command
:命令名,相应功能的英文单词或单词的缩写
[-options]
:选项,可用来对命令进行控制,也可以省略
parameter
:传给命令的参数,可以是零个,一个或者多个
[]
:代表可选
command --help
显示 command 命令的帮助信息
man command
操作键 | 功能 |
---|---|
空格键 | 显示手册的下一页 |
Enter键 | 一次滚动手册页的一行 |
b | 回滚一屏 |
f | 前滚一屏 |
q | 退出 |
/word | 搜索word字符串 |
Linux 下文件和目录的特点
linux 文件或者目录名称最长可以有256
个字符
以.
开头的文件为隐藏文件,需要用-a
参数才能显示
.
表示当前目录
..
代表上一级目录
ls 常用选项
-a
:显示指定目录下所有子目录与文件,包括隐藏文件
-l
:以列表方式显示文件的详细信息
-h
:配合-l 以人性化的方式显示文件大小
ls 通配符的使用
通配符 | 含义 |
---|---|
* | 代表任意个数字符 |
? | 代表任意一个字符,至少1个 |
[] | 表示可以匹配字符组中的任何一个 |
[abc] | 匹配a、b、c中的任意一个 |
abc | 匹配从a到f范围内的任意一个字符 |
cd
命令 | 含义 |
---|---|
cd | 切换到当前用户的主目录(/home/用户目录) |
cd ~ | 切换到当前用户的主目录(/home/用户目录) |
cd . | 保持在当目录不变 |
cd … | 切换到上级目录 |
cd - | 可以在最近两次工作目录之间来回切换 |
相对路径和绝对路径
相对路径:在输入路径时,最前面的不是/
或者~
,表示相对当前目录所在的目录位置
绝对路径:在输入路径时,最前面的是/
或者~
,表示从根目录/家目录开始的具体目录位置
touch
:创建文件或修改文件时间
mkdir
:创建一个新的目录
-p
:可以递归创建目录
不能创建与当前目录中同名的文件
rm
:删除文件或目录(删除后无法恢复)
-f
: 强制删除,忽略不存在的文件,无需提示-r
: 递归删除目录下的内容,删除文件夹时必须加此参数序号 | 命令 | 对应英文 | 作用 |
---|---|---|---|
01 | tree [目录名] | tree | 以树状图列出文件目录结构 |
02 | cp 源文件 目标文件 | copy | 复制文件或者目录 |
03 | mv 源文件 目标文件 | move | 移动文件或者目录/文件或者目录重命名 |
# 01.只显示目录
tree -d
# 02.覆盖文件前提示
cp -i
# 02.若给出的源文件是目录文件,则cp将递归复制该目录下的所有子目录和文件,目标文件必须为一个目录名
cp -r
# 03.覆盖文件前提示
mv -i
序号 | 命令 | 对应英文 | 作用 |
---|---|---|---|
01 | cat 文件名 | concatnate | 查看文件内容、创建文件、合并文件、追加文件内容等功能 |
02 | more 文件名 | more | 分屏显示文件内容 |
03 | grep 搜索文本 文本名 | grep | 搜索文本文件内容 |
cat
:查看文件内容、创建文件、文件合并、追加文件内容等功能。会一次显示所有的内容,适合查看内容较少的文本文件
-b
: 对非空输出行编号
-n
: 对输出的所有行编号
more
:用于分屏显示文件内容,每次只显示一页,适合查看内容较多的文本文件
操作键:
操作键 | 功能 |
---|---|
空格键 | 显示手册页的下一屏 |
Enter键 | 一次滚动手册页的一行 |
b | 回滚一屏 |
f | 前滚一屏 |
q | 退出 |
/word | 搜索word字符串 |
grep
: 强大的文本搜索工具,对文本进行模式查找,即正则表达式查找
选项 | 含义 |
---|---|
-n | 显示匹配行及行号 |
-v | 显示不包括匹配文本的所有行(相当于求反) |
-i | 忽略大小写 |
^a
:行首,搜索以a开头的行ke$
:行尾,搜索以ke结束的行echo 文字内容
echo会在终端显示参数指定的文字,通常会和重定向联合使用
重定向 >
和 >>
linux 允许将命令执行结果重定向到一个文件
将本应显示在终端上的内容输出/追加到指定文件中
其中
>
表示输出,会覆盖文件原有的内容
>>
表示追加,会将内容追加到已有文件的末尾
管道 |
Linux 允许将一个命令的输出可以通过管道做为另一个命令的输入
常用的管道命令:
more :分屏显示内容
grep :在命令执行结果的基础上查询指定的文本
序号 | 命令 | 对应英文 | 作用 |
---|---|---|---|
01 | shutdown选项 时间 | shutdown | 关机/重新启动 |
在这里插入代码片
shutdown命令可以安全关闭或者重新启动系统:shutdown -r
不指定选项和参数,默认表示1分钟之后关闭电脑
远程维护服务器时,最好不要关闭系统,而应该重新启动系统
常用命令实例:
# 重新启动操作系统,其中now表示现在
shutdown -r now
# 立即关机,其中now表示现在
shutdown now
# 系统在今天的20:25会关机
shutdown 20:25
# 系统再过十分钟后关机
shutdown +10
# 取消之前指定的关机计划
shutdown -c
网卡
IP地址
ifconfig
ifconfig
可以查看/配置计算机当前的网卡配置信息
# 查看网卡配置信息
ifconfig
# 查看网卡对应的IP地址
ifconfig | grep inet
一台计算机中可能会有一个物理网卡和多个虚拟网卡,在Linux中物理网卡的名字通常以ensXX表示
# 检测到目标主机是否连接正常
ping ip地址
# 检测本地网卡工作正常
ping 127.0.0.1
在Linux中SSH是非常常用的工具,通过SSH客户端可以连接到运行了SSH服务器的远程机器上
域名
由一串用点分隔的名字组成,例如:www.itcast.cn
是IP地址的别名,方便用户记忆
端口号
IP地址:通过IP地址找到网络上的计算机
端口号:通过端口号可以找到计算机上运行的应用程序
SSH服务的默认端口号是22,如果是默认端口号,在连接的时候,可以省略
ssh [-p port] user@remote
user
: 远程主机上的用户名,如果不指定的话默认为当前用户
remote
:是远程机器的地址,可以是IP/域名,或者是别名
port
:是SSH Sever监听的端口,如果不指定,就默认值 22提示:1. 使用exit退出当前用户的登录 2. 工作中,SSH服务器的端口号很有可能不是22,如果遇到这种情况就需要使用-p选项,指定正确的端口号,否则无法正常连接到服务器
# 本地电脑 windows --> ubuntu
①ssh jq@192.168.70.128
②把本地数据发送到远程主机上
scp d:\Users\Jq\Desktop\课表.png jq@192.168.70.128:Desktop/python20
③把远程主机上的数据拷贝到本地
scp jq@192.168.70.128:/home/jq/python20/123.txt d:\Users\Jq\Desktop\test
# 加上 -r 选项可以传送文件夹
把本地文件夹test上传到远程主机
scp -r d:\Users\Jq\Desktop\test jq@192.168.70.128:/home/jq/python20
# 把远程家目录下的Desktop复制到当前目录下的demo文件夹
scp -r user@remote:Desktop demo
注意:scp这个终端命令只能在linux或者UNIX系统下使用
如果在Windows系统中,可以安装PuTTY,使用pscp命令工具或者安装FileZilla进行文件传输
免密码登录
步骤:
配置公钥
执行 ssh-keygen 即可生成SSH钥匙,一路回车即可
上传公钥到服务器
执行 ssh-copy-id -p port user@remote ,可以让远程服务器记住我们的公钥
配置别名
Host mac
HostName ip地址
User itheima
Port 22
ls-l 可以查看文件夹下文件的详细信息
su
表示使用另一个用户的身份
sudo
用来以其他身份来执行命令,预设的身份为root
用户在使用sudo时,必须先输入密码,之后有5分钟的有效期限,超过期限则必须重新输入密码
若未经授权的用户企图使用sudo,则会发出警告邮件给管理员
passwd文件
/etc/passwd 文件存放的是用户的信息,由6个分号组成的7个信息,分别是
usermod
usermod 可以用来设置用户的主组/附加组和登录Shell,命令格式如下:
主组:通常在新建用户时指定,在etc/passwd的第4列GID对应的组
附加组:在etc/goup中最后一列表示该组的用户列表,用于指定用户的附加权限
提示:设置了用户的附加组之后,需要重新登录才能生效!
#修改用户的主组(passwd中的GID)
usermod -g 组 用户名
# 修改用户的附加组
usermod -G 组 用户名
# 修改用户登录 shell
usermod -s /bin/bash 用户名
which
可以查看执行命令所在的位置
# 修改文件|目录的拥有者
chown 用户名 文件名|目录名
#递归修改文件|目录的组
chgrp -R 组名 文件名|目录名
# 递归修改文件权限
chmod -R 755 文件名|目录名
755分别对应拥有者、组、其他用户
直接修改文件|目录的 读|写|执行 权限,但是不能精确到拥有者|组|其他
chmod +/-rwx 文件名|目录名
注意:
在Linux中,文件名和文件的数据是分开存储的
在Linux中,只有文件的硬链接数==0才会被删除
使用ls -l 可以查看一个文件的硬链接数量
在日常工作中,几乎不会建立文件的硬链接
打包/解包
# 打包文件
tar -cvf 打包文件.tar 被打包的文件/路径…
# 解包文件
tar -xvf 打包文件.tar
注意:f 必须放在最后面,其他选项顺序可以随意
gzip
# 压缩文件
tar -zcvf 打包文件.tar.gz 被压缩的文件/路径
# 解压缩文件
tar -zxvf 打包文件.tar.gz
# 解压缩到指定路径
tar -zxvf 打包文件.tar.gz -C 目标路径
bzip2(two)
# 压缩文件
tar -jcvf 打包文件.tar.bz2 被压缩的文件/路径
# 解压缩文件
tar -jxvf 打包文件.tar.bz2
安装软件
sudo apt install 软件包
卸载软件
sudo apt remove 软件名
更新已安装的包
sudo apt upgrade
psutil 获取服务器的硬件信息
cpu的核心数 psutil.cpu_count()
cpu物理核心数 psutil.cpu_count(logical=False)
cpu的使用率 psutil.cpu_percent(interval=0.5)
内存信息 psutil.virtual_memory()
内存的使用率 psutil.virtual_memory().percent
硬盘的分区信息:psutil.disk_partitions()
硬盘的指定路径的硬盘信息:psutil.disk_usage(“/”)
硬盘的使用率:psutil.disk_usage(“/”).percent
网络数据信息:
收到的字节数:psutil.net_io_counters().bytes_recv
发送的字节数:psutil.net_io_counters().bytes_sent
获取开机时间:psutil.boot_time()
思路:
1、导入模块
2、定义变量保存cpu信息、内存信息、硬盘信息、网络信息
3、拼接要显示的字符串(格式化的字符串拼接)
4、保存信息到文件中
# 1、导入模块
import psutil
import datetime
# 2、定义变量保存CPU的使用率
cpu_per = psutil.cpu_percent(interval=0.5)
# 3、定义变量保存内存信息
memory_info = psutil.virtual_memory()
# 4、定义变量保存硬盘的信息
disk_info = psutil.disk_usage("/")
# 5、定义变量保存网络的信息
net_info = psutil.net_io_counters()
# 获取系统当前时间
current_time = datetime.datetime.now().strftime("%F %T")
# 6、拼接字符串显示
log_str = "|-------------------|------------|-------------|-------------|----------------------------|\n"
log_str += "| 监控时间 | CPU使用率 | 内存使用率 | 硬盘使用率 | 网络收发量 |\n"
log_str += "| | (共%d核CPU) | (总计%dG内存) | (总计%dG硬盘)| |\n" % (psutil.cpu_count(logical=False), memory_info.total/1024/1024/1024, disk_info.total/1024/1024/1024)
log_str += "|-------------------|------------|-------------|-------------|----------------------------|\n"
log_str += "|%s| %s%% | %s%% | %s%% | 收:%s/发:%s |\n" % (current_time, cpu_per, memory_info.percent, disk_info.percent, net_info.bytes_recv, net_info.bytes_sent)
log_str += "|-------------------|------------|-------------|-------------|----------------------------|\n"
print(log_str)
# 7、保存监控信息到日志文件
f = open("log.txt", "a")
f.write(log_str + "\n\n")
f.close()
current_time = datetime.datetime.now().strftime("%F %T")
def linux_monitor(time):
"""定义函数,实现硬件信息的获取"""
# 2、定义变量保存CPU的使用率
cpu_per = psutil.cpu_percent(interval=time)
# 3、定义变量保存内存信息
memory_info = psutil.virtual_memory()
# 4、定义变量保存硬盘的信息
disk_info = psutil.disk_usage("/")
# 5、定义变量保存网络的信息
net_info = psutil.net_io_counters()
# 获取系统当前时间
current_time = datetime.datetime.now().strftime("%F %T")
# 6、拼接字符串显示
log_str = "|-------------------|------------|-------------|-------------|----------------------------|\n"
log_str += "| 监控时间 | CPU使用率 | 内存使用率 | 硬盘使用率 | 网络收发量 |\n"
log_str += "| | (共%d核CPU) | (总计%dG内存) | (总计%dG硬盘)| |\n" % (
psutil.cpu_count(logical=False), memory_info.total / 1024 / 1024 / 1024, disk_info.total / 1024 / 1024 / 1024)
log_str += "|-------------------|------------|-------------|-------------|----------------------------|\n"
log_str += "|%s| %s%% | %s%% | %s%% | 收:%s/发:%s |\n" % (
current_time, cpu_per, memory_info.percent, disk_info.percent, net_info.bytes_recv, net_info.bytes_sent)
log_str += "|-------------------|------------|-------------|-------------|----------------------------|\n"
print(log_str)
# 7、保存监控信息到日志文件
f = open("log.txt", "a")
f.write(log_str + "\n\n")
f.close()
def main():
"""程序的入口"""
while True:
linux_monitor(5)
终端方式运行
第一步,文件增加 可执行权限 chmod u+x xxxx.py
第二步,告诉终端代码使用 python解释器执行
#!/home/demo/.Envs/1-basics-python3/bin/python3
第三步, 进入虚拟环境运行
workon 1-basics-python3
第四步,./xxxx.py