Linux基础
1. Linux系统特点
开放性(开源)、多用户、多任务良好的用户界面、优异的性能与稳定性
Windows是单用户多任务
单用户:在登录计算机操作系统时只能允许同时登录==一个==用户
多用户:在登录计算机操作系统时只能允许同时登录==多个==用户
单任务:允许用户同时进行==一个==操作任务数量
多任务:允许用户同时进行==多个==操作任务数量
2. Linux发展
3. 思想模式
- Linux 一切皆是文件。
^305325
4. 指令
作用 | 指令 |
---|---|
查看文件列表 | ls;ls -l;ls -lh; |
查看目录内存 | du;ls -s;ls -sh; |
路径 | cd;pwd; |
生成 | mkdir 文件夹名;makdir -p 文件夹名; |
touch 文件名;makefile 文件名; | |
文件操作 | cp -r; |
mv; | |
rm;rm -r;rm -rf; | |
创建软链接 | ln -s 原始文件路径地址 快捷方式的路径 |
文件搜索 | find <路径范围> [选项] <选项的值> ; |
find ./ -name '*.txt'; | |
find ./ -type f; | |
find ./ -type d |wc -l; | |
输出操作 | >;>>; |
cat;cat ... ... >...; | |
磁盘查看 | df;df -h; |
查看块状设备的信息 | lsblk(Name:名称,Size:设备大小,Type:类型,MountPoint:挂载点) |
内存查看 | free;free -m; |
文件查看 | head ...;head -n ...; |
tail ...;tail -n ...;tail -f ...; | |
less ...; | |
wc -lwc ...; | |
日期时间 | date; |
date +%F;date "+%Y-%m-%d"; | |
date +%T;date "+%H:%M:%S"; | |
date "+%F %T";date "+%Y-%m-%d %H:%M:%S"; | |
date -d "-1 day" "+%Y-%m-%d %H-%M-%S"; | |
日历 | cal;cal -1;cal -3; |
cal -y 2030; | |
cal -s;cal -m;cal -my 2030; | |
使用时间 | uptime; |
清屏 | clear;Ctrl+L; |
管道 | 过滤(需配合其他指令使用):ls |grep y; |
统计文件数(需配合其他指令使用):ls |wc -l; | |
主机名 | hostname;hostname -f(显示全限定域名即FQDN); |
用户信息 | id;id 用户名;whoami; |
进程信息 | ps;ps -ef;ps -ef | grep panel;pstree -p; |
top(VIRT虚拟内存 RES 常驻内存 SHR 共享内存); | |
进程管理 | kill ...;killall ...; |
服务管理 | service <服务名> start/stop/restart;systemctl stop httpd; |
系统信息 | uname;uname -a; |
网卡信息 | ifconfig; |
网络状态 | netstat -tnlp |
设置权限 | chmod [选项] 权限模式 文档/文件夹,其中选项-R:递归设置权限 (当文档类型为文件夹的时候) |
重启 | reboot;reboot -w; |
关机 | shutdown;shutdown -h now '关机提示';init 0;halt;poweroff; |
手册 | man ...; |
5. vim
- vim的三种模式:命令模式、编辑模式、末行模式
- 命令模式
功能 | 按键 |
---|---|
行首 | - |
行尾 | $ |
首行 | gg |
尾行 | G |
上一页 | ctrl+b |
下一页 | ctrl+f |
复制 | yy;[行数] yy; |
剪切 | dd;[行数] dd;D; |
粘贴 | p |
撤销 | :u;u |
重做 | ctrl+r |
跳转到第n行 | n+G;:n; |
上/下/左/右移n行 | n+↑/↓/←/→ |
- 末行模式
功能 | 按键 |
---|---|
保存 | :w |
另存为 | :w 路径 |
退出 | :q |
保存并退出 | :wq |
自适应退出 | :x |
强制退出 | :q! |
外部命令 | :!外部命令 |
搜索 | /关键词;N;n |
取消高亮 | :nohl |
替换 | 😒/关键词/目标词;😒/关键词/目标词/g; |
:%s/关键词/目标词;:%s/关键词/目标词/g(%表示整个文件,g表示全局) | |
显示行号 | :set nu |
查看当前打开的文件 | :files |
切换文件 | :open 文件名 |
切换上/下一个文件 | :bp/n |
开启/关闭颜色 | :syntax on/off |
- 编辑模式
功能 | 按键 |
---|---|
计算器 | ctrl+r |
- 配置
- 个人配置文件(~/.vimrc)
- 全局配置文件(/etc/vimrc)
- 异常退出
需要删除.swp文件
- 别名机制
~/.bashrc文件
6. 自有服务
6.1 运行模式
运行模式也叫做运行级别 linux中必定存在的一个进程init,其存在一个对应的配置文件/etc/inittab,整个文件叫做==系统运行级别配置文件==
systemctl set-default multi-user.target
- 0 — 表示关机级别(不要将默认的运行级别设置成这个值)
- 1 — 单用户模式
- 2 — 多用户模式,不带NFS(Network File Syetem)
- 3 — 多用户模式,完全的多用户模式(不带桌面的,纯命令行模式)
- 4 — 没有被使用的模式(被保留模式)
- 5 — X11,完整的图形化界面模式
- 6 — 表示重启级别(不要将默认的运行级别设置成这个值)
6.2 用户与用户组管理
- Linux系统是一个多用户多任务的操作系统,任何一个要使用系统资源的用户,都必须首先向系统管理员申请一个账号,然后以这个账号的身份进入系统。
- 每个用户都有一个用户组,系统可以对一个用户组中的所有用户进行集中管理。不同Linux 系统对用户组的规定有所不同,如Linux下的用户属于与它同名的用户组,这个用户组在创建用户时同时创建。
文件 | 作用 |
---|---|
/etc/passwd | 存储用户的关键信息 |
/etc/group | 存储用户组的关键信息 |
/etc/shadow | 存储用户的密码信息 |
功能 | 语法 | 说明 |
---|---|---|
添加用户 | useradd [选项] 用户名 | 添加新用户 |
-g | 表示指定用户的用户主组,可以是用户组的id,也可以是组名(主组在passwd里查看) | |
-G | 表示指定用户的用户附加组,可以是用户组的id,也可以是组名(附加组在group里查看) | |
-u | 用户的id(用户的标识符),系统默认会从500之后按顺序分配uid | |
-c | 加注释 | |
修改用户 | usermod [选项] 用户名 | 修改用户信息 |
-g | 表示指定用户的用户主组,可以是用户组的id,也可以是组名(主组在passwd里查看) | |
-G | 表示指定用户的用户附加组,可以是用户组的id,也可以是组名(附加组在group里查看) | |
-u | 用户的id(用户的标识符),系统默认会从500之后按顺序分配uid | |
-l | 修改用户名 | |
设置用户密码 | passwd 用户名 | 给用户设置密码 |
切换用户 | su [用户名] | 切换要登录的用户 |
删除用户 | userdel 用户名 | 删除指定用户 |
-r | 同时删除其家目录 | |
添加用户组 | groupadd [选项] 用户组名 | 添加新用户组 |
-g | 设置自定义的用户组id,系统默认会从500之后按顺序分配 | |
修改用户组 | groupmod [选项] 用户组名 | 修改用户组信息 |
-g | 设置自定义的用户组id,系统默认会从500之后按顺序分配 | |
-n | 修改用户组名 | |
删除用户组 | groupdel 用户组名 | 删除指定用户组 |
6.3 SSH服务
- ssh:secure shell 安全外壳协议,可以用于远程连接协议和远程文件传输协议。
- 协议使用端口号:默认是22。
- 配置文件:/etc/ssh/ssh_config。
- 终端工具主要帮助连接远程的服务器,常见终端工具有:Xshell、secureCRT、Putty等。
PSCP语法:
- pscp [选项] 用户名@linux主机地址:资源路径 windows本地的地址(下载到win)
- pscp [选项] 资源路径 用户名@linux主机地址:远程路径(上传到linux)
- pscp [选项] -ls 用户名@linux主机地址(列出远程路径下结构)
6.4 设置主机名
- hostname [新的主机名]:只能暂时修改,重启后恢复默认的localhost
- 修改etc/sysconfig/network后重启才是永久修改
- hostnamectl set-hostname shiyanshi
- 加入本地地址才能访问127.0.0.1,需要修改/etc/hosts。
6.5 自启动管理
- 提供开启启动项的管理服务 chkconfig
指令 | 作用 |
---|---|
chkconfig --list | 查看自启动服务的信息 |
chkconfig --del 服务名 | 删除自启动的服务 |
systemctl list-dependencies [target] | 查看自启动服务的信息 |
systemctl enable crond.service | 开机启动 .service可以省略 |
systemctl disable crond.service | 禁止开机启动 |
systemctl status crond.service | 查看服务状态 |
systemctl start crond.service | 启动服务 |
systemctl stop crond.service | 停止服务 |
systemctl restart crond.service | 重启服务 |
systemctl is-enabled crond.service | 查看某个服务是否开机启动 |
6.6 NTP时间
- 用于对计算机的时间同步管理操作
- 根时间服务器全球可用的NTP服务器列表与解析服务
- ntpdate 时间服务器的域名/ip
- 有了ntp服务后就可以自动设置时间了
6.7 防火墙
- 用于防范网络攻击,可分为硬件防火墙和软件防火墙。国家长城防火墙GFW。
- 选择性让网阔请求通过(iptables,firewalld)
- 其服务操作使用systemctl,查看规则使用iptables -L -n。其中-L表示列出规则,-n表示以数字形式展示。
指令 | 说明 |
---|---|
firewall-cmd --add-port=80/tcp --permanent | 永久添加8080端口例外(全局) |
firewall-cmd --remove-port=80/tcp --permanent | 永久删除8080端口例外(全局) |
6.8 RPM管理
- 对于linux服务器上的软件包及逆行管理操作:查询、安装(更新)、卸载
指令 | 说明 |
---|---|
rpm -qa|grep 关键词 | 查询 |
rpm -e 软件的名称 | 删除 |
rpm -e 软件的名称 --nodeps | 强制删除 |
rpm -ivh 软件包名称 | 软件安装 |
^9756ce
6.9 cron/crontab计划任务
- 语法指令
指令 | 说明 |
---|---|
crontab -l | list,列出指定用户的计划任务列表 |
crontab -e | edit,编辑指定用户的计划任务列表 |
crontab -u | user,指定的用户名,如果不指定,则表示当前用户 |
crontab -r | remove,删除指定用户的计划任务列表 |
- 计划任务的规则与格式
- 以行为单位,一行表示一个计划
- 分 时 日 月 周 需要执行的命令(0 0 * * * reboot表示每天0点0分重启)
- 可以用正则表达式,例如每10分钟可以写为*/10 1,2,6 1-3 * * reboot
- 黑名单配置(禁止其中的用户配置计划任务): /etc/cron.deny里写用户名,每行一个
- 白名单配置(允许其中的用户配置计划任务): /etc/cron.allow里写用户名,每行一个
7. 设备挂载
指令 | 说明 |
---|---|
lsblk | 查看块状设备的信息(Name:名称,Size:设备大小,Type:类型,MountPoint:挂载点) |
umount 当前设备的挂载点(路径) | 解除挂载 |
mount 设备原始地址 要挂载的位置路径 | 挂载(所有块状内存设备原始地址都在/dev/下,新地址建议放在/mnt/下) |
8. 权限管理
- Linux系统一般将文件可存/取访问的身份分为3个类别:owner、group、others,且3种身份各有read、write、execute等权限。
8.1 身份介绍
- Owner身份(文件所有者,默认为文档的创建者)
- Group身份(与文件所有者同组的用户)
- Others身份(其他人,相对于所有者)
- Root用户(超级用户)
8.2 权限介绍
- 读权限:
- 对于文件夹来说,读权限影响用户是否能够列出目录结构
- 对于文件来说,读权限影响用户是否可以查看文件内容
- 写权限:
- 对文件夹来说,写权限影响用户是否可以在文件夹下“创建/删除/复制到/移动到”文档
- 对于文件来说,写权限影响用户是否可以编辑文件内容
- 执行权限:
- 一般都是对于文件来说,特别脚本文件。
- 权限查看:ls -l,ll
8.3 权限设置
- chmod [选项] 权限模式 文档/文件夹,其中选项-R:递归设置权限 (当文档类型为文件夹的时候)
- 如果想要给文档设置权限,操作者要么是root用户,要么就是文档的所有者。
- 当rwx权限全都有的时候,这个文件/文件夹会显示为蓝色(ugo都能执行的是绿色)
- 权限模式:字母形式,数字形式
选项 | 字母 | 介绍(字母模式) |
---|---|---|
谁 | u | 用户 |
g | 用户组 | |
o | 其他人 | |
a | 所有人(包括ugo),省略默认就是a | |
作用方式 | + | 增加权限(相对当前的) |
- | 减少权限(相对当前的) | |
= | 设置权限(直接设置成指令中) | |
权限 | r | 可读 |
w | 可写 | |
x | 可执行 |
chmod u+x,g+rx,o+rx test.txt
选项 | 介绍(数字模式) |
---|---|
0 | --- |
1 | --x |
2 | -w- |
3 | -wx |
4 | r-- |
5 | r-x |
6 | rw- |
7 | rwx |
chmod 777 test.txt(这个ugo中间不需要加逗号)
8.4 属主与属组
- 属主:所属的用户(文件的主人)
- 属组:所属的用户组
- 这两项信息在文档创建的时候会使用创建者的信息(用户名、用户所属的主组名称)。
- 如果有时候去删除某个用户,则该用户对应的文档的属主和属组信息就需要去修改。
指令 | 介绍 |
---|---|
chown [-R] username 文档路径 | 更改文档的的所属用户(-R在处理文件夹时递归设置) |
chgrp [-R] groupname 文档路径 | 更改文档的所属用户组 |
chown [-R] username:groupname 文档路径 | 更改文档的的所属用户和所属用户组 |
5.8 sudo
- reboot、shutdown、init、halt、user管理,在普通用户身份上都是操作不了,但是有些特殊的情况下又需要有执行权限。又不可能让root用户把自己的密码告诉普通用户。
- sudo可以让管理员(root)事先定义某些特殊命令谁可以执行
- /etc/sudoers,编辑需要用visudo sudoers。
- 配置格式: root ALL=(ALL) ALL
选项 | 说明 |
---|---|
root | 表示用户名,如果是用户组,则可以写成“%组名” |
ALL | 表示允许登录的主机(地址白名单) |
(ALL) | 表示以谁的身份执行,ALL表示root身份 |
ALL | 表示当前用户可以执行的命令,多个命令可以使用“,”分割 |
在写sudo规则的时候不建议写直接形式的命令,而是写命令的完整路径。可以用which来找指令的二进制文件地址:adminwwq ALL=(ALL) /usr/sbin/useradd, /usr/bin/passwd [A-Za-z]*, !/usr/bin/passwd "", !/usr/bin/passwd root
之后执行配置好的命令需要先加个sudo: sudo useradd admintest
普通用户查看自己具有的特殊权限:sudo -l
9. 网络基础
9.1网络分类
- 局域网(Local Area Network,LAN)是指范围在几百米到十几公里内办公楼群或校园内的计算机相互连接所构成的计算机网络。
- 城域网(Metropolitan Area Network,MAN)所采用的技术基本上与局域网相类似,只是规模上要大一些。城域网既可以覆盖相距不远的几栋办公楼,也可以覆盖一个城。
- 广域网(Wide Area Network,WAN)通常跨接很大的物理范围,如一个国家。
- 网络还可以按照所有者分为公网、私网这两种Internet的接入方式。
- 公网接入方式:上网的计算机得到的IP地址是Internet上的非保留地址,公网的计算机和Internet上的其他计算机可随意互相访问。私网则反之。
- IP是英文Internet Protocol的缩写,意思是“网络之间互连的协议”,也就是为计算机网络相互连接进行通信而设计的协议。
- IP地址类型分为:公有地址、私有地址
- 公有地址(Public address):由Inter NIC(Internet Network Information Center因特网信息中心)负责。这些IP地址分配给注册并向Inter NIC提出申请的组织机构。通过它直接访问因特网。
类别 | 最大网络数 | IP地址范围 | 最大主机数 | 私有IP地址范围 |
---|---|---|---|---|
A | 126(2^7-2) | 1.0.0.0-127.255.255.255 | 16777214 | 10.0.0.0-10.255.255.255 |
B | 16384(2^14) | 128.0.0.0-191.255.255.255 | 65534 | 172.16.0.0-172.31.255.255 |
C | 2097152(2^21) | 192.0.0.0-223.255.255.255 | 254 | 192.168.0.0-192.168.255.255 |
- 私有地址:私有地址(Private address)属于非注册地址,专门为组织机构内部使用。以下列出留用的内部私有地址:
- A类 10.0.0.0--10.255.255.255
- B类 172.16.0.0--172.31.255.255
- C类 192.168.0.0--192.168.255.255
9.2 网络设备
- 网卡是一个网络组件,属于硬件范畴,主要负责计算机之间数据的封装和解封。
- MAC地址:网卡的物理地址,网卡设备的编号,默认情况是全球唯一的(16进制)。
- MAC与IP对比
- 长度不同。IP地址为32位,MAC地址为48位。
- 分配依据不同。
- 网络寻址方式不同。OSI参考模型,ip地址是基于第三层工作(网络层),mac地址是第二层(数据链路层)
- 网线是连接局域网必不可少的。在局域网中常见的网线主要有双绞线(RJ45接口)、铜轴电缆、光缆三种。
- 交换机(Switch)意为“开关”,是一种用于电(光)信号转发的网络设备,交换机它可以为接入交换机的任意两个网络节点提供独享的电信号通路。
- 路由器(Router)又称网关设备(Gateway)是用于连接多个逻辑上分开、相对独立的网络。
9.3 拓扑结构图
- 结构类型:
- 星型拓扑结构
- 总线型拓扑结构
- 环型拓扑结构
- 树型拓扑结构
- 网络拓扑结构
- 混合型拓扑结构
- 蜂窝型结构
9.4 网络命令
- ARP:地址解析协议,即ARP(Address Resolution Protocol),是根据IP地址获取(MAC)物理地址的协议。
[!note] 当一个主机发送数据时,首先查看本机MAC地址缓存中有没有目标主机的MAC地址, 如果有就使用缓存中的结果;如果没有,ARP协议就会发出一个广播包,该广播包要求查询目标主机IP地址对应的MAC地址,拥有该IP地址的主机会发出回应,回应中包括了目标主机的MAC地址,这样发送方就得到了目标主机的MAC地址。如果目标主机不在本地子网中,则ARP解析到的MAC地址是默认网关的MAC地址。
指令 | 介绍 |
---|---|
ping 主机地址(IP地址/主机名/域名) | 测试当前主机与目标主机的连通性 |
netstat -tnlp | 查看网络的连接信息(-t:tcp协议,-n:字母转化成数字,-l:列出状态为监听,-p:显示进程相关信息) |
netstat -an | 查看网络的连接信息(-a:全部,-n:字母转化成数字) |
traceroute 主机地址 | 查找当前主机与目标主机之间所有的网关(路由器,会给沿途各个路由器发送icmp数据包,路由器可能会不给响应)。 |
arp -a | 查看本地缓存mac表 |
arp -d 地址 | 删除指定的缓存记录 |
tcpdump [协议] port 端口号 | 抓取本机的指定端口的数据包 |
tcpdump host 地址 | 抓取本机与指定主机的数据包 |
tcpdump -i 网卡设备名 | 抓取本机的指定网卡的数据包 |
9.5 项目上线
- 流程:
- 购买服务器
- 购买域名
- 域名备案
- 域名解析
- 配置生产环境
- 上传代码
- 域名解析:将域名绑定到一个服务器地址的操作
- DNS:domain name server,用于将域名转化成ip地址的服务器。
10. Shell编程
10.1 Shell基础
- Shell:是一个用 C 语言编写的程序,它是用户使用 Linux 的桥梁。Shell既是一种命令语言,又是一种程序设计语言。
- Shell 是指一种应用程序,这个应用程序提供了一个界面,用户通过这个界面访问操作系统内核的服务。
- 脚本:简单地说就是一条条的文字命令,这些文字命令是可以看到的(如可以用记事本打开查看、编辑)。(例如JavaScript(JS,前端),VBScript, ASP,JSP,PHP(后端),SQL(数据库操作语言),Perl,Shell,python,Ruby,JavaFX,Lua等。)
- Shell属于内置的脚本(程序开发的效率非常高,依赖于功能强大的命令可以迅速地完成开发任务(批处理))
- 在linux中有很多类型的shell,不同的shell具备不同的功能,shell还决定了脚本中函数的语法,Linux中默认的shell*/bin/bash(重点),流行的shell有ash、bash、ksh、csh、zsh等,不同的shell都有自己的特点以及用途。
- 大多数Linux系统默认使用的shell/就是bin/bash,它还是sh的升级版。
- 脚本本身是没有状态的,需要触发才能执行
10.2 编写规范
- 代码规范
#!/bin/bash [指定告知系统当前这个脚本要使用的shell解释器]
Shell相关指令
- 文件命名规范
文件名.sh [.sh是linux下bash shell 的默认后缀]
- 创建sh文件
touch test.sh
vim test.sh
- 编写sh文件
#!/bin/bash
echo 'helloworld'
#输出的内容如果包含字母和符号(不包含变量),则需要用引号包括起来。如果是纯数字可以包也可以不包。
- 执行shell脚本(脚本必须得有执行权限)
./test.sh
/bin/bash /oo/test.sh
/bin/bash test.sh
[!note] 这里在运行时一定要写成 ./test.sh,而不是 test.sh,运行其它二进制的程序也一样,直接写 test.sh,Linux 系统会去 PATH(环境变量) 里寻找有没有叫 test.sh 的,而只有 /bin, /sbin, /usr/bin,/usr/sbin 等在 PATH 里,你的当前目录通常不在 PATH 里,所以写成 test.sh 是会找不到命令的,要用 ./test.sh 告诉系统说,就在当前目录找。
10.3 shell语法
10.3.1 变量
#!/bin/bash
echo 'helloworld'
echo "helloworld"
echo '10'
echo "20"
echo 100
str="helloworld"
echo "$str `date +"%F %T"`"
- 变量名后面的等号左右不能有空格
- 双引号能够识别变量,双引号能够实现转义(类似于\t),单引号是不能识别变量,只会原样输出,单引号是不能转义的。
- 当在脚本中需要执行一些指令并且将执行的结果赋给变量的时候需要使用“反引号”
10.3.2 只读变量
- 语法:readonly 变量名
#!/bin/bash
a=10
readonly a
a=20
echo $a
10.3.3 接收输入
- 语法:read -p 提示信息 变量名
read -p '请输入文件名:' filepath
10.3.4 删除变量
- 语法:unset 变量名
#!/bin/bash
a=10
echo $a
unset a
echo $a
10.3.5 条件判断
- 语法中记得加空格
#!/bin/bash
a=10
b=20
read -p '请输入数字:' number
echo $number
echo
if [ $number == $a ]
then
echo $a
fi
if [ $number == $a ]; then echo "$a"; fi
if [ $number == $a ]
then
echo $a
elif [ $number == $b ]
then
echo $b
else
echo $number
fi
10.3.6 运算符
- 运算符和其他编程脚本语言一样,常见的有算数运算符、关系运算符、逻辑运算符、字符串运算符、文件测试运算符等
- 原生bash不支持简单的数学运算,但是可以通过其他命令来实现,例如 awk 和 expr,expr 最常用。expr 是一款表达式计算工具,使用它能完成表达式的求值操作。
- 表达式和运算符之间要有空格
expr 2+2
不对,应该是expr 2 + 2
,写在shell中要用反引号包起来。 - 关系运算符只支持数字,不支持字符串,除非字符串的值是数字。
- ==和-eq是一样的,但是大于小于只能用指令。
- 权限rwx的判断,如果只有一个部分符合,则认为是有权限的。
[!note] 除了赋值时等号两边不允许有空格,剩下情况符号周围都得空格。
运算符 | 说明 | 举例(a=10,b=20,c="abc",d="efg", file="/etc/oo",file="/etc/oo/test.txt") |
---|---|---|
算数运算符 | ||
+ | 加法 | expr $a + $b 结果为 30。 |
- | 减法 | expr $a - $b 结果为 -10。 |
* | 乘法 | expr $a \* $b 结果为 200。 |
/ | 除法 | expr $b / $a 结果为 2。 |
% | 取余 | expr $b % $a 结果为 0。 |
= | 赋值 | a=$b 将把变量 b 的值赋给 a。 |
== | 相等。用于比较两个数字,相同返回true | [ $a == $b ] 返回 false |
!= | 不相等。用于比较两个数字,不相同返回true | [ $a != $b ] 返回 true。 |
关系运算符 | ||
-eq | 检测是否相等 | [ $a -eq $b ] 返回 false。 |
-ne | 检测是否不相等 | [ $a -ne $b ] 返回 true。 |
-gt | 是否大于 | [ $a -gt $b ] 返回 false。 |
-lt | 是否小于 | [ $a -lt $b ] 返回 true。 |
-ge | 是否大于等于 | [ $a -ge $b ] 返回 false。 |
-le | 是否小于等于 | [ $a -le $b ] 返回 true。 |
逻辑运算符 | ||
! | 非运算 | [ ! false ] 返回 true。 |
-o | 或(或者)运算 | [ $a -lt 20 -o $b -gt 100 ] 返回 true。 |
-a | 与(并且)运算 | [ $a -lt 20 -a $b -gt 100 ] 返回 false。 |
字符串运算符 | ||
= | 检测两个字符串是否相等 | [ $c = $d ] 返回 false。 |
!= | 检测两个字符串是否不相等 | [ $c != $d ] 返回 true。 |
-z | 检测字符串长度是否为0 | [ -z $a ] 返回 false。 |
-n | 检测字符串长度是否不为0 | [ -n $a ] 返回 true。 |
str | 检测字符串 | [ $a ] 返回 true。 |
文件测试运算符 | ||
-r file | 检测文件是否可读 | [ -r $file ] 返回 true。 |
-w file | 检测文件是否可写 | [ -w $file ] 返回 true。 |
-x file | 检测文件是否可执行 | [ -x $file ] 返回 true。 |
-s file | 检测文件(文件大小是否大于0) | [ -s $file ] 返回 true。 |
-e file | 检测文件(包括目录)是否存在 | [ -e $file ] 返回 true。 |
-d file | 检测文件是否是目录 | [ -d $file ] 返回 false。 |
-f file | 检测文件是否是普通文件(既不是目录,也不是设备文件) | [ -f $file ] 返回 true。 |
-b file | 检测文件是否是块设备文件,如果是,则返回 true。 | [ -b $file ] 返回 false。 |
-c file | 检测文件是否是字符设备文件,如果是,则返回 true。 | [ -c $file ] 返回 false。 |
-g file | 检测文件是否设置了 SGID 位 | [ -g $file ] 返回 false。 |
-k file | 检测文件是否设置了粘着位(Sticky Bit) | [ -k $file ] 返回 false。 |
-u file | 检测文件是否设置了 SUID 位 | [ -u $file ] 返回 false。 |
-p file | 检测文件是否是有名管道 | [ -p $file ] 返回 false。 |
#!/bin/bash
a=10
b=20
echo "a=$a"
echo "b=$b"
echo "a + b = " `expr $a + $b`
echo "a - b = " `expr $a - $b`
echo "a * b = " `expr $a \* $b`
echo "a / b = " `expr $a / $b`
echo "a % b = " `expr $a % $b`
10.3.7 脚本附带选项
- 在脚本中可以用“$1”来表示第一个选项参数,“$2”来表示第二个选项,以此类推。其实$1、$2本质是变量,但是只能用,用户创建这样的用户名是不合法的。
- $0是执行的脚本自身的路径。
#!/bin/bash
echo $0
echo $1
echo $2
echo $3
./test2.sh a b c
11. 数据库
11.1 数据库基础
- 如果一个项目是动态(内容会变化的,网页后缀.jsp、.php、.shtml等)内容的话,则数据库是必不可少的一个环节。
- MySQL是一个关系型数据库管理系统,开源、跨平台、所占内存较小。
11.2 软件安装
11.2.1 安装方式
安装方式 | 优点 | 缺点 |
---|---|---|
源码包安装(tar) | 1. 开源,如果有足够的能力,可以修改源代码;2. 编译安装,更加适合自己的系统,稳定高效 | 1. 安装步骤较多,容易出错;2. 编译过程时间较长 |
二进制包安装(rpm) | 包管理系统简单,只需要几个命令就可以实现包的安装,升级,查询和卸载 | 经过编译,不再可以看到源代码 |
向导式安装(yum) | 1. 安装简单,快捷 | 1. 完全丧失了自定义性;2. 如果不更改软件来源的情况下,是需要联网才能使用yum的。 |
11.2.2 源码包安装
源码包安装:解包(解压缩)->配置(config/configure/bootstrap)->编译(make/bootstrapd)->安装(make install/bootstrapd install)
配置操作主要是指定软件的安装目录、需要的依赖在什么地方、指定不需要可选依赖、配置文件的路径、通用数据存储位置等等。
编译主要是用gcc编译c文件为机器文件
安装主要是根据先前的配置要求安装软件,并生成相应的指令bin目录,用户手册等
功能 | 指令 | 说明 |
---|---|---|
解包 | tar -zxvf *.tar.gz | -z或--gzip或--ungzip:通过gzip指令处理文件;-x或--extract或--get:从文件中还原文件;-v:显示操作过程;-f或--file:指定一个文件; |
解包 | tar -jxvf *.tar.bz2 | -j:支持bzip2解压文件;;-x或--extract或--get:从文件中还原文件;-v:显示操作过程;-f或--file:指定一个文件; |
配置 | ./configure --prefix=/usr/local/ncurses | 指定了安装路径。指定安装的路径:--prefix=路径;需要依赖的路径:--with-PACKAGE名=[包所在的路径];不需要依赖:--without-PACHAGE名 |
编译 | make | 前提是得在这个路径下 |
安装 | make install | 前提是得在这个路径下 |
编译且安装 | make && make install | 前提是得在这个路径下 |
11.2.3 二进制包安装
- 即rpm形式,6.8 RPM管理
指令 | 说明 |
---|---|
rpm -qa|grep 关键词 | 查询 |
rpm -e 软件的名称 | 删除 |
rpm -e 软件的名称 --nodeps | 强制删除,即忽略其依赖关系 |
rpm -ivh 软件包名称 | 软件安装 |
rpm -Uvh 软件包名称 | 软件更新 |
rpm -qf 文件路径 | 查询指定文件属于哪个包 |
- lynx:没有GUI的浏览器
11.2.4 yum等安装
- 一般情况下会默认安装在/usr/lib/.
指令 | 说明 |
---|---|
yum list [installed] | 列出当前已经装的和可以装的软件(全部) |
yum search 包名 | 搜索指定的关键词的包 |
yum [-y] install 包名 | 安装指定的包(-y表示允许不再确认) |
yum [-y] update[包名] | 更新指定的包,不指定包则更新全部软件 |
yum [-y] remove 包名 | 卸载指定的包 |
11.3 MySQL安装
- mysql默认端口号是3306
- 数据库存储目录:/var/lib/mysql
- 配置文件:/etc/my.cnf
步骤 | 指令 | 说明 |
---|---|---|
安装服务端 | yum install mysql-server | 注意是服务端。不是客户端 |
启动mysql | systemctl start mysqld | |
初始化 | mysql_secure_installation | 设置密码,是否允许远程登录等 |
启动/关闭/重启 | systemctl start/stop/restart mysqld | |
进入mysql | mysql -u 用户名 -p [密码] | 建议这里不要输入密码,是明文显示 |
退出mysql | exit |
11.4 MySQL操作
- 文件层级:数据库,数据表,记录(行),字段(列)。
- MySQL指令不区分大小写
- 显示指定连接字符集,避免中文乱码,每次连接MySQL后都需要设置。Mysql> set names utf-8
- 三码一致:服务器数据库的字符集+传输过程中字符集(set names)+客户端终端字符集
//库操作
SHOW DATABASES;//显示当前MySQL中全部的数据库
CREATE DATABASE 库名;//创建数据库
DROP DATABASE 库名;//删除数据库
USE 库名;//切换数据库
//表操作
CREATE TABLES 表名称 (
列名称1 数据类型 [NOT NULL AUTO_INCREMENT],
列名称2 数据类型,
列名称3 数据类型,
...,
PRIMARY KEY(主键字段名)
);
Create table oo(
Id int(11) not null auto_increment,
Username varchar(20),
Password char(32),
Primary key(Id)
);
//常见的数据类型:int(整型)、char(定长字符)、varchar(不定长字符)。
//主键一般就是序号所在的那一列,主键不能重复。
SHOW TABLES;
DESC 表名;//查看表的结构
DROP TABLE [IF EXISTS] 表名;//删除数据表
//记录操作
INSERT INTO 表名称 VALUES (值1, 值2,....);
INSERT INTO 表名称 (列1,列2,...) VALUES (值1,值2,....);
UPDATE 表名称 SET 列名称1 = 新值1,列名称2 = 新值2,… WHERE 列名称 = 某值;
SELECT 列名称1,列名称2,… FROM 表名称 WHERE 条件;
SELECT \* FROM 表名称 WHERE 条件;
DELETE FROM 表名称 WHERE 列名称 = 值;
- 以下关于MySQL整体的操作是在bash环境下执行,需要退出MySQL
//备份(导出)
//导出其实只有表操作,没有库级的操作
mysqldump -uroot -p123456 -A > 备份文件路径//全量备份(数据+结构)
mysqldump -uroot -p123456 库名 > 备份文件路径//指定库备份(数据+结构)
mysqldump -uroot -p123456 --databases db1 db2 > 备份文件路径//指定多个库备份(数据+结构)
//还原(导入)
//mysql命令行source还原方法
//系统命令行还原方法
mysql> source 备份文件路径//mysql还原全部数据库:
mysql -uroot -p123456 < 备份文件路径//linux还原全部数据库
//(需指定数据库名,因为单个库的备份是没有库名字的,即需要先搭好新库,在新库里source)
use 库名
source 备份文件路径//mysql还原指定单个数据库,mysql还原指定数据库的表
mysql -uroot -p123456 库名 < 备份文件路径//linux还原指定单个数据库,linux还原指定数据库的表
//(一个备份文件里有多个数据库的备份,此时不需要指定数据库)
source 备份文件路径//mysql还原指定多个数据库
mysql -uroot -p123456 < 备份文件路径//linux还原指定多个数据库
- 脚本执行定期备份demo
#!/bin/bash
## 在计划任务中执行该Shell脚本
filename="test_"`date +'%Y%m%d%H%M%S'`".sql"
mysqldump -uroot -p123456 test > /root/$filename
11.5 MySQL远程连接
B/S:B是指浏览器,S是指服务器。例如:百度搜索应用就属于BS架构软件。
C/S:C是指客户端,S是指服务器。例如:QQ、电脑端微信等应用程序都是CS架构。
BS中mysql典型的管理工具:PMA(phpMyAdmin)
CS中mysql典型的软件:navicat、mysql workbrach
修改可以远程连接的主机与用户字段,其位于mysql数据库的user表中的host,user字段。
host字段为“%”表示任意主机ip。
修改后需要刷新权限表(mysql> flush privileges)或者重启mysql。
12. 项目上线
Nginx:是一款比较流行的web服务器软件,类似于Apache。
使用在服务器端下载的方式进行下载(直接发请求):wget 地址
nginx默认也占用80端口,所以需要先把httpd停掉
启动命令:/usr/local/nginx/sbin/nginx
重载,重载配置文件后启动:/usr/local/nginx/sbin/nginx -s reload
关闭:只能kill进程
卸载编译安装的软件:rm -rf 软件的安装目录
注意:卸载一个编译安装的软件的时候必须先停止。
LAMP:Linux+Apache+MySQL+PHP
LNMP:Linux+Nginx+MySQL+PHP-fpm
LNMP:Linux+Nginx+MySQL+PHP+Apache
默认的Apache站点目录:/var/www/html,网页要展示的内容文件放在该目录下