Linux
入门
Linux 一切皆文件 :文件就是 读 写 权限管理
为什么要学习Linux ?
在服务器端 在开发领域Linux 越来越受欢迎 很多大型项目都是在 Linux 系统上
Linux 内核只是由芬兰人 林纳斯.托瓦兹 在兹尔辛基大学时出于个人爱好而编写的
目前市面较知名的发行版:Ubuntu、RedHat、CenOs、Dedora、SUSE、OpenSUSE、Arch Linux、SolusOs 等。。
LAMP:Linux + Apche+Mysql+PHP
LNMP:Linux + Nginx+Mysql+PHP
环境搭建
安装CentOS
Linux 是一个操作系统,你也可以将自己的电脑安装成双系统
虚拟机(VMware 下载 )
- 可以通过镜像进行安装
- 可以使用制作好的镜像
- 安装 VMware 虚拟机软件 然后打开我们的镜像既可以使用
VMware 的使用方法:
点击屏幕进入虚拟机
Ctrl + Alt 将聚焦退出虚拟机
购买云服务器
云服务器就是一个远程电脑,服务器一般不会关机
使用 xshell 连接
输入用户名 和 密码即可
Ctrl + 鼠标滚轮 放大 缩小字体
上传文件使用 xftp 即可 (xftp安装成功就会显示)
jdk8 Linux 下载
http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
Linux 系统
开机:
开机会启动许多程序 在windows 叫做 服务(service) 在Linux 叫做 守护进程(daemon)
开机后 会显示文本登录界面 ,输入 用户名 密码 一般密码是不显示的
登录的方法一般有三种:
- 命令行登录
- ssh登录
- 图形界面登录
最高权限账号 root 可以操作一切
关机:
在Linux 领域大多数服务器 很少遇见关机的操作
sync # 将数据由内存同步到硬盘中
shutdown # 关机指令
shutdown -h 10 # 10分钟后关机
shutdown -h +10 # 10分钟后关机
shutdown -h now # 立马关机
shutdown -h 20:25 # 系统会在今天20:25关机
shutdown -r now # 系统立马重启
shutdown -r +10 # 系统十分钟后重启
reboot # 重启 等同于 shutdown -r now
halt # 关闭系统 等同于 shutdown -h now 和 poweroff
注:不管是重启系统 还是 关机,首先要运行 sync 命令 把内存中的数据写到磁盘中
系统目录结构
- 一切皆文件
- 根目录 / 所有的文件都挂载在这个节点下
ls / # 会看到当前目录下的所有目录
- bin:bin是Binary的缩写 这个目录存放的是最经常使用的目录
- boot:启动Linux的一些核心文件 包括一些链接文件以及镜像文件
- dev:Device 的缩写 存放的是Linux的外部设备 在Linux中访问设备的方式和访问文件是相同的
- ect :存放所有系统管理所需要的配置文件 和 子目录
- home:用户的主目录 在Linux 中 每个用户都有一个自己的目录 一般该目录名是以用户的账号命名的
- lib:存放最基本的动态链接共享库
- lost+found:这个目录一般是空的 当系统非法关机后 这里就存放了一些文件
- media:Linux会自动识别一些设备 例如U盘 光驱等 识别后,会把识别的设备挂载到这个目录下
- mnt:为了让用户临时挂载别的系统文件
- opt:给主机额外安装软件摆放的目录 如你安装Oracle数据库就可以放在这个目录下 默认是空
- proc:这个目录是一个虚拟目录 他是系统内存的映射 可以通过直接访问这个目录来获取系统信息
- root:系统管理员 也是超级管理员的用户主目录
- sbin:s 就是 Super User 的意思 存放的是系统管理员使用的系统管理程序
- srv:存放运行服务启动后需要提取的数据
- sys:这是Linux2.6内核的一个很大的变化 该目录下安装了2.6内核中新出现的一个文件系统 sysfs
- tmp:存放临时文件
- usr:一个非常重要的文件目录 用户的很多应用程序 和 文件都放在这个目录下 类似于windows 下的 program files 目录
- usr/bin:系统用户使用的应用程序
- usr/sbin:超级用户使用的高级的管理程序和系统守护程序
- usr/src:内核源代码默认的放置目录
- var:存放不断扩充的东西 我们习惯将那些经常修改的目录放在这个目录下 包括各种日志文件
- run:是一个临时文件系统 存储系统启动以来的信息 当系统重启时 这个目录下的文件应该被删除或清除
- www:存放服务器网站相关的资源 环境 网站的项目
Linux 基本命令
简单系统命令
# 查看ip地址
ip a
ip addr
# ping网络(测试网络连通)
ping www.baidu.com
# 查看系统时间
date
# 注销
logout
# 关机
shutdown now
# 重启
reboot
# 清屏
clear
# 静态查看系统进程
ps -aux
# 实时查看系统进程
top
# 快捷键
↑ 下翻
↓ 上翻
q 退出
# 关闭进程
kill 进程id
# 强制关闭进程
kill -9 进程id
目录管理
绝对路径 :路径的全称
相对路径:相对于当前的路径
cd # 切换目录
cd 目录名【绝对路径(都是以/开头) 相对路径】
./ # 当前目录
cd .. # 返回上一级目录
ls # 列出目录
-l # 输出该目录下的所有文件 包括文件的属性和权限
-a # 输出该目录下的所有文件 包括隐藏文件
pwd # 显示当前所在目录
所有Linux 命令可以组合使用
文件管理
mkdir # 创建一个目录
mkdir -p # 递归创建目录
rmdir # 删除目录 (仅能删除空目录)
rmdir -p # 删除多个递归目录
# 删除文件夹
rm -r 文件夹
# 强制删除不询问
rm -rf 文件
# 在当前目录下新建文件
touch 文件名
cp # 复制文件
cp 要复制的文件 新的地方
# 拷贝文件夹
cp -r 源文件夹 新文件夹
如果当前目录存在 只要输入 前面几个 按 Tab 就会自动补全
rm # 移除文件或目录
-f # 忽略不存在的文件 不会出现警告 强制删除
-r # 递归删除
-i # 互动 删除询问
不要使用
rm -rf / # 删除系统的所有文件
mv # 移动文件或目录 重命名文件
-f # 强制移动
-u # 只替换已经更新过的文件
基本属性
前面的第一个字母:
- d : 代表当前为目录
- -:文件
- l :链接文档(link file)
- b :装置文件里面可供存储的接口设备
- c : 装置文件里面的串行端口设备 键盘 鼠标等
接下来的字符 三个为一组 均为【rwx】的三个参数组合
-
r:代表可读(read)
-
w:代表可写(write)
-
x:代表可执行(execute)
三个权限的位置不会改变 如果没有权限 就会出现减号【-】
修改文件属性
-
chgrp :更改文件属组
chgrp [-R] 属组名 文件名 # -R : 递归更改文件属组
-
chown : 更改文件属主 也可以同时更改文件属性
chown [-R] 属主名 文件名 chown [-R] 属主名: 属组名 文件名
-
chmod : 更改文件9个属性
chmod [-R] xyz 文件或目录
Linux 文件属性有两种设置方法: 一种是数字(经常使用) 一种是符号
Linux 文件的基本权限就有九个,分别是 owner/group/others 三种身份各有自己的 read/write/execute 权限。
权限分数对照表
r:4 w:2 x:1
内容 字符 数字
可读可写不可执行 rw- 6
可读可写可执行 rwx 7
chmod 777 # 文件赋予所有权限 可读可写可执行
文件内容查看
-
cat 由第一行开始显示内容 (如:查看配置文件内容)
-
tac 从最后一行开始显示
-
nl 显示的时候 输出行号
-
more 一页一页的显示文件内容 (空格代表翻页 enter:代表下一行 :f :显示当前行号)
-
less 与 more 类似 但是可以往前翻页 (同上 上下箭头代表向上向下翻页 q 命令 退出 / 查找字符串)
q # 退出
/ 要查找的字符串 # 查找当前文件里面的内容 向下查找
? 要查找的字符串 # 向上查找
查找后:
n # 继续查找下一个
N # 继续查找上一个
-
head 只看头几行
- -n 控制显示几行
-
tail 只看尾巴几行
# 实时滚动显示文件的最后10行信息(默认10行)
tail -f 文件名
# 显示文件的最后20行信息
tail -n 20 文件名
tail -n -20 文件名
# 显示文件信息从第20行至文件末尾
tail -n +20 文件名
可以使用 man [命令] 来查看各个命令的使用文档 如 :
man cp
网络配置目录 :
/etc/sysconfig/network-scripts
ifconfig : # 查看网络配置
Linux 链接
两种: 硬链接 软链接
硬链接
A–B 假设B是A的 硬链接 那么他们两个指向同一个文件 允许一个文件拥有多个路径 用户可以通过这种机制建立硬链接到一些重要文件上 防止误删
软链接
类似于windows 下的快捷方式 删除源文件 快捷方式也访问不了
touch # 创建文件
echo # 写入字符串
[root@VM-4-3-centos /home]# touch f1 # 创建一个f1文件
[root@VM-4-3-centos /home]# ls
f1 lighthouse xiaotao
[root@VM-4-3-centos /home]# ln f1 f2 # 给f1创建硬链接f2
[root@VM-4-3-centos /home]# ls
f1 f2 lighthouse xiaotao
[root@VM-4-3-centos /home]# ln -s f1 f3 # 给f1创建软链接 (符号链接)f3
[root@VM-4-3-centos /home]# ls
f1 f2 f3 lighthouse xiaotao
[root@VM-4-3-centos /home]# echo "I love study!" >> f1 # 给f1 写入一些字符串
[root@VM-4-3-centos /home]# cat f1 # 可以看到 f1 f2 f3 都有
I love study!
[root@VM-4-3-centos /home]# cat f2
I love study!
[root@VM-4-3-centos /home]# cat f3
I love study!
[root@VM-4-3-centos /home]#
Vim 编辑器
Vim 通过一些插件可以实现和idea 一样的功能
Vim 是 vi 发展出来的一个文本编辑器。代码补全 编译 错误跳转等。
在Linux 中 必须会使用Vim 查看内容 编辑内容 保存内容
三种使用模式
命令模式(Command mode)
用户刚启动vi/vim 就会进入命令模式
此时敲击键盘会被Vim 识别为命令 而非输入字符 如我们按下 i 并不会输入一个字符 而会执行一个命令。
常用命令:
- i 切换到输入模式 以输入字符
- x 删除当前光标所在处的字符
- **:**切换到底线命令模式 以在最低一行输入命令 如果是编辑模式 需要先退出编辑模式 (Esc :退出编辑模式)
当输入 vim xiaotao.txt 回车就会出现如下界面 此时处于命令模式
输入模式(Insert mode)
在命令模式下按下i就进入输入模式
在输入模式下 可以使用以下按键:
- 字符按键以及shift组合 输入字符
- ENTER 回车键 换行
- BACK SPACE: 退格键 删除光标前一个字符
- DEL:删除键 删除光标后一个字符
- 方向键:在文本中移动光标
- HOME/END :移动光标到行首/行尾
- Page Up/Page Down:上下翻页
- Insert :切换光标为输入/替换模式 光标变成竖线/下划线
- Esc :提出输入模式 切换到命令模式
底线命令模式(Last line mode)
在命令模式下 按下 : (英文冒号)就进入底线命令模式
在底线命令模式可以输入单个或多个字符的命令
经常使用: wq
- q : 退出程序
- w : 保存文件
按Esc 可以随时退出底线命令模式
完整过程 :
新建或编辑文件 按 i 进入编辑模式 ,编写内容 编写完成后退出编辑模式(Esc) 退出后进入底线命令模式(:) wq 保存退出
:set nu # 显示行号
账号管理
在公司中一般都不是使用 root 账号
Linux 系统是一个多用户多任务的分时操作系统,任何一个要使用系统的用户 都必须要先向系统管理员申请一个账号 任何以该账号登录进入
每个账号都拥有一个唯一的用户名和各自的口令
实现用户账号的管理 要完成的工作有:
- 用户账号的添加 删除 修改
- 用户口令的管理
- 用户组的管理
添加用户
useradd # 添加用户useradd 选项 用户组
选项:
- -c comment 指定一段注释性描述
- -d 目录 指定用户主目录 如果此目录不存在 则同时使用 -m 创建该目录
- -g 用户组 指定用户所属的用户组
- -G 用户组 用户组指定用户所属的附加组
- -m 使用者目录如果不存在则自动创建
- -s shell 文件 指定用户的登录shell
- -u 用户名 指定用户的用户名 如果同时有 -o 选项 则可以重复其他一行的标志号
用户名:
- 指定新账号的登录名
[root@VM-4-3-centos home]# useradd -m xiaotao1 # 添加一个用户
[root@VM-4-3-centos home]# lslighthouse xiaotao xiaotao1
[root@VM-4-3-centos home]#
Linux 中一切皆文件 这里添加用户就是向文件中写入用户的信息 /etc/passwd
删除用户
删除用户 userdeluserdel -r xiaotao # 删除用户并将目录一起删除
查看当前文件下的所有用户 cat /etc/passwd
[root@VM-4-3-centos home]# cat /etc/passwdroot:x:0:0:root:/root:/bin/bashbin:x:1:1:bin:/bin:/sbin/nologindaemon:x:2:2:daemon:/sbin:/sbin/nologinadm:x:3:4:adm:/var/adm:/sbin/nologinlp:x:4:7:lp:/var/spool/lpd:/sbin/nologinsync:x:5:0:sync:/sbin:/bin/syncshutdown:x:6:0:shutdown:/sbin:/sbin/shutdownhalt:x:7:0:halt:/sbin:/sbin/haltmail:x:8:12:mail:/var/spool/mail:/sbin/nologinoperator:x:11:0:operator:/root:/sbin/nologingames:x:12:100:games:/usr/games:/sbin/nologinftp:x:14:50:FTP User:/var/ftp:/sbin/nologinnobody:x:99:99:Nobody:/:/sbin/nologinsystemd-network:x:192:192:systemd Network Management:/:/sbin/nologindbus:x:81:81:System message bus:/:/sbin/nologinpolkitd:x:999:998:User for polkitd:/:/sbin/nologinlibstoragemgmt:x:998:997:daemon account for libstoragemgmt:/var/run/lsm:/sbin/nologinrpc:x:32:32:Rpcbind Daemon:/var/lib/rpcbind:/sbin/nologinntp:x:38:38::/etc/ntp:/sbin/nologinabrt:x:173:173::/etc/abrt:/sbin/nologinsshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologinpostfix:x:89:89::/var/spool/postfix:/sbin/nologinchrony:x:997:995::/var/lib/chrony:/sbin/nologintcpdump:x:72:72::/:/sbin/nologinsyslog:x:996:994::/home/syslog:/bin/falselighthouse:x:1000:1000::/home/lighthouse:/bin/bashxiaotao1:x:1001:1001::/home/xiaotao1:/bin/bash
修改用户
修改用户 usermodusermod -d /home/h1 xiaotao # 修改用户xiaotao 到home/h1 目录
切换用户
切换用户 su
退出当前用户
exit
hostname # 查看主机名
hostname xiaotao # 修改主机名 (重启就会失效 可以去修改配置文件)
给用户设置密码
我们一般通过 root 创建用户的时候 要配置密码
Linux 上输入密码是不会显示的 正常输入即可
不同用户修改密码:
锁定账号
如果你是 root 用户 假如张三辞职了 就应该冻结该账号 就不能登录系统了
passwd -l zhang # 锁定之后 这个用户就不能登录了
passwd -d zhang # 将密码清空 这样也不能登录了
用户组管理
属主 ,属组
每个用户都有一个用户组 系统可以对对一个用户组的所有一行进行集中管理(开发,测试,运维,root) 不同的Linux系统对用户组的规定有所不同
用户组的管理涉及用户组的添加 删除 修改
组的增加 删除 修改 实际上就是对/etc/group 文件的更新
添加用户组
groupadd 组名
也可以指定id 如果不指定就是自增1
-g
删除用户组
groupdel 组名
修改用户组 的权限 名字
groupmod
切换用户组
# 登录当前用户 zhang
$ newgrp root
文件的查看
/etc/passwd
用户名:口令(登录密码 不可见):用户标识号:组标识号:注释性描述:主目录:登录shell
要查看密码 可以查看
/etc/shadow
/etc/group
用户组
磁盘管理
df # 列出文件系统整体的磁盘使用量
du # 检查磁盘空间使用量
df
du
查看整个系统的容量
Mac 或者 想使用 Linux 挂载我们的一些本地磁盘或者 文件
挂载 : mount
卸载:umount -f [挂载位置] (-f :强制卸载)
进程管理
对于开发人员 Linux更偏向于使用即可
进程基本概念:
- 在Linux中 每一个程序都是有自己的一个进程 每一个进程都有一个id 号
- 每一个进程 都有一个父进程
- 进程有两种存在方式:前台 后台运行
- 一般服务器都是后台运行 基本的程序都是前台运行
ps # 查看当前系统中在执行的各种进程的信息
ps -x x:占位符可以使用
ps --help 查看帮助文档
参数:
-a : 显示当前终端运行的所有进程信息
-u : 以用户的信息显示进程
-x :显示后台运行进程的参数
# ps -aux 查看所有进程
ps -aux|grep mysql # 查看mysql 的进程
ps -aux|grep java # 查看java 的进程
# | 在Linux中这个叫管道符
A|B
# grep 查看文件中符合条件的字符串
ps -ef # 可以查看父进程的信息
ps -ef|grep mysql
# 进程树
pstree -pu # -p :显示父id -u :显示用户组
结束进程 :杀掉进程
kill -9 进程的id # -9 强制
环境搭建
安装软件一般有三种方式:rpm, 解压缩,yum 在线安装
jdk 安装
下载:
jdk-8u191-linux-x64.tar.gz
cd /usr/local && mkdir java
cp /root/jdk-8u191-linux-x64.tar.gz ./java
cd java
tar -zxvf jdk-8u191-linux-x64.tar.gz
rm -rf jdk-8u191-linux-x64.tar.gz
安装java 环境
-
检测当前系统是否存在java环境
java -version
-
如果有需要卸载
rpm -qa|grep jdk # 检测jdk版本信息rpm -e --nodeps jdk # 强制卸载
-
卸载完成后就可以安装了
rpm -ivh rpm包
-
配置环境变量
vim /etc/profile
输入 vim /etc/profile 查看
查看jdk 的安装位置
基本配置
export JAVA_HOME=/usr/local/java/jdk1.8.0_191
export CLASSPATH=.:$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=$JAVA_HOME/bin:$PATH
使配置文件生效
source /etc/profile
问题:
-bash: ls: 未找到命令
因为 path 环境被修改 导致找不到
解决方法 执行:
export PATH=/bin:/usr/bin:$PATH
mysql 忘记密码
检查mysql
服务是否启动,如果启动,关闭mysql
服务
ps -ef | grep -i mysql
service mysqld stop
修改mysql的配置文件my.conf
vi /etc/my.cnf
文件的[mysqld]标签下添加一句
skip-grant-tables
保存退出
重启mysql
service mysqld start
登录
mysql -u root -p
update user set password=password("root") where user="root";
授予mysql远程访问权限
grant all privileges on *.* to 'root' @'%' identified by 'root';
flush privileges;
防火墙
# 查看防火墙服务状态
systemctl status firewalld
# 开启
service firewalld start
# 重启
service firewalld restart
# 关闭
service firewalld stop
# 查看防火墙开启了那些端口
firewall-cmd --list-ports
# 开启端口 需要重启端口号
firewall-cmd --zone=public --add-port=8080/tcp --permanent
# 关闭端口
firewall-cmd --zone=public --remove-port=80/tcp --permanent
# 重启防火墙
systemctl restart firewalld.service
在本地运行项目 :
java -jar jar包
Tomact 安装
war 包就需要放在tomact 中运行
- 下载tomact Linux 默认解压的格式是
apache-tomact-9.tar.gz
- 解压文件
tar -zxvf apache-tomact-9.tar.gz
-
启动 tomact 测试 运行脚本
./xxx.sh ./startup.sh # 执行 ./shotdown.sh # 停止
开启 8080 端口
可以购买域名 然后完成项目的发布
域名解析后 如果端口是 80 (http) 或 443(https) 可以直接访问
如果是 8080 9000 就需要通过Apcahe 或 Nginx 做一下反向代理 配置文件即可
Docker (yum 安装)
https://docs.docker.com/install/linux/docker-ce/centos/
yum 是在线安装 一定要联网
安装
-
检查 CentOS 版本
cat /etc/redhat-release
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YG6hS5DI-1671775462169)(https://qiniu.xiaotao.cloud/QQ截图20211005150836.png)]
-
安装我们的准备环境
yum -y install 包名 # yum install 安装命令 -y :自动确认所以提示 为 y yum -y install gcc yum -y install gcc-c++
卸载以前的 docker 官网里面有
yum remove docker \ docker-client \ docker-client-latest \ docker-common \ docker-latest \ docker-latest-logrotate \ docker-logrotate \ docker-engine
安装
-
安装需要的软件包
yum install -y yum-utils device-mapper-persistent-data lvm2
-
设置stable镜像仓库
# 错误 yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo ## 报错 [Errno 14] curl#35 - TCP connection reset by peer [Errno 12] curl#35 - Timeout # 正确推荐使用国内的 yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
-
更新yum软件包索引
yum makecache fast
-
安装Docker CE
yum -y install docker-ce docker-ce-cli containerd.io
-
启动docker
systemctl start docker
-
测试
docker version # 查看docker 版本 docker run hello-world # 运行第一个hello-world docker images # 查看docker 镜像
-
宝塔面板安装
yum install -y wget && wget -O install.sh http://download.bt.cn/install/install_6.0.sh && sh install.sh
下载完成 就可以得到一个地址
外网面板地址: http://110.42.135.184:8888/tencentcloud
内网面板地址: http://10.0.4.3:8888/tencentcloud
登录即可
重置宝塔密码:
cd /www/server/panel && python tools.py panel 密码
多次登录失败,暂时禁止登录 请输入以下命令 清除登录限制
rm -f /www/server/panel/data/*.login
数据库账号资料
数据库名:www_xiaotao_clo
用户:www_xiaotao_clo
密码:CQx5xmR8Yt
访问站点:http://www.xiaotao.cloud/index.php
快照
保留当前系统信息为快照 随时可以恢复 以防系统出现问题
网络的配置
需要保证Linux 虚拟机 和本机处在同一个网段
Windows
Linux 也必须要配置到 对应的网段 如:192.168.220.100
etc/sysconfig/network-scripts/
vim ifcfg-eth0
虚拟机 可以配置为 如下: