linux快速入门
图形化和命令行终端的
图形化操作
命令行终端呢?
# pwd命令打印当前工作路径
pwd # 结果 /root
# 创建目录
mkdir # mkdir haowanma
# 删除文件夹
# -r参数为递归删除
# -f为强制删除,使用后没用互动提问是否删除
rmdir -r /opt/*
#删除文件
rm -rf dahong.txt
关于企业级服务器的终端概念
服务器是不会安装图形化软件的,只有纯黑屏
引入远程连接的概念
公司里,基本是远程连接服务器,首先你要获取,服务器的信息
ip
账户 root
密码 123456
如何远程连接
使用客户端工具,xshell,securtCRT,以及其他各种工具
他们的本质,都是使用ssh命令去操作的。
xshell
你的运维同事,给你一个文档
123.206.16.61
账户,wangrengang
密码,werwer(&(&*&^))
使用ssh(客户端)命令去连接
如何理解协议的概念?
计算机,程序A和程序B之间,互相遵循,认可的一套计算机通信协议。
就好比,中国人,都说方言(各种软件之间,独有的通信协议)
- 协议,可以理解为是人与人之间交流的一个语言
- 计算机程序之间的通信协议
比如,在整个互联网中,所有的网站之间的通信,有一个公共的协议标准----http协议
(理解为,中国人,都说的普通话)
1.退出linux会话,退出登录
[root@lamp-241 ~]# exit
2.使用logout命令,退出linux会话
[root@lamp-241 ~]# logout
Connection closing...Socket close.
Connection closed by foreign host.
Disconnected from remote host(day05) at 09:38:19.
Type `help' to learn how to use Xshell prompt.
[C:\~]$
[C:\~]$
[C:\~]$
[C:\~]$
[C:\~]$
3.重新登录,使用命令去登录,和xshell是一样的事
也就是说,提醒你,linux下,ssh远程连接的命令,和这个有点区别!!
window下,提供的ssh指令,以及它的帮助文档
[C:\~]$ ssh
NAME
ssh - connects to a host using the SSH protocol.
SYNOPSYS , 写在中括号里的,参数,一般指的是可选的,可用可不用
ssh [user@]host[ port][;host[ port]]
简写的语法就是 @ 就是一个占位符
user 登录系统的账号
@host 登录服务器的ip地址
port 端口
ssh user@host port
OPTIONS
user Indicates the user's login name.
host Indicates the name, alias, or Internet address of the
remote host.
port Indicates a port number (address of an application).
If the port is not specified, the default ssh port
(22) is used. (远程ssh服务提供的端口)
[C:\~]$
4,远程用ssh命令连接linux
是否可以不添加端口? ,回答,可以,系统默认给你添加22端口
[C:\~]$ ssh root@192.168.0.241
什么情况下,需要你指定端口号再去连接? ssh端口,被改为了7890
回答,当你的服务器,为了保证机器安全,不要被人恶意的登录
修改了端口号,的连接方式,[C:\~]$ ssh root@192.168.0.241 7890
0 ~ 65535
root
123
11111
123456789
qwe123
1234aaa
woaini888
服务器就会成为肉鸡,矿机
从ssh登录角度
以及线上跑的各种程序,默认端口,都容易被攻击
4. 来看看,linux平台,提供的ssh命令,如何看帮助信息,以及语法
两台机器的连接,远程登录,大前提是?你的保障两台机器,能互相访问,ping的通。
任务,远程登录,192.168.0.131
查看linux下的ssh帮助信息
[root@lamp-241 ~]# ssh
usage: ssh [-1246AaCfGgKkMNnqsTtVvXxYy] [-b bind_address] [-c cipher_spec]
[-D [bind_address:]port] [-E log_file] [-e escape_char]
[-F configfile] [-I pkcs11] [-i identity_file]
[-J [user@]host[:port]] [-L address] [-l login_name] [-m mac_spec]
[-O ctl_cmd] [-o option] [-p port] [-Q query_option] [-R address]
[-S ctl_path] [-W host:port] [-w local_tun[:remote_tun]]
[user@]hostname [command]
[root@lamp-241 ~]#
简单整理就是
linux的命令是,
指令 空格 可选的参数 操作的对象
ssh -p 22 root@192.168.0.132
错误演示,以及分析
linux下如何用ssh登录,以及错误分析
终端是什么概念
可以输入输出的都叫终端,如手机,电脑,黑窗口
终端就是一个可以让你操作的地方,输入linux命令的地方,你打开终端,就可以输入指令,发给操作系统。
服务器本身,自带的几个终端。
ctrl + alt + f1 ~f7 组合键 # 7个黑窗口
ctrl + alt + f1 ,一个终端,基本对应有一个人再用
ctrl + alt + f2 ~ f7
对应了7个终端
xshell这样的终端
Linxu命令
关于linux命令的语法
1.一般情况下,【参数】是可选的,一些情况下【文件或路径】也是可选的
# 比如ls命令的操作,可自由添加参数,以及后面的文件对象
# 什么都不加的形式
[root@lamp-241 ~]# pwd
/root
[root@lamp-241 ~]#
[root@lamp-241 ~]# touch ./很不错.txt
[root@lamp-241 ~]#
[root@lamp-241 ~]#
[root@lamp-241 ~]# ls
很不错.txt
[root@lamp-241 ~]# ls .
很不错.txt
[root@lamp-241 ~]#
[root@lamp-241 ~]# ls ./
很不错.txt
# 添加选项的形式 -l 列出详细信息 ,以及操作对象的可选
[root@lamp-241 ~]#
[root@lamp-241 ~]# ls -l
total 0
-rw-r--r-- 1 root root 0 Mar 3 22:46 很不错.txt
[root@lamp-241 ~]#
[root@lamp-241 ~]#
[root@lamp-241 ~]# ls -l .
total 0
-rw-r--r-- 1 root root 0 Mar 3 22:46 很不错.txt
[root@lamp-241 ~]#
[root@lamp-241 ~]#
[root@lamp-241 ~]# ls -l ./
total 0
-rw-r--r-- 1 root root 0 Mar 3 22:46 很不错.txt
[root@lamp-241 ~]#
[root@lamp-241 ~]#
[root@lamp-241 ~]# ls -l /root
total 0
-rw-r--r-- 1 root root 0 Mar 3 22:46 很不错.txt
2.参数 , 同一个命令,跟上不同的参数执行不同的功能
ls -l 参数 ,显示详细信息
可以用ls --help参数,查看ls的参数有哪些,以及作用
组合参数 ,命令,后面可以跟上多个可选参数,写法也有俩
支持组合参数
也支持单独写参数
组合参数 -lh 等于 -l -h
[root@lamp-241 ~]# ls -lh
查看日志文件的详细信息,与大小
[root@lamp-241 ~]# ls -lh /var/log/
3.执行linux命令,添加参数的目的是让命令更加贴切实际工作的需要!
需要用到什么参数,就添加,否则可以不加
想看到文件的详细信息,就加-l
ls 不加参数,看到文件名即可
4.linux命令,参数之间,普遍应该用一个或多个空格分割!
[root@lamp-241 ~]# ls -lh /var/log/
关于命令提示符(修改命令提示符)
1.切换用户显示 su - 用户名
2. 修改主机名
退出用户登录 logout
hostnamectl set-hostname 主机名
关于最后一个命令提示符,默认表示,用户所处路径的最后一个文件夹
[root@linux0224 opt]# cd /var/log/
[root@linux0224 log]#
tab键补全
linux有大量的命令,你记不住,单词
以及有大量的文件路径,你也记住不太长
linux系统,提供了tab补全,让你自动的,补充这些命令,或者补充这些文件路径
1.关于命令的补全
2.关于路径的补全
让你找到网卡的配置文件
关于命令的补全
关于文件的补全1
关于文件补全,找到网卡文件的练习
[root@linux0224 ~]# ls /etc/sysconfig/network-scripts/ifcfg-ens33
严格区分大小写
windows:不区分大小写,比如你创建文件夹,输入大写,小写,windows都认为是同一个
linux,严格区分大小写
[root@lamp-241 ~]# ls
anaconda-ks.cfg happy.txt hello
[root@lamp-241 ~]#
[root@lamp-241 ~]# touch Happy.txt
[root@lamp-241 ~]# ls
anaconda-ks.cfg happy.txt Happy.txt hello
[root@lamp-241 ~]# mkdir Hello
[root@lamp-241 ~]#
[root@lamp-241 ~]# ls
anaconda-ks.cfg happy.txt Happy.txt hello Hello
意义在,
全系统搜索某个文件,关注大小写
Hello.txt
hello.txt
linux的命令返回结果理解
1.你要创建些什么,执行些脚本,创建文件,创建文件夹
一般是没有提示的,就是最好的提示,默认直接出结果
[root@lamp-241 ~]# mkdir hello
[root@lamp-241 ~]#
[root@lamp-241 ~]#
[root@lamp-241 ~]# mkdirhello
-bash: mkdirhello: command not found
2.和系统做交互,让他显示写什么,查看文件内容,查看ip地址
[root@lamp-241 ~]# cat happy.txt
今天是个好日子
如何查看网络信息
关于后缀名(linux不关心文件后缀)
windows的文件后缀,是决定了该文件的属性
的!
更改windows的文件属性
linux是不关心后缀的,linux的文件属性,依靠权限位
决定,和文件名无关
linux的文件名,就是个普通的字符串而已。一堆英文字母
比如文件夹也可以加上这些后缀
4.1 需要记忆的后缀
为了区分出文件类型,我们还是会给linux文件,添加上阅读性更好的文件扩展名字。
常见的有
- 压缩文件(打包,压缩)
- Linux 下常见的压缩文件名有 .gz、.bz2、.zip、.tar.gz、.tar.bz2、.tgz 等。
- 为什么压缩包一定要写扩展名呢?很简单,如果不写清楚扩展名,那么管理员不容易判断压缩包的格式,虽然有命令可以帮助判断,但是直观一点更加方便。
- 就算没写扩展名,在 Linux 中一样可以解压缩,不影响使用。
- 软件安装包
- 如windows下的exe文件一样作用,linux也需要安装软件,也有软件包的格式。后面学习软件管理时重点讲解。
- 如redhat系列的RPM包,所有的RPM包都是.rpm后缀格式。
- 脚本文件
- 如shell脚本,.sh
- 如python脚本,.py
- 如java的 .java
- 网页相关的文件
- .html
- .jpg
- .js
- .css
echo命令
显示一段话
注意,一定是,引号,引起来的,才是正确的,普通字符信息
[root@lamp-241 ~]# echo "打印一段话,到屏幕上,让你看到"
打印一段话,到屏幕上,让你看到
输出一段字符串,输出到哪,可以是屏幕终端,可以是写入文件
#查看当前机器的字符集
echo $LANG
# en_US.UTF-8
<meta charset='utf-8'/> #html中声明charset的方法
简单了解文件的权限位,决定了文件的属性
linux一切皆文件
你在linux系统上,所有的 操作,都会以文件形式可以找到
网络的配置
软件的配置
程序的脚本
进程的信息
都可以用命令,找到和它有关的文件
Systemctl:系统管理工具,system control的缩写。
systemctl status newwork
虚拟机想上网
1.插网线
2.修改网卡配置文件 [root@lamp-241 ~]# cat /etc/sysconfig/network-scripts/ifcfg-ens33
3.启动network程序 systemctl start/stop/restart network ,三选一的选项
4.才会有ip
6.1 比如磁盘的文件
linux一切皆文件
你可以系统中,找到该磁盘,操作系统通过一个文件,让你去操作这个硬盘
命令小结
touch命令,语法是
touch 文件名
1.该文件名不存在,则创建该,普通文件
2.该文件名存在,则是修改他的文件时间属性(被访问的时间是什么时候)
touch hello.txt
mkdir命令,语法是
mkdir 文件夹名
1.创建文件夹
mkdir students
坑在于
mkdir 只有创建文件夹的作用
touch 俩作用,1.创建文件 2.修改时间戳
linux同一个目录,文件名不能重复
linux的硬盘,必须要挂载后才能使用(挂载的概念)
windows
linux
1.有磁盘,分区
- 在linux中有一个目录,和这个分区绑定
- 访问这个目录,即访问了这个磁盘的数据
挂载图解
学习linux的文件目录格式
linux啥样
什么是绝对路径
关于linux的目录分隔符
图解
关于linux的路径和命令结合
ls命令
list语义,语法用法是
ls 文件路径
我们目前用的都是绝对路径写法
1. 查看/etc下的内容
ls /etc
2.查看系统日志目录,有多少个日志文件 /var/log/,还要显示它的详细信息
ls -l /var/log
pwd命令
直接打印你当前在哪个绝对路径下
[root@lamp-241 ~]# pwd
/root
cd命令
cd 切换工作目录
cd 文件路径
touch命令
1.作用
touch 文件名 ,创建普通文件,touch 我是叙利亚的运维.txt
2.作用2
如果当前目录,存在该文件,则表示修改该文件的访问时间属性
mkdir命令
mkdir 文件夹名字
11.绝对路径,相对路径学习
- linux命令+ 以根开始的路径,叫做绝对路径
- linux 命令 + 非根目录开始的路径,叫做相对路径
关于相对路径,需要添加
. 当前路径
.. 上一级路径
什么是,绝对,什么事相对
相对路径了
1.此时我呆在/home目录下
cd /home
2.我要创建文件 好饿.txt ,放入 /opt/
3.命令是
绝对路径写法
touch /opt/好饿.txt
相对路径
4. 查看该文件 cat
绝对路径写法
相对路径写法
图解相对路径用法
环境变量PATH
简单图解变量的作用
解读PATH变量
添加PATH变量
试一试,去掉 /usr/bin这个路径,你的ls就没法直接使用了。
这个练习,只是为了让你们理解PATH的作用,你可以不执行,但是跟着练,理解的根深。
1. 查看PATH的值
[root@linux0224 ~]# echo ${PATH}
/usr/local/mysql/bin/:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
2.给PATH重新赋值即可
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/root/bin
3.但是发现了ls这样的命令
没办法,简写去用了,你只能手动的补全它的绝对路径,才行
4.修复PATH变量,加入ls的那个目录
PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin"
#嗅嗅版添加环境变量(这个简单)
export PATH=/usr/local/mysql/bin:$PATH
环境变量补充
#查看用户环境变量
env
#查看全系统环境变量
set
#用户登录有2个办法
su - chaoge01
su chaoge01
#使用su chaoge01时,系统想加载用户环境变量,进入家目路,但此时没有/home/chaoge01,导致命令提示符错误,如何修复呢?
# PS1变量,就是控制命令提示符的
# \u 显示用户名
# \h 显示主机名
# \W 显示用户所处目录的最后一级
# \w 显示用户所处的绝对路径,省去你敲pwd
# \t 以24小时制,显示时间
# \$ 显示用户的身份提示符,自动识别root还是普通用户
set | grep PS1
PS1='[\u@\h \W]\$ '
你可以调整PS1 命令提示符为如下格式
PS1='[\u@\h \w \t]\$ '
该变量,临时敲打,临时生效,重新登录后,系统重新加载用户环境变量,该设置丢失
如何永久生效?把你自定义的变量
- 写入到,系统全局环境变量配置文件中(/etc/profile)
- 那么就有关于用户个人的配置文件,在用户家目录下
~/.bash_profile
对变量,能够修改系统设置,有一定的了解
# 1.命令提示符的,变量
属于我们用户在系统中,自定义的变量,并且!!!变量名和值之间,不得有空格
x=1
y=3
name='大西瓜'
系统中有很多,系统运行,必须的一些变量,比如通过env命令查看
# 2.当命令提示符出现损坏,以及家目录显示不正常的解决办法
比如如下损坏信息时,
[root@yuanlai-0224 tmp]# su - chaoge01
上一次登录:四 3月 17 09:51:51 CST 2022pts/0 上
su: 警告:无法更改到 /home/chaoge01 目录: 没有那个文件或目录
-bash-4.2$
-bash-4.2$
-bash-4.2$
-bash-4.2$ echo $PS1
\s-\v\$
-bash-4.2$
修复原理:
1.表示系统读不到用户的个人配置文件,用户在useradd创建时候,系统会去 、/etc/skel 目录下,拷贝所有的用户个人环境变量配置文件,到用户生成的家目录下 /home/chaoge01
2. 用户在登录时,自动加载 /home/chaoge01 下所有的文件内容
3.修复手段,手动的拷贝 前2步操作即可修复
cp -r /etc/skel/ /home/chaoge01
4.
[root@yuanlai-0224 tmp]# su - chaoge01
上一次登录:四 3月 17 10:08:12 CST 2022pts/0 上
[chaoge01@yuanlai-0224 ~]$
[chaoge01@yuanlai-0224 ~]$
[chaoge01@yuanlai-0224 ~]$
[chaoge01@yuanlai-0224 ~]$
[chaoge01@yuanlai-0224 ~]$
[chaoge01@yuanlai-0224 ~]$ pwd
/home/chaoge01
[chaoge01@yuanlai-0224 ~]$
Linux重要文件
/usr/local/ 该目录,你以后,安装各种软件,往这里装就行了!
编译安装一个骇客帝国软件(代码下雨)
/usr/local/haikediguo/sbin/
关于DNS
1.关于 系统,设置公网dns配置文件的演示
/etc/resolv.conf
[root@yuanlai0224 ~]# cat /etc/resolv.conf
# Generated by NetworkManager
nameserver 114.114.114.114
尽量配置国内的dns服务器地址,网速快,离你近
dns劫持的原理
1.关闭你本地的公网dns服务器设置
2.修改hosts文件
1.去掉hosts里的恶意解析
2.配置正确的dns地址
3.涉及你本地机器,会有dns解析缓存,使用命令强制刷新
文件管理
1、了解文件命名规则和工作中的建议命名规则
2、会创建和删除目录mkdir/rmdir
3、会创建和删除文件touch/rm
4、了解复制cp和移动mv的区别会使用tar命令进行压缩和解压缩,(剪切, 复制)网络中文件的传输,打包传输是最好的
1.两个硬盘之间,拷贝大量的数据 10GB
2.传输速率,是有很大幅度,上升,下降 , 300M/s 17K/s (零散文件太多了)
3. 稳定保持在,你的硬盘设备,最大速率,(打包,压缩,散的文件,整合到一起,再去传输)
数据在服务器之间传输,导致文件丢失,(网络中传输,压缩传输也是必须的)
5、掌握VIM的保存退出wq和不保存强制退出q!掌握VIM的快捷键yy,dd,gg,G,u
修改某程序的配置文件,改参数
给你个文本,如何大量替换,批量替换文本内容
6、会使用tail命令查看文件 7、会使用find命令按文件名称查找文件
文件命名规则
touch '文件名,写在引号里'
touch my_website.html
touch yuchao_all_html.tgz
1.文件,文件夹,名字,做好见名知意
2.需要分割的时候,用下划线
3. 同一个目录下,文件名唯一
[root@fjh001 ~]# touch Yuanlai0224
[root@fjh001 ~]# ll
total 0
-rw-r--r-- 1 root root 0 Mar 7 18:28 yuanlai0224
-rw-r--r-- 1 root root 0 Mar 7 18:28 Yuanlai0224
[root@fjh001 ~]#
[root@fjh001 ~]#
[root@fjh001 ~]# mkdir yuanlai0224
mkdir: cannot create directory ‘yuanlai0224’: File exists
[root@fjh001 ~]#
[root@fjh001 ~]# # linux的文件夹,文件名,不得重复
[root@fjh001 ~]#
[root@fjh001 ~]#
[root@fjh001 ~]# mkdir Yuanlai0224
mkdir: cannot create directory ‘Yuanlai0224’: File exists
[root@fjh001 ~]#
[root@fjh001 ~]#
[root@fjh001 ~]# # linux一切皆文件
[root@fjh001 ~]#
[root@fjh001 ~]#
[root@fjh001 ~]# mkdir yuanlai_dir
[root@fjh001 ~]#
[root@fjh001 ~]# ll
total 0
-rw-r--r-- 1 root root 0 Mar 7 18:28 yuanlai0224
-rw-r--r-- 1 root root 0 Mar 7 18:28 Yuanlai0224
drwxr-xr-x 2 root root 6 Mar 7 18:29 yuanlai_dir
[root@fjh001 ~]#
[root@fjh001 ~]#
文件的三个时间和系统时间
#stat + 文件名查看文件状态,其中可以看到三个时间access,modify,change,如下图
stat file.txt
- access:创建文件的时间
- modify:修改文件内容的时间
- change:修改文件属性时间,如修改文件名等
# 查看文件三个时间
stat dahong.txt
#修改文件的modify时间
touch -d '2024-03-11' -m dahong.txt # -m参数为modify -d 为date
#修改文件的access时间
touch -d '2018-02-16' -a dahong.txt # 只要文件被查看了 access时间就会被修改
# 修改文件的change时间
date -s 06/05/2018 >> dahong.txt # 只要文件属性被改变了,change时间就会变,一般change 时间变了modify时间也会变
#寻找指定时间的文件
find /var/log -mtime 'dahong.txt' # -mtime 后接指定modify时间
find /var/log -atime 'dahong.txt' # -atime 后接指定access时间
find /var/log -ctime 'dahong.txt' # -ctime 后接指定change时间
find /var/log -mtime +5 #找5天之前被修改的文件,今天-1算法,例如今天12号,能找到6号的文件
find /var/log -mtime -5 #找5天之内被修改的文件,今天+1算法,例如今天12号,能找到8号的文件
find /var/log -mtime 5 #找正好6天前修改的文件,今天+0算法,例如今天12号,能找到7号的文件
find /var/log -ctime +5 #找5天之前被改文件属性的文件,今天-1算法,例如今天12号,能找到6号的文件
find /var/log -ctime -5 #找5天之内被改文件属性的文件,今天+1算法,例如今天12号,能找到8号的文件
find /var/log -ctime 5 #找正好6天前被改文件属性的文件,今天+0算法,例如今天12号,能找到7号的文件
find /var/log -atime +5 #找5天之前访问的文件,今天-1算法,例如今天12号,能找到6号的文件
find /var/log -atime -5 #找5天之内被访问的文件,今天+1算法,例如今天12号,能找到8号的文件
find /var/log -atime 5 #找正好6天前被访问的文件,今天+0算法,例如今天12号,能找到7号的文件
#修改系统时间
date -s '2024-03-13 11:21:05' # -s 是set缩写
转义字符
#linux中有很多特殊字符[],{},?,*等,为了让这些特殊字符成为一个普通字符,使用转义字符
\*
\{\}
\[\]
\?
文件管理命令
在日常工作中,我们经常需要对Linux的文件或目录进行操作,常见操作包括
下载文件
wget https://tengine.taobao.org/download/tengine-3.1.0.tar.gz
新建
#touch 创建文件
#mkdir 创建文件夹
#vi ,vim 也可以创建文件
#echo 结合 重定向符号 > 才能创建文件
echo "男儿当自强" > /opt/man.txt
重命名
mv ./old_name.txt ./new_name.txt
# rename 旧字符串 新字符串 文件名
rename txt html ./*.txt. #把当前路径下所有的以 .txt 结尾的文件修改为 .html为结尾
删除
# remove的简写
rm
更改
# 修改文件内容的命令很多
vim
查看
# cat <文件名>
cat dahong.txt
复制
#copy 拷贝
cp
移动
#move 缩写
mv
#还可以作为剪切,重命名使用
mkdir用法
#1.用法一:mkdir 不加参数,路径(需要包含目录名称)
mkdir day07_dir
#2.-p参数,递归创建文件夹
mkdir -p /opt/0224/linux/chaochao
#3.同时创建多个文件夹,且注意绝对,相对路径
mkdir ./王者 /opt/lol/top/瑞雯 /dnf ../cs #同时创建三个文件夹,且在不同路径下
什么时候用-p创建(递归创建目录)
[root@fjh001 opt]#
[root@fjh001 opt]# mkdir -p ./王者 /opt/lol/top/瑞雯 /dnf/狂战士 ../cs
[root@fjh001 opt]#
[root@fjh001 opt]#
rmdir删除空目录
目录里面,没有任何文件
# 必须要要求,你要删除的文件夹,里面没数据,方可删除,否则提示,该文件夹不为空
# rmdir 文件夹的路径
mkdir -p /opt/0224/男生/程志伟/好朋友/超哥 #比如这个命令,一定是报错的
rmdir /opt/0224/男生/程志伟 #需要递归删除
touch命令
# 1. 当文件不存在,执行touch 是创建该文本文件
touch hello.txt
# 2. 当文件,文件夹(名字)已经存在后,touch命令是修改它的时间戳
touch /opt/
# 3.touch一次性创建多个文件,注意,要保证,路径中的文件夹是存在的,否则报错
touch 一次性创建多个文件
# 1.在某个目录,创建多个 同级的文件
# 2.学习shell的花括号用法 ,一次性在同级目录,创建多个文件,适用于touch、mkdir
touch /opt/王者/坦克/{老夫子,廉颇,吕布,妲己}
mkdir -p /opt/lol/中单/{快乐风男,儿童劫,提款机}
#3.使用tree命令,查看文件目录结构,需要安装后使用
#1.机器可以上外网
#2.用命令安装 yum install tree -y # 自动下载安装tree这个软件(命令)
#4.使用tree查看目录结构,且显示中文,且显示该文件的类型
tree -NF # -N 是显示中文 -F 显示文件类型
关于花括号用法 {} 结合touch命令
#1.创建多个连续的文件,有规律的文件 1 2 3 4 5
touch 玩家{1..100}.log
关于rm命令的学习
权限最大化
root + rm(参数)
# 语法是
# rm 可选参数 可选对象
# -r :recursion递归删除,主要用于删除目录,可删除指定目录及包含的所有内容,包括所有子目录和文件
# -f :force,强制删除,不提示任何信息。操作前一定要慎重!!!不小心你就删库跑路(放心,跑不掉的)
# -i :interactive删除前需要确认
# 1.rm命令不带参数,只删除1个文件
rm 玩家100.log
# 2. rm命令删除多个文件
rm ./玩家10.log /opt/lol/中单/快乐风男/玩家20.log
#3. 当你想强制删除文件,不要去提示了怎么办?
#-f 强制删除
rm -f 玩家11.log
#4. 关于rm的文件夹删除,需要-r参数递归删除
rm -r 亚索
#5.递归,强制删除文件夹
rm -r -f ./儿童劫
#6.危险命令,注意rm命令后面,到底跟着的路径是什么,错一个字符,就删错了,没有回头路
#7.确保虚拟机快照备份完毕
#8.人生第一次,删除linux所有资料(注意,此操作,不要在你的虚机以外任何地方执行,比如你的同桌的linux)
关于rm删除文件
ln命令
ln是link的意思,表示创建一个快捷方式,如同你windows的图标快捷方式.
可与添加环境变量达到同样的效果
#添加软连接语法
ln -s <命令的源路径> <快捷方式路径>
ln -s /opt/cmatrix/bin/cmatrix /usr/local/bin/cmatrix
#以下载代码雨为例
cd /opt
#1.安装依赖
yum install ncurses* # 安装相关ncurses支持包
#2.下载cmatrix骇客屏保源码包,由于是https网站资源需要加 --no-check-certificate指令参数
wget --no-check-certificate https://jaist.dl.sourceforge.net/project/cmatrix/cmatrix/1.2a/cmatrix-1.2a.tar.gz
#3.解压缩源码包
tar -zxvf cmatrix-1.2a.tar.gz
#4.进入源码包目录
cd cmatrix-1.2a/
#5.释放编辑文件
./configure --prefix=/opt/cmatrix/
#6.编译且安装
make && make install
#7.添加软连接
ln -s /opt/cmatrix/bin/cmatrix /usr/local/bin/cmatrix
#查看当前命令的绝对路径
which <命令>
which cmatrix
/usr/bin/which: no matrix in (/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin)
alias命令(别名命令)
昵称,别名的意思
于超,超弟,超哥,小于
alias在系统中是怎么用的呢?
1.查看系统的默认别名,alias
[root@fjh001 快乐风男]# alias
alias cp='cp -i'
alias egrep='egrep --color=auto'
alias fgrep='fgrep --color=auto'
alias grep='grep --color=auto'
alias l.='ls -d .* --color=auto'
alias ll='ls -l --color=auto'
alias ls='ls --color=auto'
alias mv='mv -i'
alias rm='rm -i'
alias which='alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde'
[root@fjh001 快乐风男]#
2.修改关于rm的 别名
你可以自由修改rm的别名,如修改语法
[root@fjh001 快乐风男]# alias rm='rm -i'
[root@fjh001 快乐风男]#
3.你可以自己去定义这样的,好用的别名
虚拟机的快照
为了防止你删库的
- vmware提供了快照功能
- 游戏存档,1
- 游戏存档,2
- 游戏存档,3
- 游戏进行中
- linux系统
- 系统快照1,系统刚初始化好
- 系统快照2,安装了数据库(回到这个系统的快照,回到这个状态)
- 系统快照3,升级数据库(假如在这报错了,数据库挂了,升级软件,系统中有很多相关的软件版本也都升级)
添加快照
cp拷贝命令
#1.拷贝文件,且改名
cp /opt/lol/中单/快乐风男/很菜的亚索.txt /home/突然很强的亚索.txt
#2.仅仅拷贝单个文件,保持源文件名
cp ./很菜的亚索.txt /
#3.拷贝文件夹,以及递归拷贝操作
cp -r 源文件夹路径 目标文件夹路径
关于cp拷贝文件夹的坑
注意复制文件并改名的情况下,如果新路径存在改名后的文件夹,则将文件内容复制到该文件夹内部!!!!!
1.在/home下,是没有这个 英雄联盟文件夹的
- 演示,在/home下以及存在,同名的文件夹了,是啥样?
移动、剪切、重命名(mv命令)
#1.从A目录,移动到B目录,移动单个文件
mv ./蔡文姬.txt /opt/lol/中单
#2.mv结合相对路径去移动
mv ../蔡文姬.txt /opt
#3. 文件的重命名,在当前目录,重命名
mv 很菜的亚索.txt 努力学习怎么放大招的亚索.txt
#4.移动文件目录,且重命名
mv ./努力学习怎么放大招的亚索.txt /opt/垃圾压缩.txt
#5.移动文件夹(剪切)
mv /opt/lol/ / # 移动 /opt/lol 到根目录去
#6.移动文件夹,且改名字
mv /opt/dahong.txt /opt/xiaohong.txt
这里也有关于文件夹是否存在的坑
压缩、解压缩
打包,默认是没有压缩功能,不节省磁盘空间
打包+压缩,将一堆零散的文件,打包到一起,之后再压缩,节省磁盘空间。
tar命令
官网.tgz
all_databases.tgz
打包
命令:tar
作用:将多个文件打包成一个文件
语法:tar 选项 打包之后的文件名 要打包的文件或目录1 要打包的文件或目录2 要打包的文件或目录3
常见参数:
用不同的参数,有不同的作用
tar实现,到底是打包,还是压缩,或者是解压缩,就看给的参数是什么.
-c,create 创建的意思 ,打包
-v,显示打包文件过程
-f,指定打包的文件名,此参数是必须加的,且必须在最后一位
-u,update缩写,更新原打包文件中的文件(了解)
-t,查看打包的文件内容(了解) (不解压,看看里面有什么)
-x 解包,解压缩 (将一个单个的压缩文件,解压其中内容)
-z 压缩操作,是tar命令,去调用gzip命令的过程,压缩的参数
提示:
tar命令打包的文件,通常称为tar包,如 yuchao-all.tar文件
提问:
这个.tar是个谁看的?是给centos看的,还是给运维超哥看的?
实践
压缩文件名的规范
用tar命令压缩的文件,一般后缀如
*.tar 仅仅是打包了
*.tar.gz 打包+压缩
*.tgz 打包+压缩
tar的打包用法
tar -cvf all_robots.tar robot.txt robot.txt1 robot.txt2 #打包
tar -tf all_robots.tar #查看
tar -xf all_robots.tar #拆包
tar -uf all_robots.tar dahong.txt #追加文件
tar -czvf all_robots.tgz robot.txt robot.txt1 robot.txt2 #打包并压缩
tar -xzvf all_robots.tgz #拆包并解压缩
tar -xzvf all_files.tar.gz -C /opt/myfiles #解压到指定路径
mv all_robots.tgz all_robots.tar.gz #改名
#文件名后缀必须加!!!!!! 命名规范!!!!!
1.准备一堆 比较大的文件,以及文件夹
打包多个文件
先生成四个测试的数据文件
[root@fjh001 0224_day07]# echo 机器人{1..500000}号 >> robot.txt
[root@fjh001 0224_day07]# echo 机器人{1..500000}号 >> robot.txt
[root@fjh001 0224_day07]# echo 机器人{1..500000}号 >> robot.txt
[root@fjh001 0224_day07]#
[root@fjh001 0224_day07]#
[root@fjh001 0224_day07]# ll -h
total 66M
-rw-r--r-- 1 root root 36M Mar 7 22:30 robot.txt
[root@fjh001 0224_day07]#
[root@fjh001 0224_day07]#
[root@fjh001 0224_day07]# echo 机器人{1..900000}号 >> robot.txt
[root@fjh001 0224_day07]#
[root@fjh001 0224_day07]#
[root@fjh001 0224_day07]# ll -h
total 66M
-rw-r--r-- 1 root root 53M Mar 7 22:30 robot.txt
[root@fjh001 0224_day07]# cp robot.txt robot.txt1
[root@fjh001 0224_day07]# cp robot.txt robot.txt2
[root@fjh001 0224_day07]# cp robot.txt robot.txt3
[root@fjh001 0224_day07]#
[root@fjh001 0224_day07]#
[root@fjh001 0224_day07]# ll -h
total 209M
-rw-r--r-- 1 root root 53M Mar 7 22:30 robot.txt
-rw-r--r-- 1 root root 53M Mar 7 22:31 robot.txt1
-rw-r--r-- 1 root root 53M Mar 7 22:31 robot.txt2
-rw-r--r-- 1 root root 53M Mar 7 22:31 robot.txt3
[root@fjh001 0224_day07]#
[root@fjh001 0224_day07]#
[root@fjh001 0224_day07]#
2.将这个四个文件,打包到一起 (打包,整合到一起)
[root@fjh001 0224_day07]# # tar 参数 打包文件名 你要打包的内容
[root@fjh001 0224_day07]#
[root@fjh001 0224_day07]# tar -cvf all_robots.tar robot.txt robot.txt1 robot.txt2 robot.txt3
robot.txt
robot.txt1
robot.txt2
robot.txt3
[root@fjh001 0224_day07]#
[root@fjh001 0224_day07]#
[root@fjh001 0224_day07]# ll -h
total 417M
-rw-r--r-- 1 root root 209M Mar 7 22:34 all_robots.tar
-rw-r--r-- 1 root root 53M Mar 7 22:30 robot.txt
-rw-r--r-- 1 root root 53M Mar 7 22:31 robot.txt1
-rw-r--r-- 1 root root 53M Mar 7 22:31 robot.txt2
-rw-r--r-- 1 root root 53M Mar 7 22:31 robot.txt3
3.查看打包文件中的内容
[root@fjh001 0224_day07]# tar -tf all_robots.tar
robot.txt
robot.txt1
robot.txt2
robot.txt3
4.解包,拆包,拆开打包文件(拆快递)
[root@fjh001 0224_day07]# tar -xvf all_robots.tar
robot.txt
robot.txt1
robot.txt2
robot.txt3
[root@fjh001 0224_day07]# ll
total 426144
-rw-r--r-- 1 root root 218183680 Mar 7 22:34 all_robots.tar
-rw-r--r-- 1 root root 54544475 Mar 7 22:30 robot.txt
-rw-r--r-- 1 root root 54544475 Mar 7 22:31 robot.txt1
-rw-r--r-- 1 root root 54544475 Mar 7 22:31 robot.txt2
-rw-r--r-- 1 root root 54544475 Mar 7 22:31 robot.txt3
5.更新,加入一个文件到打包文件中
[root@fjh001 0224_day07]# tar -uf all_robots.tar test1.log
[root@fjh001 0224_day07]#
[root@fjh001 0224_day07]#
[root@fjh001 0224_day07]# ll -h
total 365M
-rw-r--r-- 1 root root 287M Mar 7 22:39 all_robots.tar
-rw-r--r-- 1 root root 78M Mar 7 22:38 test1.log
tar的压缩用法(!!!)
1.打包且压缩
打包,不压缩的时候,是287M
[root@fjh001 0224_day07]# ll -h
total 573M
-rw-r--r-- 1 root root 287M Mar 7 22:39 all_robots.tar
-rw-r--r-- 1 root root 53M Mar 7 22:30 robot.txt
-rw-r--r-- 1 root root 53M Mar 7 22:31 robot.txt1
-rw-r--r-- 1 root root 53M Mar 7 22:31 robot.txt2
-rw-r--r-- 1 root root 53M Mar 7 22:31 robot.txt3
-rw-r--r-- 1 root root 78M Mar 7 22:38 test1.log
2.打包且压缩的用法
[root@fjh001 0224_day07]# tar -czvf all_files.tar.gz ./*
./robot.txt
./robot.txt1
./robot.txt2
./robot.txt3
./test1.log
[root@fjh001 0224_day07]#
[root@fjh001 0224_day07]#
[root@fjh001 0224_day07]#
[root@fjh001 0224_day07]#
[root@fjh001 0224_day07]# ll -h
total 324M
-rw-r--r-- 1 root root 38M Mar 7 22:42 all_files.tar.gz
-rw-r--r-- 1 root root 53M Mar 7 22:30 robot.txt
-rw-r--r-- 1 root root 53M Mar 7 22:31 robot.txt1
-rw-r--r-- 1 root root 53M Mar 7 22:31 robot.txt2
-rw-r--r-- 1 root root 53M Mar 7 22:31 robot.txt3
-rw-r--r-- 1 root root 78M Mar 7 22:38 test1.log
3.除了-z的压缩参数,还有哪些 windows下的 .zip .rar .7z
-z,压缩为.gz格式 ,记住用这个就好了,主流的80%人都用这个
你拿到一个 all_files.tar.gz ,这个如何解压?
tar -zxvf all_files.tar.gz
-j,压缩为.bz2格式
all_files.tar.bz2 ,如何解压?
tar -xjvf all_files.tar.bz2
-J,压缩为.xz格式
-c,create 创建的意思
-x,解压缩
-v,显示打包文件过程
-f,file指定打包的文件名,此参数是必须加的。
-u,update缩写,更新原打包文件中的文件(了解)
-t,查看打包的文件内容(了解)
如果压缩文件名字被改了,还能用吗?
能用
你能在互联网上下载的各类软件,基本都是如下俩格式
- mysql.tar.gz
- nginx.tgz
1.linux文件名,不重要,具体文件内容,由其属性决定
[root@fjh001 0224_day07]# mv all_files.tar.gz all_files
[root@fjh001 0224_day07]#
[root@fjh001 0224_day07]#
[root@fjh001 0224_day07]# ll
total 38780
-rw-r--r-- 1 root root 39709097 Mar 7 22:42 all_files
[root@fjh001 0224_day07]#
[root@fjh001 0224_day07]#
[root@fjh001 0224_day07]# ll -h
total 38M
-rw-r--r-- 1 root root 38M Mar 7 22:42 all_files
[root@fjh001 0224_day07]#
[root@fjh001 0224_day07]#
[root@fjh001 0224_day07]# vim all_files
[root@fjh001 0224_day07]#
[root@fjh001 0224_day07]# ll
total 38780
-rw-r--r-- 1 root root 39709097 Mar 7 22:42 all_files
[root@fjh001 0224_day07]#
[root@fjh001 0224_day07]# tar -zxvf all_files
./robot.txt
./robot.txt1
./robot.txt2
./robot.txt3
./test1.log
[root@fjh001 0224_day07]# ll
total 331716
-rw-r--r-- 1 root root 39709097 Mar 7 22:42 all_files
-rw-r--r-- 1 root root 54544475 Mar 7 22:30 robot.txt
-rw-r--r-- 1 root root 54544475 Mar 7 22:31 robot.txt1
-rw-r--r-- 1 root root 54544475 Mar 7 22:31 robot.txt2
-rw-r--r-- 1 root root 54544475 Mar 7 22:31 robot.txt3
-rw-r--r-- 1 root root 81777792 Mar 7 22:38 test1.log
[root@fjh001 0224_day07]#
[root@fjh001 0224_day07]#
[root@fjh001 0224_day07]# mv all_files all_files.tgz
[root@fjh001 0224_day07]# ll
total 331716
-rw-r--r-- 1 root root 39709097 Mar 7 22:42 all_files.tgz
-rw-r--r-- 1 root root 54544475 Mar 7 22:30 robot.txt
-rw-r--r-- 1 root root 54544475 Mar 7 22:31 robot.txt1
-rw-r--r-- 1 root root 54544475 Mar 7 22:31 robot.txt2
-rw-r--r-- 1 root root 54544475 Mar 7 22:31 robot.txt3
-rw-r--r-- 1 root root 81777792 Mar 7 22:38 test1.log
[root@fjh001 0224_day07]#
[root@fjh001 0224_day07]#
##zip压缩
zip all_files.zip robot.txt robot.txt1 robot.txt2 #zip压缩
unzip all_files.zip -d ./my_files #unzip解压缩,-d后写解压路径
zip压缩目录,需要添加-r参数
zip仅仅压缩多个文件的用法
zip压缩文件,和文件夹
[root@fjh001 0224_day07]# zip -r all_files.zip robot/ test1.log
adding: robot/ (stored 0%)
adding: robot/robot.txt (deflated 87%)
adding: robot/robot.txt1 (deflated 87%)
adding: robot/robot.txt2 (deflated 87%)
adding: robot/robot.txt3 (deflated 87%)
adding: test1.log (deflated 87%)
[root@fjh001 0224_day07]#
unzip(解压缩)
官网源码.zip
unzip 官网源码.zip -d 指定解压缩到哪
1.该命令,可能需要安装,用如下命令
[root@fjh001 0224_day07]# yum install unzip -y
2.解压缩,并且指定解压到一个地方 -d
[root@fjh001 ~]# unzip /all_files.zip -d /0224_day07/
Archive: /all_files.zip
creating: /0224_day07/robot/
inflating: /0224_day07/robot/robot.txt
inflating: /0224_day07/robot/robot.txt1
inflating: /0224_day07/robot/robot.txt2
inflating: /0224_day07/robot/robot.txt3
inflating: /0224_day07/test1.log
[root@fjh001 ~]#
[root@fjh001 ~]#
vim
1.所有你可见到的linux机器,都会默认有vi编辑器,但是它不好用,就好比windows的记事本。
2.你可以选择更强大的编辑器 ,叫vim,需要额外安装
yum install vim -y
学习vim的使用流程
#1.安装vim
yum install vim -y
#2.学习它的几个模式,运转流程
图解vim的流程
#查看该文件内容
vim gushi.txt
cat gushi.txt
古诗
清明时节雨纷纷
路上行人欲断魂
借问美女何处有
路人遥指三里屯
vim 测试数据
I have a dog. My dog name is DuDu. DuDu is 9 years. DuDu is fat. It wears a white coat. DuDu has two big eyes and two small ears. It has one short mouth. My dog is smart. I like my dog. Do you like DuDu?
我有一只狗。我的狗的名字叫嘟嘟。嘟嘟9岁。嘟嘟胖。它穿着一件白色外套。嘟嘟有两个大眼睛和两个小耳朵。它有一个短嘴。我的狗是聪明的。我喜欢我的狗。你喜欢吗?
vim的使用
vim 测试数据
I have a dog. My dog name is DuDu. DuDu is 9 years. DuDu is fat. It wears a white coat. DuDu has two big eyes and two small ears. It has one short mouth. My dog is smart. I like my dog. Do you like DuDu?
我有一只狗。我的狗的名字叫嘟嘟。嘟嘟9岁。嘟嘟胖。它穿着一件白色外套。嘟嘟有两个大眼睛和两个小耳朵。它有一个短嘴。我的狗是聪明的。我喜欢我的狗。你喜欢吗?
1.安装vim
yum install vim -y
vim的使用流程
基本上 vi/vim 共分为三种模式,分别是:
- 命令模式(Command mode)
- 最长用的,按下字母,a,i,o(a 在光标前开始编辑,i是在光标处,开始编辑,o是在光标下一行开始编辑)
- 当你使用vim 标记某个文件时,第一步就进入了命令模式。
- 你此时可以按下键盘的几个快捷键,进入不同的指令模式。
- 可以移动光标位置,输入快捷键指令,对文件进行编辑,如插入字符,复制,粘贴,删除等操作
- 输入模式(Insert mode)
- 可以对文件内容进行编辑。
- 退出编辑模式(按下esc键,回到了命令模式)
- 末行模式(Last line mode)底线模式
- 从命令模式下 ,输入冒号,即进入了底线命令模式。
- 进行一些特殊操作,如文本信息的查找,替换,保存,退出等;
还有一种特殊的可视化模式
(多行操作模式),用于批量的列选操作。
图解vim使用流程
底线命令模式,的w模式,就是写入文件内容,以及创建文件的作用。
# 写脚本时,要在脚本第一行声明解释器位置,不然脚本无法执行!!!
#! + 解释器路径 ,
#! /bin/bash
#! usr/bin/python3.9
#文件命名为hello.txt
#! /usr/bin/python2.7
print('hello world')
#在终端中执行
python hello.txt
‘’‘输出:hello world’‘’
vim的命令模式(!!)
:set nu #显示行号
:set nonu #取消行号
gg #定位到文章开头,go to the top
G #定位到文章结尾 go
0 #定位到行首
$ #定位到行尾 (shift + 4)
: + 行号 #定位到某一行。eg: : 4 ,定位到第四行
yy #复制一行,yank
数字 + yy #复制多行,不加数字复制一行
p #在光标下行打印,print
P #在光标上行打印
u #撤回,undo
crtl + r #取消撤回,redo
dd #剪切一行,delete line
数字+dd #剪切n行
D #删除从光标处开始到行尾的内容,Delete
dG #删除光标所在行到文章末尾的内容,光标前的同行内容也会删除,delete to the end of file
x #删除光标所在的字符,delete character
vim的末行模式
输入冒号(:) 进入末行模式
:w #保存当前内容
:w. + 路径 #另存为当前内容 eg :w /opt/dog.txt ,要写文件名!!!
:q #退出,一般 :wq!使用,保存且退出
:x! #强制写入且退出
/ + 字符 #搜索查找
:noh #取消高亮 no highlight
:syntx on #打开代码的高亮提示,默认都是开的,不用管他
:syntx off #关闭代码的高亮提示
:s/old_content/new_content/ #替换单行内容 eg: :s/value/name/ ,substitute
:%s/old/new/g #替换多行内容 eg: :%s/value/name/ g=global 不加g只替换第一个
vim的paste模式!!!
vim默认的复制粘贴,会导致格式混乱,无法使用配置文件
#vim paste模式测试数据
# added by Anaconda2 5.1.0 installer
export PATH="/Users/minghongsun/anaconda2/bin:$PATH"
# >>> conda initialize >>>
# !! Contents within this block are managed by 'conda init' !!
__conda_setup="$('/opt/anaconda3/bin/conda' 'shell.bash' 'hook' 2> /dev/null)"
if [ $? -eq 0 ]; then
eval "$__conda_setup"
else
if [ -f "/opt/anaconda3/etc/profile.d/conda.sh" ]; then
. "/opt/anaconda3/etc/profile.d/conda.sh"
else
export PATH="/opt/anaconda3/bin:$PATH"
fi
fi
unset __conda_setup
# <<< conda initialize <<<
export NVM_DIR=~/.nvm
source $(brew --prefix nvm)/nvm.sh
"~/.bash_profile" 28L, 671B
#进入paste模式
:set paste
#粘贴代码后退出即可
vim my_ngix.yaml #ngix配置文件的后缀
vim的可视化模式
vim的多行批量操作,这个模式中英文混杂的文章会错乱,不建议使用,一种语言的时候可以用,多行替换更好用。
# 1.选择光标位置
# 2.按 crtl + v 进入可视化模式
# 3.用方向键选择区域,达到下图效果, 按d删除,按y复制,按p打印
# 4.按I进入编辑模式编辑,按两下esc退出
#使用场景,如批量添加注释,批量删除注释
vim的swp文件处理
vim 文件时如报错如下,出现的原因及解决方案。
出现的原因:
- 多人同时编辑此文件
- 上次推出时未正常保存文件
linux系统为了保存数据,才出现的swp文件
解决的方法:
多人同时编辑时:退出文件,稍后操作
上次未正常保存时:如不要之前的数据了,直接删除即可。如还要上次的数据,按R,(Recover)恢复数据。如上图所示。
出现下图,根据时间选择要恢复的数据版本即可,按序号。
cat命令
#1.cat 适合读取小文件,不能读取大文件,一次性将文件内容全部读取到内存中,且输出到屏幕上
#查看nginx软件的配置文件(前提是你安装了该软件,linux默认安装的软件,配置文件会自动写到/etc目录下)
cat /etc/nginx/nginx.conf
#查看系统的用户信息有哪些
cat /etc/passwd
#2.cat 添加一个功能参数 -n 显示行号
cat -n /etc/passwd
#3. cat不适合读取大文件,显示也不友好
cat /var/log/messages
#4. 还可以连续读取多个文件,并且显示三文件一共有多少行
cat -n doupo.txt hehe.txt hello_python.txt
#5. 结合重定向符号使用
> 重定向覆盖输出符 ,数据从左边,覆盖写入到右边
< 重定向覆盖输入符,数据从右边,覆盖写入到左边
>> 重定向追加输出符, ,数据从左边,追加写入到右边
<< 重定向覆盖输入符,数据从右边,追加写入到左边
cat doupo.txt hehe.txt hello_python.txt > ./three_files.txt
#6.
echo 春晓 > 春晓.txt
echo 春眠不觉晓 >> 春晓.txt
echo 处处蚊子咬>> 春晓.txt
echo 越来讽喻诗>> 春晓.txt
echo 滑落至多为>> 春晓.txt
cat 春晓.txt
春晓
春眠不觉晓
处处蚊子咬
越来讽喻诗
滑落至多为
#7.使用cat写入多行数据
cat >> 古诗2.txt <<EOF
<数据>
EOF
#EOF是一个关键字,end of file ,文件的结束
cat >>古诗2.txt <<EOF
> 嗯嗯嗯
> 呃呃呃,曲项向天歌
> 白毛浮绿水
> 红掌拨清波
> EOF
cat 古诗2.txt
嗯嗯嗯
呃呃呃,曲项向天歌
白毛浮绿水
红掌拨清波
#8. cat证明文件存在空行的办法
#-b 只会对有内容的行,显示其行号,空行不显示
#-E 在linux文件中,每一行的结束,默认会添加一个你看不到的,特殊符号 '$' ,表示是该行的结尾
cat -b doupo.txt
tac命令
将文件从后,向前,倒着查看
cat -n hehe.txt
1 yuchao
2 yejingyang
3 chenliangliang
tac hehe.txt
chenliangliang
yejingyang
yuchao
ls和sl
ls 查看文件夹下内容
安装这个sl命令
yum install sl -y
sl是一个小火车命令
more和less命令
more和cat都是一次性读取所有内容到内存,不适合读取大文件,占资源
less命令是显示多少文本,消耗多少内存,省资源。
空格,翻篇
回车 下一行
head和tail命令
tail -f (重点)
要求文件必须已经存在,然后可以检测到通过echo追加进来的内容
#head命令,默认查看文件前10行
head doupo.txt
head -5 文件 # 查看文件的前5行
#tail命令,默认查看文件后10行
tail doupo.txt
tail -5 文件 # 查看文件的后5行
#tail有一个重点命令,叫做实时刷新文件内容
-f #跟踪文件内容变化,但是需要文件正常退出后可见,最常用的也就是小写的f,检测程序的日志变化(程序代码,追加新内容到文件中的)
-F #能够对文件进行刷新读取,即使该文件不存在,也可以检测,提示文件不存在后夯住!!!可以监控echo追加进来的内容
结合tail和上午安装的nginx练习日志查看
1.用tail 检测nginx的访问日志
[root@localhost opt]# tail -f /var/log/nginx/access.log
2.用浏览器,访问nginx的页面即可,不断刷新,不断出现新的日志
tail -F的图
wc命令(word count)
统计文件的行
- vim(set nu)
- cat -n
- wc -l
#1.wc命令,统计文件内有多少行,有一个回车,是一个空行
wc -l doupo.txt
#2. wc -w 统计文件内的单词数
wc -w hehe.txt
#3. wc -c 查看文件内字节数
wc -c hehe.txt
du命令 (disk usage)
统计文件大小的命令
- ls -lh
#du命令
#作用:查看文件或目录(会递归显示子目录)占用磁盘空间大小
#语法:du [参数选项] 文件名或目录名
# linux的文件系统,对文件最小管理单位是4kb算起。
#-s :summaries,只显示汇总的大小,统计文件夹的大小
du -s .
105072KB .
#-h:表示以高可读性的形式进行显示,如果不写-h,默认以KB的形式显示文件大小
du -h *
4.0K doupo.txt
4.0K hehe.txt
4.0K hello_python.txt
4.0K index.txt
4.0K three_files.txt
26M xixi
26M xixi1
26M xixi2
26M xixi3
4.0K 古诗2.txt
4.0K 呵呵.txt
4.0K 春晓.txt
4.0K 蔡旭困.txt
#2.显示文件夹的大小
du -h /opt
103M /opt
#3.发现机器磁盘空间不够了,你领导让你看看日志目录是不是太大了
du -sh /var/log
#4.查看nginx软件的日志目录,容量是多少
du -sh /var/log/nginx
32K /var/log/nginx
find找文件
windows下的强大搜索工具
everything工具
linux的工具是谁?---find命令。
find是递归查找
#基础语法
find 查找路径 -name "你要找什么"
find /opt -name 'doupo.txt' # 从opt上,找到doupo.txt文本
#按时间查找
find / -mtime +5 #找5天之前被修改的文件,今天-1算法,例如今天12号,能找到6号的文件
find / -mtime -5 #找5天之内被修改的文件,今天+1算法,例如今天12号,能找到8号的文件
find / -mtime 5 #找正好6天前修改的文件,今天+0算法,例如今天12号,能找到7号的文件
# 模糊查找,找出/var下所有的log文件 nginx.log mysql.log yuchao.log *.log
find /var -name '*.log'
# -type f 找到文本类型的数据
# -type d 找到文件夹类型的数据
find /opt -type f #找到opt的全部文档
# -o 参数表示or
# -a参数表示and
# -not参数表示not
find / -name '*.zip' -o -name '*.tar' #找出机器上所有的zip压缩文件 和 tar压缩文件
#-size 参数表示大小
find / -size +20M -name '*.tar' #找出所有大小超过20M的tar文件
我想查看linux上的图片,如何看
图片路径是,/usr/share/nginx/html/nginx-logo.png
有哪些思路
1.windows (linux把该图片,发到win上,lrzsz工具,xftp)
2.linux上装图像编辑器(你的linux也得装图形化)
常用单位换算关系
grep
grep是对数据进行过滤查找关键字
源数据可以是
- 文件内容
grep hello /opt/hello.txt
,找出存在hello的那一行 - 命令的执行结果 ,这个需要结合管道符使用,
cat /etc/passwd | grep 'root'
测试数据
I teach linux.
I like python.
My qq is 877348180.
My name is chaoge.
Our school website is http://yuchaoit.cn。
Where is my girl friend.
Who is your boy friend.
My phone number is 15233334444.
1.找出存在My字符的行
linux是区分大小写的,注意
-n 参数,显示存在该关键字的行号
grep -n 'root' /etc/passwd
-i grep忽略大小写
grep -i 'root' /etc/passwd
,无论大小写,找出/etc/passwd文件中,包含的root信息
-l 参数 ,显示具体哪个文件中存在搜索的关键字
# grep '关键字' 文件名
grep 'My' testgrep.txt #查看My在这个文件中是否出现过
My qq is 877348180.
My name is chaoge.
My phone number is 15233334444.
grep -n 'My' testgrep.txt #查看My在这个文件第几行出现过
5:My qq is 877348180.
7:My name is chaoge.
14:My phone number is 15233334444.
grep -l 'apple' ./* #查看apple在那个文件里出现过
./19.log
./1.log
./20.log
比如,搜索系统的一些日志文件,找出关于root相关的信息
grep -n 'root' /var/log/messages
grep -n 'root' /var/log/secure
grep不仅能从文件里搜索关键字,只要是文本数据,就可以进行搜索过滤
grep作用是,从文件中(而非文件夹)匹配出存在该关键字的那一行信息。
grep 'apple' ./*
./t1.txt:apple1
./t2.txt:apple2
./t3.txt:apple3
grep: ./北京: Is a directory
grep 'aoligei' 古诗2.txt
grep 'aoligei' t1.txt
aoligei
grep -n 'aoligei' t1.txt
7:aoligei
greo的忽略大小写参数 -i 结合-n显示行号
grep -n -i 'apple' t1.txt t2.txt t3.txt
t1.txt:1:apple1
t1.txt:2:apple1
t1.txt:3:apple1
t1.txt:4:apple1
t1.txt:8:Apple1
t1.txt:9:apple1
t1.txt:10:Apple1
t2.txt:1:apple2
t3.txt:1:apple3
利用grep找出nginx软件,配置文件中,定义的网站监听端口号
grep -n -i 'listen' /etc/nginx/nginx.conf
39: listen 80;
管道符(|)
管道符,和grep结合的是最多的
管道符,在linux中的表达符号是
| (快捷键shift + \)
管道符得标准定义
管道是一种通信机制,通常用于进程间的通信。
它表现出来的形式将==前面每一个进程的输出(stdout)直接作为下一个进程的输入(stdin)==。
利用grep和管道符,来查看系统用户信息
#1.找出chaoge用户的信息
#/etc/passwd 是系统的用户信息存放文件
#在这个文件中,是用户通过命令创建的用户,id号是从1000开始的,比如
#创建用户
useradd yejinyang01 #添加完之后,就会在这个文件中生成一行信息
#关于查找用户是否存在的命令
grep 'yejingyang' /etc/passwd
# 如何查看linux是否存在某用户,如yejingyang
id yejingyang
id: yejingyang: no such user
#通过grep找到用户,表示该用户存在
id yejinyang
uid=1001(yejinyang) gid=1001(yejinyang) groups=1001(yejinyang)
grep 'yejinyang' /etc/passwd
yejinyang:x:1001:1001::/home/yejinyang:/bin/bash
管道符
# 命令1 | 命令2
# 命令1,拿到用户文件信息 | 交给grep再去过滤
cat /etc/passwd | grep 'yejinyang'
yejinyang:x:1001:1001::/home/yejinyang:/bin/bash
grep 'yejinyang' /etc/passwd
管道符常见用法
检查进程
1.查看系统进程信息的命令
ps -ef # -e 显示所有的进程信息 -f 格式化显示出进程的id号,等其他信息
2.上述命令,找到了一堆进程,如何过滤出我们要的信息呢?
学习如何,正确使用 grep 和管道符,去过滤机器上某个进程,判断某个进程是否存在
1.找出vim的进程
2.找出nginx的进程
检查端口
#1.需要学习,检查系统端口的命令,这个命令,和ps -ef 一样,是查看系统某资源信息
netstat -tunlp # 这个组合参数,是查看系统上,所有的端口信息
#2. 过滤出,机器上,和ssh远程连接的端口信息,提示程序名叫ssdh,或者端口号是22
#结合查看端口的命令+ 管道符+ grep,实现,高效的过滤
netstat -tunlp | grep 'nginx'
统计文件数量
# 1.统计系统中/var/log目录下有多少个log文件
#1.先找出/var/log下所有的log文件,find是递归搜索,找出所有的log后缀文件,不放过一个
find /var/log -name '*.log' | wc -l
统计系统用户数量
/etc/passwd
cat /etc/passwd | wc -l
管道符,结合find命令搜索信息
#1.找出系统中所有的txt文件,然后再过滤出,其中包含了apple信息的txt是哪些
find / -name '*.txt' # 这个命令找出的,每一个txt文件的名字吧,并且就是,一堆,一行一行的文本而已
#2.我要判断出,这些文件,哪一个是包含了apple字符串内容的
#一个个的去grep这些文件才行!!!
1.解读1
2.解读2
需求
1.找出系统上所有的txt文本
2.判断哪些文件中是包含了apple文本行的
grep -l 显示匹配到数据的的文件名
这道题,需要用到grep+管道符+xargs理解。
查看系统所有端口号
netstat -tunlp
xargs
作用是,简单的说 就是把其他命令的给它的数据,传递给它后面的命令作为参数
先抛出需求
语法如下
#命令1 | xargs 选项
#选项
-i 用 {} 代替传递的数据
xargs实现批量备份
xargs实现批量重命名
判断哪些文件中是包含了apple文本行的
find / -type f -name '*.txt' | xargs -i grep -l 'xiake' {}
/var/log/nginx/mima.txt
exec用法
和xargs的思路一致,对筛选出的内容再加工。会一个就行
实战
# 删除系统中超过10天的日志
#可以使用xargs
find /tmp/ -name '*.txt’| xargs -i rm -f{}
#也可以使用-exec
find ./ -name '*.txt' -exec rm -f {} \; #最后\前要加空格
# -exec 跟着shel1命令,结尾必须以;分号结束,考虑系统差异,加上转义符\;作用是替代Find查阅到的结果前后得有空格
#还可以用-ok
find ./ -name '*.txt' -ok rm -r {} \; #-ok 比 -exec 多了确认环节,更友好,如下图
用户管理
不同的用户,在不同的目录下,操作不同的文件
权限都是不一样。
用户登录的机器
该文件,和这个用户的关系是什么。
在单位里运维作为服务器的管理员,root权限是有的
而开发,测试,他们是不可能有root权限的
即使需要使用root权限,运维会给他配置(临时使用管理员身份运行)----sudo
root对普通账号的管理
- 修改他的密码
- 禁止他登录
- 禁止他一个月登录
用户分类
- 系统通过useradd创建的普通用户
- 安装软件时,自动生成的用户
- 还有系统默认的一些用户
如何判断他们,根据用户的id号,UID来决定。
关于普通用户去运行软件,也是为了降低系统的风险性,如nginx这个假用户,运行了软件的工作进程
关于root
- root为什么是root呢?为什么权限最大呢,因为他的UID是0,系统根据用户的id号,决定它的作用
- linux中的每一个用户,都有一个自己的组。
0224班,root---超哥
普通用户---叶金阳---一个人就成一个组,叶金阳组
组的概念
超哥这个讲师机(root创建的一个文本文件),只能让披荆斩棘组(读,写,执行)
其他人,无任何权限
组,组内成员,权限统一化的概念。
披荆斩棘组
张少辉
叶金阳
天天向上组
李文杰
郑佳强
Tiger组
王仁刚
王秉诚
用户概念
用户组的概念
一个系统文件,应该属于单个用户,也可以属于某个组
linux的用户,用户组
于超老师所在的运维团队有3个人,分别是
于超、狗蛋、三胖
于超负责代码部署、系统中的名字叫 yuchao
狗蛋负责数据库部署,系统中的名字叫 goudan
三胖负责监控,系统中的名字叫 sanpang
公司的网站在服务器上运行着,运维团队要检查网站的状况,此时他们是分工很明确的,三人同时登录了服务器
1、yuchao的权限只能操作网站代码、日志等
ssh yuchao01@服务器ip
/www/apecome/conf
/www/apecome/html/png
/www/apecome/html/*.html
/www/apecome/html/js/
/www/apecome/sbin/
这里面必然存放了软件的可执行命令,启动命令
/www/apecome/log/
网站的各种日志,统一放这管理
2、goudan的权限只能操作数据库,登录、查看日志
ssh goudan01@ip
/database_mysql/
3、sanpang的权限只能查看监控程序的状态、日志
ssh sanpang01@ip
/zabbix01/
并且他们不能越权访问其他人的文件资料,提示权限不够
linux的用户组
linux的用户组
- 为了方便管理属于同一组的用户,Linux 系统中还引入了用户组的概念。
- 通过使用用 户组号码(GID,Group IDentification),我们可以把多个用户加入到同一个组中,从而方 便为组中的用户统一规划权限或指定任务。
- 对于linux而言,比如公司的开发部门,需要访问服务器上一个文件夹的资料,并且允许读取、允许修改写入,开发部门有30个人,你要给每一个人都添加读写权限吗?
- 那必然是给开发部门设置的权限就是,允许读写该文件夹,然后属于该部门的人员,就自然有了组内的权限,后续开发部门招新人,只要加入组内,权限也有了。
- Linux管理员在创建用户时,将自动创建一个与其同名的用户组,这个用户组只有该用户一个人,
useradd yuchao01
root的权利
- Linux系统的特性就是可以满足多个用户,同时工作,因此Linux系统必须具备很好的安全性。
- 在安装RHEL7时设置的root管理员密码,这个root管理员就是所有UNIX系统中的超级用户,它拥有最高的系统所有权,能够管理系统的各项功能,如添加/删除用户,启动/关闭进程,开启/禁用硬件设备等等。
- 因此“能力越大,责任越大”,root权限必须很好的掌握,否则一个错误的命令可能会摧毁整个系统。
root为什么权利这么大?
root只是个名字而已,权利很大的原因,在于他的UID是0。
[root@yuanlai-0224 opt]# id
uid=0(root) gid=0(root) groups=0(root)
- UID,user Identify,好比身份证号
- GID,group Identify,好比户口本的家庭编号
- 在Linux系统中,用户也有自己的UID身份账号且唯一
- 在Linux中UID为0,就是超级用户,如要设置管理员用户,可以改UID为0(不推荐该操作)
- 建议普通用户用sudo提权。
- 系统用户UID为1~999 Linux安装的服务程序都会
创建独有的用户
负责运行。 - 普通用户UID从1000开始:由管理员创建(centos7),最大值1000~60000范围
- centos6创建普通用户是500开始
解释/etc/passwd
和用户创建相关的配置文件
useradd命令
/etc/passwd 用户信息
/etc/shadow 用户密码信息
/etc/group 用户组信息
/etc/gshadow 用户组密码信息 ,在大公司,用户和组数量很大的情况下,需要制定复杂的权限管理,那时会用到组密码
当你执行useradd的时候,系统自动创建 /home/chengzhiwei01 这个家目录下会一些用户默认模板文件
是从下面这个文件夹,拷贝过去的
/etc/skel
skel是skeleton的缩写,意为骨骼、框架。故此目录的作用是在建立新用户时,用于初始化用户根目录。系统会将此目录下的所有文件、目录都复制到新建用户的根目录,并且将用户属主与用户组调整为与此根目录相同。
# 修改用户密码 或给用户创建密码
passwd user
##关于用户创建,涉及的配置文件
用户管理的命令
命令 | 作用 |
---|---|
useradd | 创建用户 |
usermod | 修改用户信息 |
userdel | 删除用户及配置文件 |
passwd | 更改密码 |
chpasswd | 批量更新用户密码 |
change | 修改用户密码属性 |
id | 查看用户Uid,Gid,组信息 |
su | 切换用户 |
sudo | 临时用root用户身份执行命令 |
visudo | 编辑sudoers配置文件 |
组管理
#创建一个组d
groupadd <组名>
groupadd develop
#-g 设置组id号,默认从1000开始,1~999是系统预留的组
group -g 1888 develop
检查组信息 (附属组)
groupadd执行后,是将组信息,写入了文件,一个管理所有组信息的文件。
#没有任何提示即创建成功,可以去/etc/group查看创建的组
tail -5 /etc/group
tcpdump:x:72:
dahong:x:1000:
nginx:x:994:
cat:x:1001:
develop:x:1888:
上图字段依次为:
- 组名
- 密码
- 组Id
- 附属组用户
修改组(groupmod)
#语法:groupmod 参数 组名
#参数:-g gid缩写,可设置组ID
# -n name缩写,可设置组名
#修改组名为Devolp和组id号为1985
groupmod -g 1985 -n Devolp devolp
Develop:x:1985:
删除组(groupdel)
#语法: groupdel <祖名>
groupdel Develop
tail -5 /etc/group
nscd:x:28:
tcpdump:x:72:
dahong:x:1000:
nginx:x:994:
cat:x:1001:
用户管理
关于用户的增、删、改。
且用户信息和系统上的文件对应.
查看用户
查看用户配置文件
#查看用户配置文件
cat /etc/passwd
id查看用户信息
# id <usernamae>
id xiaoming
uid=1003(xiaoming) gid=1002(Develop) groups=1002(Develop)
id命令参数
id xiaoming
uid=1003(xiaoming) gid=1002(Develop) groups=1002(Develop)
# -u显示用户id
id -u xiaoming
1003
# -g显示组id
id -g xiaoming
1002
# -un显示用户名
id -un xiaoming
xiaoming
# -gn显示组名
id -gn xiaoming
Develop
添加用户
#语法:useradd [选项 选项值] ... 用户名
#参数
# -g: 表示指定用户的用户主《主要) 组,选项值可以是用户组ID,也可以是组名
# -M:表示不给创建的用户添加家目录
useradd -g Develop xiaoming
useradd -M xiaoming
tail -5 /etc/group
tcpdump:x:72:
dahong:x:1000:
nginx:x:994:
cat:x:1001:
Develop:x:1002:
# -G: 表示指定用户的用户附加额外)组,选项值可以是用户组ID,也可以是组名
useradd -G dahong xiaoliang
grep 'huangyan' /etc/passwd
huangyan:x:2000:2000::/home/huangyan:/sbin/nologin
# -u :uid,用户的id (用户的标识符),系统默认会从588 /或1888之后按顺序分配uid,如果不想使用系统分配的,可以通过i
# -c: comment,添加注释(选择是否添加)
# -s: 指定用户登入后所使用的she11 解释器,默认/bin/bash[专门的接待员],如果不想让其登录,则可以设置为/sbin/nologin
useradd -u 2000 -s /sbin/nologin -G Develop huangyan
id huangyan
uid=2000(huangyan) gid=2000(huangyan) groups=2000(huangyan),1002(Develop)
# -d: 指定用户登入时的启始目录(家目录位置)17 -n: 取消建立以用户名称为名的群组 (了解)
用户创建过程
- 在 /etc/passwd 文件中创建一行关于chaoge用户的数据
- 在 /etc/shadow 文件中新增了一行关于chaoge密码的数据
- 在 /etc/group 文件中创建一行与用户名相同的组,例如chaoge
- 在 /etc/gshadow 文件中新增一行与新增群组相关的密码信息,例如chaoge
- 自动创建用户的家目录,默认在/home下,与用户名同名,如/home/chaoge
修改用户(usermod)
linux的用户信息可以改,修改了用户信息,影响的是该用户在linux服务器上的权限 注意,只能修改未登录的用户信息
#语法: # usermod [选项 选项的值] ... 用户名
#作用: 修改用户的各种属性
#参数选项
#-g:表示指定用户的用户主组,选项的值可以是用户组的ID,也可以是组名
#-G:表示指定用户的用户附加组,选项的值可以是用户组的ID,也可以是组名
#-u: uid,用户的id (用户的标识符),系统默认会从509 之后按顺序分配uid,如果不想使用系统分配的,可以通过该选项自定义
#-L: 锁定用户,锁定后用户无法登陆
usermod -L xiaoming
ssh xiaoming@ip #会提示被ssh服务器拒绝密码,无法登陆
#-U: 解锁用户unlock
usermod -U xiaoming
#-c:备注,修改用户帐号的备注文字
#-d:登入目录,修改用户登入时的目录
#-s:shel1,修改用户登入后所使用的shell
usermod xiaoming -g 2001 -u 6666 -s /bin/bash -c 'i am xiaoming'
id xiaoming
uid=6666(xiaoming) gid=2001(Test) groups=2001(Test)
grep 'xiaoming' /etc/passwd
xiaoming:x:6666:2001:i am xiaoming:/home/xiaoming:/bin/bash
修改用户密码
#passwd <username>
passwd xiaoming
#按提示继续就行
Changing password for user xiaoming.
New password:
Retype new password:
passwd: all authentication tokens updated successfully.
#用户密码加密后储存在/etc/shadow文件里,该文件默认0权限,除root用户任何用户无法查看
ll /etc/shadow
---------- 1 root root 1089 Mar 13 15:07 /etc/shadow
删除用户(userdel)
建议注释/etc/passwd用户信息和/etc/group的组信息,而非直接删除用户。
# 语法
userdel <参数> <用户>
#参数选项
# -f:强制删除用户,即使用户当前已登录;
# -r: 删除用户的同时,删除与用户相关的所有文件。
userdel xiaoming # 保留家目录
userdel -rf xiaoming # 强制删除用户与其家目录
查看当前登陆用户
# who am i 打印当前用户名
root
# who显示已登陆的用户信息
# pts/序号 ssh远程终端的代称
# tty 是虚拟终端的代称
who
root pts/0 2024-03-13 19:59 (47.96.60.215)
# w 显示已登陆的用户信息,及其负载信息
w
20:06:16 up 5 days, 36 min, 1 user, load average: 0.00, 0.01, 0.05
# last 显示近期登陆的终端有哪些
# pts/序号 ssh远程终端的代称
# tty 是虚拟终端的代称
last -5 #显示最新的5条记录
root pts/0 47.96.60.215 Wed Mar 13 19:59 still logged in
root pts/0 47.96.60.211 Wed Mar 13 19:59 - 19:59 (00:00)
root pts/0 47.96.60.218 Wed Mar 13 13:44 - 15:31 (01:47)
root pts/0 47.96.60.217 Wed Mar 13 13:44 - 13:44 (00:00)
root pts/0 47.96.60.214 Wed Mar 13 13:14 - 13:44 (00:29)
# lastlog 显示关于用户的登陆记录
# pts/序号 ssh远程终端的代称
# tty 是虚拟终端的代称
lastlog
Username Port From Latest
root pts/0 47.96.60.215 Wed Mar 13 19:59:24 +0800 2024
bin **Never logged in**
daemon **Never logged in**
adm **Never logged in**
lp **Never logged in**
sudo命令提权
#su
su - dahong #切换用户为dahong,并切换环境
#sudo 用户身份提权 ,让普通用户不输入root密码,获得root权限,需要root用户授权sudo命令
[dahong@dahong opt]$ sudo touch /opt/1.txt
#visudo,编辑sudo的配置文件,添加用户信息
#编辑sudo配置文件/etc/sudoers/,如下图,给用户dahong,sudo的权限
如下图
文件、用户权限管理
- 普通用户
- 超级用户
- 用户组
不同的用户,以及不同的组,对于linux的文件操作,权限高地,权限不同。
读取 cat,more,tail
写入 echo 追加 ,vim编辑,cat重定向
修改,修改文件属性,mv改名字,修改文件权限
执行, 文件中写的是可执行的语句,如bash语句,python的脚本文件
执行一般指的是,文件中写的是编程语言的语句的一个特殊文件
可以运行该文件,称之为脚本
查看文件属性
要设置权限,就需要知道文件的一些基本属性和权限的分配规则。 在Linux 中,Is 命令常用来查看文档的属性,用于显示文件的文件名和相关属性。
#查看文件属性,两种方法
# ls -l <文件名>
# ll <文件名>
ls -l dahong.txt
ll dahong.txt
-rw-rw-r-- 1 dahong develop 0 Mar 14 12:12 /home/dahong/dahong.txt
#stat <文件名>
stat dahong.txt
File: ‘/home/dahong/dahong.txt’
Size: 0 Blocks: 0 IO Block: 4096 regular empty file
Device: fd01h/64769d Inode: 393254 Links: 1
Access: (0664/-rw-rw-r--) Uid: ( 1000/ dahong) Gid: ( 1002/ develop)
Access: 2024-03-14 12:12:20.356223851 +0800
Modify: 2024-03-14 12:12:20.356223851 +0800
Change: 2024-03-14 12:16:00.809223851 +0800
Birth: -
文件属性详解
-rw-rw-r-- 1 dahong develop 0 Mar 14 12:12 /home/dahong/dahong.txt
#第一位:文件类型 常见三种: - 表示文件 ,d表示文件夹,l表示软连接,类似windows的快捷方式
#第二位:属主权限
#第三位:属组权限
#第四位:文件链接数
#第五位:属主
#第六位:属组
#第七位:文件大小
#第八位:latest mtime
#最后一位:文件名
linux文件类型
#常见文件类型
- : 文件
d : 文件夹
l : 软连接,类似windows的快捷方式
#不常见文件类型
b :块设备文件 (如读取硬盘,光驱等 /dev/sda /dev/sdb)
p :管道文件
c :字符设备文件,如网络串口设备
s :socket文件,进程间通信文件,比如mysql生成的mysql.sock
权限分类
权限针对目录,directory | 权限针对文件,file | 数字 | |
---|---|---|---|
读r,read | 表示可以(ls)查看目录中存在的文件名称 | 表示可以查看文件内容;cat | 4 |
写w,write | 表示是否可以删除目录中的子文件或者新建子目录(rm/touch/mkdir) | 表示可以更改文件的内容;vim 修改,保存退出 | 2 |
执行x,executable | 表示是否可以进入目录中(cd) | 表示是否可以执行文件,一般指二进制文件、或者脚本文件 | 1 |
linux的文件属于谁
认识文件权限
关于u,g
设置文件权限
chmod命令, chomod是change mode的缩写
#语法
chmod 参数 权限 文件名
#参数
-r 递归,文件夹更改权限时用
#注意:使用该命令,要么是root登录,要么是属主(你不可能随便修改别人的资料)
#更改字母权限
chmod u+rw dahong.txt
-rw------- 1 root root 0 Mar 14 15:25 dahong.txt
chmod u+r,g+r,o-r dahong.txt
#更改数字权限
chmod 764 xiaohong.txt
[xiaohong@iZ2zej10jlnefk7va4ms59Z ~]$ ll /tmp/xiaohong.txt
更改文件属主,属组
chgrp
#语法
chgrp <新拥有者用户名> <文件名>
#只更改文件属主
chgrp xiaohong dahong.txt
#同时更改文件属主,属组
chgrp xiaohong.develop dahong.txt
#只更改文件属组
chgrp .develop dahong.txt
chown
#语法
chown <新拥有者用户名> <文件名>
#只更改文件属主
chown xiaohong dahong.txt
#同时更改文件属主,属组
chown xiaohong.develop dahong.txt
#只更改文件属组
chown .develop dahong.txt
文件夹权限
#删除文件夹,要有w权限
#进入文件夹,要有x权限
#其他文件权限一样
#查看文件夹权限
ll -d /tmp/xiaohong
drwxr-xr-x 2 xiaohong dahong 4096 Mar 14 18:10 /tmp/xiaohong
注意
# 普通用户dahong写了个python脚本权限为764,
#但此时dahong的同组用户xiaohong 可以直接用python dahong.py执行该脚本, 此时g的权限为6,应该不能执行才对
#原因是
#python这条命令是由root创建的且他的权限为777
#若将权限改为744 ,则xiaohong无法用python dahong.py的方式运行脚本
linux里一切皆文件,python命令本质也是一个文件,具有权限!!!
文件特殊属性
特殊权限对照表
类别 | suid | sgid | sticky |
---|---|---|---|
字符表示 | S | S | T |
出现位置 | 用户权限位x | 用户组权限位x | 其他用户权限位x |
基本权限位有x | s | s | t |
数字表示法 | 4 | 2 | 1 |
八进制表示法 | 4000 | 2000 | 1000 |
生效对象 | 用户位 | 用户组 | 其他用户 |
#用数字法设置特殊权限时,特殊权限的数字在第一位
#例如
chmod 4777 dahong.txt #给dahong.txt设置suid
chmod 2777 dahong.txt #给dahong.txt设置sgid
chmod 1777 dahong.txt. #给dahong.txt设置sbit
suid的作用
我们会发现这个passwd命令,有一个奇怪的s权限,这干啥的?
可以看到,原本表示文件所有者权限中的 x 权限位,却出现了 s 权限,此种权限通常称为 SetUID,简称 SUID 特殊权限。
看这里,理解suid的作用
SUID 特殊权限仅适用于可执行文件
- 二进制命令
- 比如系统的/usr/bin下提供的命令,如 /usr/bin/ls,如/usr/bin/rm
所具有的功能是,只要用户对设有 SUID 的文件有执行权限,那么当用户执行此文件时,会以文件属主的身份去执行此文件
- bash
先看一个没有suid权限的二进制命令 [root@yuanlai-0224 tmp]# ll /usr/bin/rm - rwx r-x r-x. 1 root root 62864 4月 11 2018 /usr/bin/rm # 当你给这个rm命令,设置了suid权限,那么普通用户在执行该rm命令时,就以属主的身份去执行(root身份) 如果你给rm命令设置了suid权限 这个普通用户执行了如下命令,会如何 rm -rf /* cc03用户 执行 rm -rf /tmp/* 留作业,你们试一试,友好提醒,做好快照 如上,理解suid的作用。
一旦文件执行结束,身份的切换也随之消失。
以这个/usr/bin/passwd可执行命令举例
就是让普通用户,执行该命令时,临时获得root的权限。
实际用法,suid可以让普通用户,修改自己的密码,是因为
可执行文件/usr/bin/passwd 有了suid权限。
自己去试试给 /usr/bin/rm设置suid,查看普通用户,再使用rm时的权限。
找出系统中,所有包含了suid权限的
# find提供权限查找的参数 -perm -ls find提供的格式化打印参数,就好比-exec -ok -delete 一样
find / -type f -perm -4000 -ls
find / -type f -name '*.log' -ok rm -f {} \;
sgid的作用
1.对于二进制命令来说,sgid的功能和suid基本一样,只不过一个是设置文件属主的权限,一个是设置属组的权限,和9位基本rwx那个理解概念一样。
2. suid是获得文件属主的权限,sgid是获得文件属组的权限
3. sgid主要用于文件夹,为某个目录设置sgid之后,在该目录中的创建的文件,都以(目录的属组)权限为准,而不属于创建该文件的用户权限,这就实现了多个用户,可以共享一个目录的作用。
一般直接和文件夹结合使用,给文件夹设置sgid,等于设置了一个共享文件夹的概念
简单总结
1.一个普通的文件夹,普通用户cc03进入后,创建文件,user,group都属于谁?都属于cc03
baoqiang01 进入后,创建文件 ,都属于谁? baoqiang01
2.当一个文件夹设置了sgid,普通用户cc03进入后,创建的文件,user属于cc03,group属于了文件夹的属组。
baoqiang01 进入后,创建了文件,user,group属于谁?user属于baoqiang01,group属于文件夹的属组。
将sgid和红帽认证考题结合练习
考生账号是 user01
[user01@yuanlai-0224 ~]$
1.创建一个共享目录/home/admins
mkdir /home/admins
2.要求该目录属组是adminuser,adminuser组内成员对该目录的权限是,可读,可写,可执行。
创建组adminuser
groupadd adminuser
修改/home/admins的属组
chgrp adminuser /home/admins
修改group角色的权限是 r,w,x
chmod g=rwx /home/admins
3.其他用户均无任何权限(root特例)
chmod o='' /home/admins
4.这道题,的最后一个难关,是这个》》》》 进入/home/admins创建的文件,自动继承adminuser组的权限。
(这里用到了sgid的权限吗,你需要给/home/admins设置sgid权限,肯定得是root去设置吧)
用字母表示法,给文件夹设置sgid权限
chmod g+s /home/admins
[root@yuanlai-0224 ~]# ll /home/admins/ -d
drwxrws---. 2 root adminuser 6 3月 17 11:50 /home/admins/
5.此时你在这个目录下,创建的文件,自动继承adminuser的权限(文件的group,默认就是adminuser了)
[root@yuanlai-0224 ~]#
[root@yuanlai-0224 ~]# touch /home/admins/我是root.log
[root@yuanlai-0224 ~]#
[root@yuanlai-0224 ~]#
[root@yuanlai-0224 ~]# mkdir /home/admins/我是root文件夹
[root@yuanlai-0224 ~]#
[root@yuanlai-0224 ~]#
[root@yuanlai-0224 ~]# ll /home/admins/
总用量 0
-rw-r--r--. 1 root adminuser 0 3月 17 11:56 我是root.log
drwxr-sr-x. 2 root adminuser 6 3月 17 11:56 我是root文件夹
[root@yuanlai-0224 ~]#
发现文件夹,也自动有了s权限,还实现了递归继承的效果
sbit的作用
直观的效果查看
1.创建一个公共目录,给与777权限
mkdir /0224linux/
chmod 777 /0224linux/
2.分别用2个普通用户,去操作,查看权限是如何
为什么需要学sbit权限
背后的原理是这个:
# 总结,在一个权限是 777的文件夹下,所有用户,可以进行 r,w,x的操作,也就意味着,可以随便,删除其他人的资料!!
linux中的确存在这么一个公共文件夹,名字叫做/tmp 临时文件夹
sbit粘滞位,用的已经很少了,但是对于系统特殊文件夹/tmp来说,是整个系统所有用户的临时文件存放地,谁都有任意的权限,你会发现该目录的权限巨大。
[root@yuchao-tx-server ~]# ll -d /tmp/
drwxrwxrwt. 8 root root 4096 3月 16 18:54 /tmp/
但是看到了一个特殊权限t
一句话总结。
当目录有了粘滞位特殊权限,这个目录除了root用户特殊以外,任何用户都只能删除、移动自己的创建的文件,而不能影响到其他人。
演示
没有设置粘滞位,且目录是777权限时,也就是任意的user、group、other角色在这个目录下,可以进行读、写、执行任意文件。
1.移除/tmp的sbit权限,查看该目录下的文件操作
[root@yuanlai-0224 0224linux]# chmod o-t /tmp
[root@yuanlai-0224 0224linux]# ll -d /tmp
drwxrwxrwx. 11 root root 260 3月 17 12:26 /tmp
请注意,还给人家加上去
2.自己创建一个共享目录,只能创建,不能删除别人的资料
[root@yuanlai-0224 0224linux]# chmod o+t /0224linux/
[root@yuanlai-0224 0224linux]#
[root@yuanlai-0224 0224linux]#
[root@yuanlai-0224 0224linux]# ll -d /0224linux/
drwxrwxrwt. 2 root root 47 3月 17 12:18 /0224linux/
[root@yuanlai-0224 0224linux]#
然后再用俩用户,演示文件删除动作
umask的作用(了解,不要改)
系统服务管理
ssh服务
#1.ssh服务
netstat -tnlp |grep sshd
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1129/sshd
tcp 0 0 127.0.0.1:6010 0.0.0.0:* LISTEN 125786/sshd: root@p
tcp6 0 0 :::22 :::* LISTEN 1129/sshd
tcp6 0 0 ::1:6010 :::* LISTEN 125786/sshd: root@p
#2. 我可以自由启动,关闭,重启该服务,查看效果
#3. 学习centos7,启动的强大,服务管理命令
#语法
#systemctl start/stop/restart/status 服务名称
systemctl stop sshd
systemctl status sshd
systemctl start sshd
#4.sshd服务,运行后,即可去访问该服务
network服务
管理linux的网络功能,名字叫network
#对network服务管理,启停,查看
systemctl stop network #停止
systemctl status network #查看状态
systemctl start network #启动
systemctl restart #重启
systemctl服务管理命令
在centos6时代,是service管理服务的运行状态
service命令用于对系统服务进行管理,比如启动(start)、停止(stop)、重启(restart)、重新加载配置(reload)、查看状态(status)等。
# service mysqld 指令 #打印指定服务mysqld的命令行使用帮助。
# service mysqld start #启动mysqld
# service mysqld stop #停止mysqld
# service mysqld restart #重启mysqld (先停止,再运行 ,进程会断开,id会变化)
# service mysqld reload # 当你修改了mysqld程序的配置文件,需要重新加载该配置文件,而不重启
chkconfig: 指定服务是否开机启动
sshd 远程连接服务
network 提供网络的服务
设置开机自启
提供了一个维护/etc/rc[0~6] d 文件夹的命令行工具,它减轻了系统直接管理这些文件夹中的符号连接的负担。chkconfig主要包括5个原始功能:为系统管理增加新的服务、为系统管理移除服务、列出单签服务的启动信息、改变服务的启动信息和检查特殊服务的启动状态。当单独运行chkconfig命令而不加任何参数时,他将显示服务的使用信息。
[root@localhost www]# chkconfig --list #查看系统程序列表
[root@localhost www]# chkconfig httpd on #将httpd加入开机启动
[root@localhost www]# chkconfig httpd off #关闭httpd开机启动
备注
在centos7中,service启停服务的命令和 chkconfig命令,都被统一整合为了systemctl
并且你依然可以使用旧的命令,系统会自动的转变为systemctl去执行。
做了向下兼容的操作,新命令,兼容旧命令。
linux资源管理
服务器有哪些资源(可用硬件资源)可以让你去管理,从硬件角度,结合软件去考虑
- 磁盘资源(可以存储更多的电影,更多文档)
- 磁盘容量空间给你用
- 磁盘的读写性能
- (比较慢,但是容量大的,机械硬盘,比较便宜,实惠)
- 速度极快,但是容量较小,价格昂贵的,固态硬盘
- 内存资源(可以让你同时运行更多的程序,比如开50个QQ) 内存较小的,只能运行8个QQ
- 计算机程序,都会加载到内存中
- cpu再去内存中取数据
- 内存容量
- 总大小
- 可用剩余大小
- 计算机程序,都会加载到内存中
- cpu(可以让你同时运行更多的,能够同时处理这个50个QQ)
- cpu计算资源
- 你所有的程序,都是cpu去调度,去计算运行的
- cpu计算资源
- 网络资源
- 网络数据的,吞吐量
- 吞,接收到多少的数据
- 吐,发出去多少的数据
- 网络数据的,吞吐量
学习linux命令去管理这些资源
运维就是围着这些资源在工作的。
进程资源管理
进程,是资源单位(包工头)
线程,是工作单位(干活的工人)
什么是父亲进程,儿子进程
我们登录的xshell终端,是这样的流程
- 系统上运行了sshd服务
- 通过ssh客户端命令,都是去连接这个服务,产生的一堆子进程而已。
通过命令,查看他们的父子关系
通过他们的进程id号来确认无误
理解linux的启动进程关系
关于ps去看进程,区分内核进程和用户进程
理解你是如何登录了linux,以及后续的命令执行,进程关系
linux系统启动产生的 1号进程
↓
运行了sshd服务,xxx进程
↓
ssh远程连接,xxx进程
↓
/in/bash 进程,xxx进程
↓
后续各种命令 ,xxx进程,命令1,命令2,命令3
# 打开3个ssh会话窗口,一个用于查看进程,2个用于 使用vim命令操作,用ps,查看他们的父子关系
孤儿进程,僵尸进程
孤儿进程
- 父进程由于某原因挂了,代码写的不好,导致生成的一堆儿子进程,没有父亲了,成为了孤儿
- 系统有一个1号进程,等于是一个福利院,去收养这些孤儿进程(1号进程会去接替,管理这些孤儿进程的数据)你就能看到,这些孤儿进程,的ppid,就成了1号进程了。
- 孤儿进程释放后,释放执行的相关文件,数据,以及释放进程id号(系统id号是有固定的数量)
演示孤儿进程,但是需要用代码实现,一般都是代码写的垃圾,才会出现这种情况
# 于超老师教你用python实现,孤儿进程。
# 运行一个python程序,用的是系统自带的python2语法
# 1.touch 创建脚本
# 2.写入代码
# 3. 用python解释器 去读这个程序
[root@yuchao-linux01 ~]# cat guer.py
#coding:utf-8
import os
import sys
import time
pid = os.getpid()
ppid = os.getppid()
print 'im father: ', 'pid: ', pid, 'ppid: ', ppid
son_pid = os.fork()
print('now song_pid is: ',son_pid)
#执行pid=os.fork()则会生成一个子进程
#返回值pid有两种值:
# 如果返回的pid值为0,表示在子进程当中
# 如果返回的pid值>0,表示在父进程当中
if son_pid > 0:
print 'father going die...'
# 让老父亲,主动退出,挂掉
sys.exit(0)
# 保证主线程退出完毕
# 程序延迟了1秒,还在运行中,儿子进程还未挂,成了孤儿
time.sleep(5)
print 'im child: ', os.getpid(),'now my father is: ', os.getppid()
看到如下进程状态,就是僵尸进程
[root@167 ~]# ps -ef|grep 30394
root 30394 30317 0 11:57 pts/1 00:00:00 python jiangshi.py
root 30395 30394 0 11:57 pts/1 00:00:00 [python] <defunct> #看到defunct就是僵尸进程
#还可以用top命令去看,有几个僵尸进程
#僵尸进程kill掉就可以了
管理进程的一堆命令
ps
- bash
# linux风格的组合参数,一般都是携带短横线 ps -ef #unix操作系统下,查看进程,用如下不带短横线的参数选项 ps aux #参数解释 #参数风格,请注意,参数的位置,存在先后关系,位置错误可能导致无法使用。 # UNIX风格,没有短横线 a # 显示所有终端、所有用户执行的进程 u # 以用户显示出进程详细信息 x # 显示操作系统所有进程信息 f # 显示进程树形结构 o # 格式化显示进程信息,指定如pid k # 对进程属性排序,如k %mem ,正序排序 ,k -%mem 逆序 --sort,再进行排序,如 --sort %mem 根据内存使用率显示 #linux标准参数用法 -e # 显示所有进程 -f # 显示进程详细,pid,udi,进程名 -p # 指定pid,显示其信息,如 ps -fp 2609 -C # 指定进程的名字查看,如ps -fC sshd -U # 指定用户名,查看用户进程信息 ps -Uf yuchao01 ps -ef ps -p 10086
top:查看cpu使用情况,按q退出
Kill, pkill
bashkill <pid> kill 29613 kill -9 <pid> #强制kill pkill <进程名> pkill ping
htop命令
更美观的,一些第三方工具而已
yum install htop -y
后台运行命令的方式
程序运行可以有2种:
前台运行:在当前的终端,所有的信息都输出到屏幕上,占用你的终端,你也无法继续使用。如果终端异常关闭,导致程序会自动退出。
后台运行:不会占用你的终端,程序在系统后台跑着,你该干啥干啥,终端关了,程序也继续运行
# 后台运行命令
#注意:& 只是帮助进程,在当前的ssh会话中,在后台运行,如果ssh会话断开,进程依然会丢失!!!!!!
# <命令> + &
ping baidu.com &
#no hang up,真的让进程在后台运行,即使会话断开,进程也不丢失,它也是要和 & 符结合使用,实现命令后台执行
#nohup 命令,在默认情况下(非重定向时),会输出一个名叫 nohup.out 的文件到当前目录下
#如果当前目录的 nohup.out 文件不可写,输出重定向到SHOME/nohup.out 文件中。
#nohup + <命令> + &
nohup ping baidu.com $ #nohup ppppp不是bbbbb!!!!
#查看后台进程
jobs
#把前台运行的命令中断,放入后台
ctrl+z
#后台运行程序,和&一样用法
bg
#将后台运行中的程序放前台运行
fg
理解数据流
执行linux命令时,linux默认为用户进程提供了3种数据流
- stdin
- 标准输入、0
- 一般是键盘输入数据
- 比如cat命令等待用户输入
- stdout
- 标准输出、1
- 程序执行结果,输出到终端
- stderr
- 标准错误输出,代号,2
- 程序执行结果,输出到终端
标准输入重定向
# 输入重定向,数据原本是来自于终端的键盘输入,改为了,来自于文件的输入
cat < /etc/passwd
# 比如用在数据库的,数据导入
mysql < /opt/back.sql
标准输出重定向(!!!)
输出重定向是指把命令 (或可执行程序)的 标准输出 或 标准错误输出 重新定向到指定文件中,这样,该命令的输出就不显示在屏幕上,而是写入到指定文件中。
- 使用“>”符号,将标准输出重定向到文件中。形式为: 命令>文件名
- 使用“ >>”符号,将标准输出结果追加到指定文件后面。形式为:命令>>文件名
- 使用“ 2>”符号,将标准错误输出重定向到文件中。形式为: 命令 2>文件名
- 使用“2>>”符号,将标准错误输出追加到指定文件后面。形式为: 命令 2>>文件名
- 使用“ 2>&1”符号或“&>”符号,将把标准错误输出stderr重定向到标准输出stdout,写在重定向命令末尾
- 使用“ >/dev/null”符号,将命令执行结果重定向到空设备中,也就是不显示任何信息。
ping baidu.com >>/tmp/baidu.log 2>&1
ping baidu.com >> /tmp/baidu.log >/dev/null
内存资源管理
free 命令主要是用来查看内存和 swap 分区的使用情况的,其中:
- total: 是指物理内存总大小,信息来自于 /proc/meminfo
- used: 是指已经使用的内存, userd=total-free-buffers-cache
- free: 是指空闲的; free = total - used - buff - cache
- shared: 是指共享的内存;用于tmpfs系统
- buffers: 缓冲区,写入缓冲,用于内存和磁盘之间的数据写入缓冲,存放内存需要写入到磁盘的数 据。加速数据写入
- cached: 缓存区,读取缓存,加快CPU和内存数据交换,存放内存已经读取完毕的数据。加速数据读取
理解cache
理解buffer
关于第二行的swap,现状是完全关掉这个功能的。 第2行数据是Swap交换分区,也就是我们通常所说的虚拟内存(硬件交换分区) 防止内存用完导致系统崩溃,临时拿硬盘的一些空间当做内存使。
free
total used free shared buff/cache available
Mem: 7992344 117852 7528248 32580 346244 7569704
Swap: 2097148 32612 2064536
cpu资源管理
#后3位显示近1分钟,近5分钟,近15分钟的cpu平均负载情况,最大值为cpu个数,如4核的话最大值为4
uptime
11:20:14 up 1 day, 22:09, 1 user, load average: 0.01, 0.02, 0.05
#查看cpu具体信息
lscpu
#或
cat /proc/cpuinfo
#### stress压力测试命令
#运行多进程,测试查看cpu压力
#1.安装stress工具
yum install stress -y
#2.使用stress命令,给机器进行压力测试,这个命令会让你的机器,cpu达到100%,以此实现最高压的环境
# --cpu 4 测试4个cpu
stress --cpu 1 --timeout 600
```
磁盘资源管理
#df命令查看磁盘使用情况,disk free
df -h
Filesystem Size Used Avail Use% Mounted on
devtmpfs 877M 0 877M 0% /dev
tmpfs 887M 0 887M 0% /dev/shm
tmpfs 887M 524K 887M 1% /run
tmpfs 887M 0 887M 0% /sys/fs/cgroup
/dev/vda1 40G 2.5G 35G 7% /
tmpfs 178M 0 178M 0% /run/user/0
#监控磁盘io动态
iotop
#安装iotop
yum install iotop -y
iotop
网络资源管理
网络端口查看
先理解网络是什么,你和对方网站通信
最终要的记住就是
- ip地址,对应了tcp/ip协议的,ip地址号
- 端口号,对应了应用层的 如80(伴随着http协议的服务,如nginx这样的网站服务)端口
#查看ip地址和端口
ifconfig
#或
ip addr show
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo #回环地址,端口:8
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000 #ip: 172.28.81.42,端口20
link/ether 00:16:3e:35:3e:dd brd ff:ff:ff:ff:ff:ff
inet 172.28.81.42/20 brd 172.28.95.255 scope global dynamic eth0
valid_lft 315189993sec preferred_lft 315189993sec
inet6 fe80::216:3eff:fe35:3edd/64 scope link
valid_lft forever preferred_lft forever
理解tcp和udp的区别
netstat命令
network status,网络状态命令
#命令:netstat
#作用:查看网络连接状态
#语法:netstat -tnlp
#选项:
-t:表示只列出tcp 协议的连接;(你可以看到你的nginx的运行)
-n:表示将地址从字母组合转化成ip 地址,将协议转化成端口号来显示;(netsta默认会看到机器的主机名 -n 直接显示ip)
-l :表示过滤出"state(状态)"列中其值为LISTEN(监听)的连接;(你的nginx是否监听了0.0.0.0:80)确认端口在运行中,等待客户来访问
-p:表示显示发起连接的进程pid 和进程名称; (显示使用该端口的进程的id号)
-u :查看udp连接 (ntpd服务)
netstat -tunlp |grep nginx
netstat -tunlp | grep ntp
ss命令
#用法和netstat一模一样
ss -tunlp |grep nginx
备注
在高并发场景下,也就是机器的链接数特别多的时候,使用ss性能比netstat更高一些。
iftop
yum install iftop -y
#用起来和top命令很像,动态的掌握服务器的流量情况
#能够看到你机器,有多少流量进来,有多少流量出去
linux 软件包管理
什么是软件,代码
软件包顾名思义就是将应用程序、配置文件和数据打包的产物=======nginx_v.10.rpm
yum install nginx -y ============= 先下载 nginx.rpm 软件包 ,然后yum自动帮你去安装了这个包
/usr/bin/nginx
/etc/nginx/nginc.conf 配置文件,写了用于控制该软件不同功能的参数
centos,redhat ================= nginx-1.10.rpm
ubutnu ============nginx-1.10.deb
所有的linux发行版都采用了某种形式的软件包系统,这使得linux软件管理和在windows下一样方便,
suse、red hat、fedora,centos等发行版都是用rpm包
Debian和Ubuntu则使用nginx.deb格式的软件包。
mysql-5-3-4.rpm
redis-3-4-3.rpm
nginx2-3-2.rpm
关于源代码,编译的过程理解
1. 程序员写的代码,如 下代码,计算机是不认识的,只认识010101
print('hello world')
2.因此代码都是经过系统的一个编译器,进行,编译成机器语言,计算机才能执行的
比如有哪些编译器
c语言用的gcc编译器
golang语言用的golang编译器
上面这俩特点是,代码写完,需要用户,手动的进行 build ,将源码编译成一个二进制的命令(机器可识别的)
xxxxxxxxxxxxx
xxxxxxxxxxxxx
xxxxxxxxxxxxx
xxxxxxxxxxxxx
编译型语言,是吧上述所有代码,全部检测完毕后,生成另一个正确的二进制命令
代码写完后,编译器,自动可以检测出所有的语法问题,因此编译型语言不易出错
golang ,c c++ ,适用于开发系统级工具,比如 docker k8s
比如linux操作系统
python 语言解释型语言(python编译器)
python一遍翻译程序员写的代码,一遍编译成机器认识的机器与语言
xxxxxxxxxxxxx ===============
xxxxxxxxxxxxx ===============
xxxxxxxxxxxxx ====代码出错了,程序直接崩溃
xxxxxxxxxxxxx
脚本型语言,如python很容易出错,代码自上而下,一行一行的去翻译
用在快速开发上,比如测试开发,运维开发,自动化开发
比如网站开发
源码包和rpm包的区别
rpm命令
#rpm下载
rpm -ivh <rpm包或下载链接>
#rpm查看已下载包
rmp -qa
#查看包详情
rpm -i <包名>
#卸载,包名必须正确
rpm -e <包名>
rpm查询文件的文件信息
yum
学习目标
理解为什么需要用yum
- yum就是帮你轻松管理,安装rpm软件的
掌握yum源配置
- 本地源
- 光盘源,centos7.iso(提供了大量的基础软件rpm包)
- 自建yum仓库目录
- 用于离线安装linux软件
- 需要提前准备好软件所需的所有rpm包(rpm -ivh 这种需要捋清楚rpm的包的依赖关系)
- yum自动判断软件之间的依赖关系,轻松安装
- 网络源
- 配置阿里云的yum源
- 清华源
- 官方也提供了yum源(必然是这个最靠谱,好用)
- 本地源
使用yum安装各种软件
- 安装mysql5.6.43
使用yum进行离线rpm安装
linux常见的基础依赖环境,一般这些软件应该是在系统安装时,勾选上,如果没有则需要手动安装
yum install gcc patch libffi-devel python-devel zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel -y
yum源有2种形式
- 本地光盘镜像yum源
- 网络yum源
国内知名的网络yum源
选择的是
centos+epel两个yum仓库
- centos仓库,等于在线获取了一个光盘的镜像站,里面有操作系统,自带的各种rpm包
- epel源
所谓的yum源,其实就是
1.下载了一个yum的配置文件,里面就是一个url而已!
2.这个url指向了不同的镜像站,里面的一个rpm包集合地
3.当你yum install安装的时候,yum自动去这个网站里,搜索mysql名字相关的rpm进行下载,安装
上面是互联网中,第三方的yum源查看
软件官方提供的yum源查看
https://dev.mysql.com/doc/refman/8.0/en/linux-installation-yum-repo.html
yum命令
#搜索软件
yum search xx
#下载
yum install <软件包名>
#卸载
yum remove <软件包名>
#升级
yum update <软件包名>
#升级操作系统(centos代码 + linux内核代码)
yum upgrade xx
yum仓库目录语法
yum的仓库文件,都被统一放在了一个固定的目录 /etc/yum.repos.d/
语法
是在这个目录中,名字是 *.repo结尾的文件,就会被yum识别为仓库文件
并且只能是在第一层目录,否则都无法识别为yum仓库
因此 /etc/yum.repos.d/就是yum仓库文件夹,并且只能是这个文件夹的第一层目录
存在于 *.repo文件
否则第一层目录,没有*.repo文件,就是没有可使用的yum仓库
也就是无法使用yum命令
#查看当前有的yum仓库
cd /etc/yum.repos.d/
ls
CentOS-Base.repo epel.repo
#列出当前可用的源
yum repolist all
#启用指定的yum软件仓库。
yum config-manager --enable <仓库名>
#启用指定的订阅源(repo)。
subscription-manager repos --enable <仓库名或id>
#你可以查看当前系统中可用的所有软件包,包括已安装的和可用于安装的。
yum list
挂载本地光盘,作为镜像源(作为yum的rpm包仓库)
1. 找到一个光盘镜像吧 (vmware虚拟机+物理机+准备一个外置光驱+自己刻录一个centos7光盘) (vmware连接上centos7光盘即可)
2. 在系统中, 找到这个光盘文件(linux一切皆文件,你所有的物理硬件,都可以在系统上以文件形式找到)
ls /dev目录下
找到光盘文件,进行挂载动作,让某一个目录和这个光盘,建立连接
mkdir /mnt/my_centos
[root@167 opt]# mount /dev/sr0 /mnt/my_centos/
mount: /dev/sr0 写保护,将以只读方式挂载
[root@167 opt]#
[root@167 opt]#
[root@167 opt]# ls /mnt
my_centos
[root@167 opt]#
[root@167 opt]# ls /mnt/my_centos/
CentOS_BuildTag EFI EULA GPL images isolinux LiveOS Packages repodata RPM-GPG-KEY-CentOS-7 RPM-GPG-KEY-CentOS-Testing-7 TRANS.TBL
[root@167 opt]#
[root@167 opt]#
[root@167 opt]# df -h
文件系统 容量 已用 可用 已用% 挂载点
/dev/mapper/centos-root 17G 8.3G 8.8G 49% /
devtmpfs 1.9G 0 1.9G 0% /dev
tmpfs 1.9G 0 1.9G 0% /dev/shm
tmpfs 1.9G 21M 1.9G 2% /run
tmpfs 1.9G 0 1.9G 0% /sys/fs/cgroup
/dev/sda1 1014M 170M 845M 17% /boot
tmpfs 378M 12K 378M 1% /run/user/42
tmpfs 378M 0 378M 0% /run/user/0
/dev/sr0 4.2G 4.2G 0 100% /mnt/my_centos
[root@167 opt]#
[root@167 opt]#
3.创建yum的仓库文件,学习yum仓库文件语法
去看一看阿里云,给你创建的yum仓库,语法长什么样,模仿着写就行
写一个关于光盘挂载的repo文件
此时的光盘数据在本地目录,/mnt/my_centos/
如果你的rpm包,得通过互联网去找,语法是 http://aliyun.com/xxxxxxxxxxxxx
如果你的rpm是去系统中找,语法是 file://路径即可
vim /etc/yum.repos.d/my_cdrom.repo
[base]
name=0224-linux-yum-cdrom
baseurl=file:///mnt/my_centos/
enabled=1
gpgcheck=0
4.此时有了yum仓库,熟练的敲下两个命令
# 先清空旧的yum缓存
yum clean all # 清空内存中的yum缓存
rm -rf /var/cache/yum # 删除磁盘上的yum缓存
# 生成新的yum缓存(否则你第一次yum install会去下载很多元数据,比较慢)
[root@167 yum.repos.d]#
[root@167 yum.repos.d]# yum makecache
已加载插件:fastestmirror, langpacks
Determining fastest mirrors
base | 3.6 kB 00:00:00
(1/4): base/group_gz | 166 kB 00:00:00
(2/4): base/filelists_db | 3.1 MB 00:00:00
(3/4): base/primary_db | 3.1 MB 00:00:00
(4/4): base/other_db | 1.3 MB 00:00:00
元数据缓存已建立
5.此时你可以用yum,去本地光盘中装软件
6.记住,删除东西,也别用rpm -e去删了,它只删了一个软件,没删依赖
删也用yum 去删
yum remove vim* -y
7.yum去安装,检查火狐浏览器
# 查看当前yum仓库,都有哪些rpm包
yum list
yum list |wc -l # 查看当前yum仓库中,有多少rpm包可以用
[root@167 yum.repos.d]# yum list |grep -i firefox
firefox.x86_64 52.7.3-1.el7_5 installed
yum remove firefox -y
yum install firefox -y
8.尝试在本地光盘中安装mysql,看看发生什么
查看当前yum源,是否有mysql的软件
经验告诉我 ,mysql这个软件,属于c/s模式
client/server模式
因此mysql这样的软件,也得先装服务端
(服务端的名字,基本是mysql-server-版本号.rpm)
再装客户端
历史典故
因为mysql8企业版 被oracle收购了,收费了,以及java也被oracle
由于mysql收费了,因此开源组织,将其改造,换了个马甲,名字叫做mariadb用法一样,系统上运行后,什么都一样,只不过软件包的名字换了
yum remove mysql -y
你会发现在光盘仓库中,可以找到 的是
mariadb 5.5.56-2.el7
你是找不到 mysql -5.6.xx
这个仓库就不好使。。。
换一个仓库。。
如何从当前yum仓库,搜索某软件的用法
[root@167 yum.repos.d]# yum list|grep mariadb
mariadb-libs.x86_64 1:5.5.56-2.el7 @anaconda
mariadb.x86_64 1:5.5.56-2.el7 base
mariadb-bench.x86_64 1:5.5.56-2.el7 base
mariadb-devel.x86_64 1:5.5.56-2.el7 base
mariadb-server.x86_64 1:5.5.56-2.el7 base
mariadb-test.x86_64 1:5.5.56-2.el7 base
[root@167 yum.repos.d]#
学会查看yum的报错
yum很好用
配置网络yum源(阿里云yum源)
1.选择主流的开源镜像站
2.用人家提供的命令,生成yum仓库文件即可
首先必须在 /etc/yum.repos.d 只能在这个目录下,且是第一级
/etc/yum.repos.d/aliyun.repo
为什么要用网络源,因为内容更多,更全
因为如阿里云的工程师,会吧市面主流的软件,全部同步到这个阿里云仓库中,比较齐全,但是也有限制
比如,本地光盘是没有nginx这个工具的
3. 快速配置阿里云仓库,以及移除本地光盘源
https://developer.aliyun.com/mirror/
使用wget命令下载阿里云的repo文件
#wget -O 对该文件进行存放到指定目录,且改名 O:output
wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
# 上述命令等于如下
cd /etc/yum.repos.d/
wget https://mirrors.aliyun.com/repo/Centos-7.repo
ls /etc/yum.repos.d/Centos-7.repo
4.配置阿里云仓库
wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
5. 你会发现,上面这个默认的源,软件数量也不算多,比如nginx就找不到,它的作用类似于 你挂载光盘源,用于安装很多基础,简单的工具
而第三方的工具是没有,如nginx
还得配置一个叫做epel仓库
wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
6.配置好2个仓库后,基本完事,可以安装市面绝大多数的软件了
生成缓存,便于后续加速下载
yum clean all
rm -rf /var/cache/yum
yum makecache
7.此时可以验证用yum源去安装软了
比如先看看软件列表有多少东西
yum list|wc -l
yum list|grep mysql
yum list|grep nginx
8.想用什么软件,可以先
捋一捋,学了几个yum仓库
- 本地光盘挂载仓库
- 网络源仓库
- 离线安装软件包,比如就是nginx,
- 先准备好该软件的rpm包,准备好nginx的软件包,以及它的软件依赖rpm包
- 准备到一个目录中,让其成为yum可识别的仓库即可
- 然后创建yum仓库的repo文件,完事
- yum install 软件
yum支持这俩功能
[root@167 ~]# #只下载,不安装
[root@167 ~]# # 下载,安装,且保留rpm包,便于你下次的离线安装
是如下俩参数,可以实现,很方便的通过网络源,下载你想要的rpm包
--downloadonly
Don't update, just download. This is done in the background, so the yum lock is released for other operations. This can also be chosen by typing 'd'ownloadonly at
the transaction confirmation prompt.
--downloaddir=directory
Specifies an alternate directory to store packages.
# 获取vim安装包,以及它必须的依赖
[root@167 0224_software]# yum install --downloadonly --downloaddir=/0224_software/ vim
自建yum仓库(本地目录rpm包)
1.创建一个软件目录
[root@167 ~]# mkdir /0224_software
2.准备软件的所有rpm包,你可以选择用光盘仓库,也可以用这个神奇的办法
# 拿vim举例,安装vim以及它的依赖包
yum install --downloadonly --downloaddir=/0224_software/ vim
3.使用命令,让该目录成为yum可识别仓库
yum install createrepo -y
4.使用该命令,创建本地仓库
[root@167 0224_software]#
[root@167 0224_software]# createrepo /0224_software/
Spawning worker 0 with 1 pkgs
Spawning worker 1 with 1 pkgs
Spawning worker 2 with 0 pkgs
Spawning worker 3 with 0 pkgs
Workers Finished
Saving Primary metadata
Saving file lists metadata
Saving other metadata
Generating sqlite DBs
Sqlite DBs complete
[root@167 0224_software]#
[root@167 0224_software]#
[root@167 0224_software]#
[root@167 0224_software]# ll /0224_software/ -a
总用量 7156
drwxr-xr-x 3 root root 114 3月 30 11:56 .
dr-xr-xr-x. 30 root root 4096 3月 30 11:46 ..
drwxr-xr-x 2 root root 4096 3月 30 11:56 repodata
-rw-r--r-- 1 root root 6205700 12月 18 2020 vim-common-7.4.629-8.el7_9.x86_64.rpm
-rw-r--r-- 1 root root 1106008 12月 18 2020 vim-enhanced-7.4.629-8.el7_9.x86_64.rpm
[root@167 0224_software]#
5.此时,创建repo文件,指向这个目录即可,就是一个本地仓库目录
你先移除其他的repo文件,让yum被识别
cat >> /etc/yum.repos.d/my_dir.repo <<EOF
[base]
name=0224-linux-my_dir
baseurl=file:///0224_software/
enabled=1 # 这个参数是控制,该repo启用,还是关闭的
gpgcheck=0
EOF
6.此时yum本地仓库就好使了
yum install vim -y
已安装:
vim-enhanced.x86_64 2:7.4.629-8.el7_9
作为依赖被升级:
vim-common.x86_64 2:7.4.629-8.el7_9
完毕!
[root@167 yum.repos.d]# vim
[root@167 yum.repos.d]#
了解网站部署
#1.nginx小试牛刀
yum install nginx -y
#系统默认是没有这个nginx安装包的。
#2.简单了解,给你的机器,配置一个软件仓库(360软件大师,点点点,下载各种工具,它的软件,还携带了一堆广告)
#配置阿里云的软件仓库,https://developer.aliyun.com/mirror/
#这里配置下载2个软件仓库 (centos和redhat系统的关系)
# wget -O 指定文件存放到哪里 资源的下载链接
# 直接下载Centos-7.repo这个文件,到当前目录
wget https://mirrors.aliyun.com/repo/Centos-7.repo
# 不但下载资源,且指定到某一个路径下
wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
## stress压力测试命令
运行多进程,测试查看cpu压力
```
1.安装stress工具
yum install stress -y
2.使用stress命令,给机器进行压力测试,这个命令会让你的机器,cpu达到100%,以此实现最高压的环境
# --cpu 4 让4个c
stress --cpu 1 --timeout 600
```
## free命令
#3.既然机器有了软件仓库,即可下载各种应用了
yum install nginx -y
#4. 就可以启动该应用
systemctl start nginx
#5.程序运行了,如何判断他运行?
windows
任务管理器
查看进程,就是一个个运行中的软件,在消耗系统的资源
linux
任务管理器
查看进程
查看nginx这个程序的进程
执行ps命令
命令是 ,仅仅查看这个机器上的 nginx进程信息,是否存在
ps -ef |grep nginx
#6. 一个网站的运行,默认端口是 http的80端口,用你的客户端,浏览器去访问, 10.96.0.134:80即可
#7.注意关闭服务器的防火墙,执行命令
iptables -F
#8.停止这个网站服务,思路是?停用80端口,也就是,停止这个软件的运行
systemctl stop nginx
#再次重新运行,命令是
systemctl restart nginx
#8.可以修改该软件的配置了,比如网站首页的内容
#完成1分钟,做一个dnf官网,下载该网址的首页html文件
wget https://dnf.qq.com/main.shtml
#移动,拷贝该文件,到你的nginx网站目录下, 它会自动识别
#移动 /opt/main.shtml 到/usr/share/nginx/html/ 目录下,且重命名为index.html
mv /opt/main.shtml /usr/share/nginx/html/index.html
#9.当你修改了网站的前端页面,无须重启,网站自动更新
http://10.96.0.134/
完成练习效果,访问你的linux机器地址,看到一个有内容的网址即可。
课程里是dnf官网,自行更换其他html文件。
零零碎碎
如何检验文件是否被修改过?
#检查文件唯一值是否变化
md5sum <文件名>
md5sum /etc/passwd
9fcb3badca0f58424472fddc372147de /etc/passwd
变量
#注意变量等号前后不能有空格
name='dahong'
#错误版本!!!!无效写法!!!
name = 'dahong'