目录
一、Linux体验
初体验命令:
hostname -i | 查看当前用户ip地址 |
free -h | 查看占用内存 |
reboot | 重启 |
init 3 | 切换字符界面 |
init 5 | 切换图形界面 |
who am i | 查看当前用户信息 |
shutdown -h now | 立即关机 |
shutdown -h 1 | 1分钟之后关机 |
sync | 把内存中的数据同步到磁盘;建议关机重启前使用sync |
二、Linux入门
2.1 什么是Linux
Linux 是一种自由的开放源代码的类 Unix 操作系统
常说的Linux是Linux内核, 而Unbuntu, CentOS等都是基于Linux的发行版
2.2 Linux基础安全介绍
2.2.1 什么是SSH
SSH 全称 Secure Shell,是一种加密的网络传输协议;
可以创建安全的隧道用于客户端与服务器连接;
可以使用非对称加密进行验证从而提升整个连接的安全性;
2.3 Linux文件系统
2.3.1 目录结构
目录 | 描述 |
/ | 根目录 |
/bin | 可执行文件,比如 ls 命令 |
/boot | 引导程序文件,内核,以及 initrd 等文件, linux启动信息 |
/dev | 设置文件,比如磁盘设备 |
/etc | 系统范围的配置文件 |
/home | 用户 home 目录,个人用户的配置 |
/media | 可移除的媒体,cd-rom 等的挂载点 |
/lib 和 /lib64 | /bin 和 /sbin 中用到的库文件存放位置 |
/mnt | 临时挂载点 |
/opt | 可选的用户应用包,一般用于存放一些直接提供二进制程序的非开源包 |
/proc | 虚拟问价系统 |
/root | root 用户的 home 目录 |
/run | 存放一些 pid 和 socket 文件 |
/sbin | 系统的可执行文件,init ,mount 等 |
/sys | 非FHS保准,但是大部分发行版都有,虚拟文件系统,用来对内核和设备驱动做设置 |
/usr | Unix Software Resource 绝大多数的程序和应用工具安装在这里,结果和/非常相似;可以理解为压缩包在/opt, 软件安装在/usr/local |
/usr/bin | 可执行的而进制文件 |
/usr/lib | 相应的库文件 |
/usr/share | 和计算机架构无关的一些共享文件 |
/usr/src | 源代码存放路径,如Linux 内核源码 |
/var | 在程序运行中内容不断变化的文件,比如日志 |
/tmp | 临时文件系统,重启后内容丢失 |
2.3.2 操作文件的常用命令
命令 | 作用 |
ls | list列出目录内容 |
cat | 输出文件内容到标准输出 |
less | 查看文件内容 |
more | 查看文件内容 |
head | 查看文件头部, 默认查看前10行 |
head -n 5 文件名 | 查看文件头部指定行数的内容 |
tail | 查看文件尾部 |
tail -f 文件名 | 监听文件内容是否修改,添加的内容会输出到控制台 |
nano | 编辑文件的工具 |
grep | 查找文本中指定关键词的行 |
三、Linux基础
3.1 用户类型
Linux中分为普通用户和超级用户 root, 但是划分并不依据root的名称;而是每个用户都会有一个UID, 如果UID = 0就是超级用户
tty # 可以查看当前终端名称
who # 查看链接本服务器的所用用户
w # 可以查看链接用户正在执行什么操作
useradd 用户名 | 添加一个用户,默认用户目录在/home/用户名 |
passwd 用户名 | 修改用户名的密码 |
pwd | 显示当前用户所在的目录的绝对路径 |
userdel 用户名 | 删除用户,但是保留用户的home目录 |
userdel -r 用户名 | 删除用户,并且连带用户的home目录 |
id 用户名 | 查询用户id |
groupadd 组名 | 创建一个用户组 |
groupdel 组名 | 删除一个用户组 |
useradd -g 组名 用户名 | 添加一个用户名并分配组 |
usermod -g 组名 用户名 | 将用户切换一个组 |
3.2 什么是Shell
交互式接口,是Linux中的用户界面,而shell能接受用户的命令并送入内核执行,解析命令。
常见的shell: sh, bash, csh 等
echo $SHELL # 查看当前使用的shell
cat /etc/shells # 查看支持的所有shell
3.3 设置主机名
hostname NAME # 更改主机名,临时
hostnamectl set-hostname NAME # 永久生效,支持CentOS7以上,Unbutu
unbuntu中 .bashrc中可以修改命令提示符信息
enable # 可以查看所有内部命令
type VALUE # 判断VALUE是什么命令
内部命令都执行在 /bin/bash中,系统启动自动加入内存
命令执行过程:
内部命令 -》 外部命令 -》 hash, 查找缓存 -》 $PATH -》 command not found
3.4 命令别名
alias ALIAS_NAME='NEW_NAME' # 更改别名
alias # 查看别名
\alias_name # 用于别名原始命令,但是需要临时使用原始命令
3.5 命令格式
可以主动在命令后面使用 \ 表示提前换行
3.6 会话管理
screen / tmux
3.6.1 echo
打印信息;后面可以跟字符串或变量
-e 操作使后面转义操作生效
3.6 常用命令
lscpu # 查看cpu资源情况
lsblk # 查看硬盘信息
arch # 系统架构 x86_64 / x86_32
cat /etc/os-release # 查看操作系统版本
date # 显示和设置系统时间
clock # 显示硬件时钟
clock -s # 以硬件时间修正系统时间
clock -w # 以系统时间修正硬件时间
3.7 帮助命令
whatis cmd # 查看cmd的使用
help cmd # 查看内部命令
cmd --help # 外部命令
3.8 文件管理
Linux中文件后缀并不严格,只关注内部内容;但是可以使用 file 命令查看具体的文件类型
四、实用指令
mkdir 目录名 | 创建一个目录 |
mkdir -p 目录名1/目录名2 | 创建多级目录 |
rmdir 目录名 | 删除目录 |
rmdir -rf | 递归强制删除 |
touch 文件名 | 创建一个空文件 |
cp source dest | 拷贝文件到指定位置 |
/cp | 拷贝并直接覆盖 |
mv | 移动文件与目录或重命名 |
cat | 查看文件内容 |
cat | more | 其中 | 表示管道命令,可以将前一个的结果交给后面处理 |
> | 重定向,改变文件输出的位置,写入的内容覆盖原来的内容 |
>> | 文件内容追加 |
ln -s | 软链接/符号链接,类似wins中的快捷方式 |
history | 查看所有历史命令 |
find | 从指定目录递归遍历子目录,寻找满足条件的目录 +n 表示大于; -n表示小于; 文件单位:k, M, G |
locate | 快速定位文件路径;locate会从自己的locate数据库进行查询;因此使用这个命令之前需要执行:updatedb 创建locate数据库 |
which | 查看指令在哪个目录 |
grep | 过滤查找,配合管道符 | , 将前一个命令的指令传递给后面的命令 |
gzip/gunzip | 压缩和解压文件;压缩后的后缀为:*.gz |
zip/unzip | 用于项目打包进行压缩 |
tar | 通过选项确定打包还是压缩; 打包:-zcvf 解压:-zxvf |
五、组
Linux中,所有用户必须属于一个组;默认创建为与同户名同名的组
所有者:一般为文件的创建者
ls -ahl | 查看文件的组信息 |
chown 用户名 文件名 | 修改文件所有者 |
chgrp 组名 文件名 | 修改所在组 |
chgrp -R 组名 文件名 | 递归修改所在组 |
当用户创建一个文件后,这个文件的所在组就是该文件的所在组
5.2 rwx权限
[r] : 可读 [w] : 可写 [x] : 可执行
可用数字表示:r = 4 w = 2 x = 1
5.3 修改权限方式
-
第一种:
- 第二种:通过数字变更权限
六、crond定时调度
crond 任务调度,在系统某个时间执行特定的命令或程序;
crontab | 进行定时任务的设置 |
crontab -e | 编辑任务调度 |
crontab -r | 终止任务调度 |
crontab -l | 列出有任务的调度 |
service crond restart | 重启任务调度 |
6.2 at定时任务
at命令是一次性定时计划任务;在达到预设时间(60s)时候完成一次后不再继续执行
七、Linux分区
Linux将每一个文件目录与一块磁盘分区进行对应,这个操作称为挂载
lsblk -f | 查看磁盘分区信息 |
fdisk /dev/磁盘名 | 设置分区 |
mkfs -t ext4 /dev/分区名 | 分区格式化 |
mount | 将分区挂载到文件系统 |
umount | 卸载分区和文件系统的关联 |
df -h | 查看分区整体情况 |
du -h 目录名 | 查询指定目录下磁盘占用情况;不指定默认当前路径 |
可以通过修改/etc/fstab文件,添加UUID,完成永久挂载
7.1 添加磁盘分区
1. 添加磁盘
选择SCSI类型,然后点击下一步,磁盘大小可以自定义
添加成功后,重启Linux
输入命令:lsblk,查看磁盘状态
输入命令:fdisk /dev/sdb ,添加分区,然后输入n
选择主分区,并添加一个分区
然后一直回车,最后输入一个 w,表示写入磁盘并退出
分区分配后,进行格式化
mkfs -t ext4 /dev/sdb1 进行格式化:
挂载文件系统
八、网络配置
8.1 Nat网络模型
8.2 配置固定IP
虚拟机配置,选择Nat网络
打开虚拟网络编辑器
记录这里的数值(也可以修改)
打开LInux编辑:vi /etc/sysconfig/network-scripts/ifcfg-ens32
重启服务:service network restart 或者 reboot
九、Linux进程管理
9.1 进程管理基本指令
进程:简单理解为一段运行中的程序
ps | 查看所有进程 |
ps -ef | 以全格式显示所有进程信息 |
kill PID | 终止进程; 选项-9可以强制终止进程 |
killall 进程名称 | 通过进程名称终止进程 |
pstree | 以树的形式显示所有进程之间的关系 [选项] -p(PID), -u(用户) |
9.2 服务
服务是能为系统或者用户提供某种特殊的服务的程序,只不过一般这种程序是常驻后台,不是直接运行的,这种程序一般叫做守护进程daemon
常见服务
- SSH 用于能随时连接到服务器,提供这个服务的程序是 sshd
- cron 提供定时任务的服务,提供这个服务的程序是 crond
chkconfig | 给某个服务的运行级别设置自动启动或关闭;在/etc/init.d中查看 |
chkconfig --list | 查看服务 |
chkconfig --level 5 服务名 on/off | 设置服务运行级别启动或关闭 |
systemd是一种init程序,用于初始化系统,systemctl是相关联的功能用于提供了对服务的管理方式。
systemctl [start/enable/disable/stop..] 服务名 | 服务管理指令,一般使用这个;指令在/usr/lib/systemd/system中查看 |
systemctl status 服务名 | 查看某个服务的状态 |
systemctl start 服务名 | 启动某个服务 |
systemctl stop 服务名 | 停止某个服务 |
systemctl enable 服务名 | 设置某个服务开机启动 |
systemctl disable 服务名 | 禁用某个服务开机启动 |
systemctl restart 服务名 | 重启某个服务 |
防火墙:
firewall-cmd --permanent --add-port=端口号/协议 | 打开端口 |
firewall-cmd --permanent --remove-port=端口号/协议 | 关闭端口 |
firewall-cmd --reload | 重新载入才能生效 |
firewalld-cmd --permanent --query-port=端口/协议 | 查询端口是否成功打开 |
netstat -anp | 查看网络状态; -an 按一定顺序输出,-p 显示哪个进程在调用 |
netstat 用于查看网络状态,在网络变慢或者发现不知名连接需要特别关注
9.3 动态监控命令
top -i | 与ps类似,可以监控进程的状态 |
十、RPM和YUM
10.1 RPM
rpm是互联网下载包的打包和下载工具;应用于redhat, centos等
rpm -qa | grep xxx | 查询是否安装了某个rpm包 |
rpm -qa | 查询所有rpm包 |
rpm -qi xxx | 查询rpm的信息 |
rpm -ql xxx | 查询rpm包的文件信息,包括安装路径 |
rpm -e xxx | 删除某个rpm包 |
rpm -ivh xxx(全路径) | 安装rpm包; -i 安装 -v 提示信息 -h 进度条 |
10.2 YUM
基于RPM, 从指定服务器自动下载rpm安装包并且安装
yum list | grep xxx | 查询是否有xxx的rpm包 |
yum install xxx | 安装 |
十一、Shell编程
11.1 为什么学习shell
shell是一个命令解释器。通过shell解释器将程序发送的请求解析由Linux内核执行
而shell编程可以理解将多条指令组合成脚本,完成较为复杂的操作
11.2 shell入门
要求:
1. 脚本以 #!/bin/bash 开头,指明使用哪种解释器
2. 脚本必须具有可执行权限
- 编写第一个脚本
vim ch01_hello_shell.sh
- 分配可执行权限
- 执行脚本
11.3 Shell中的变量
1. 定义变量: 变量名=值 注意:中间不能有空格
2.撤销变量: unset变量
3. 声明静态变量: readonly 变量,不能unset
4. Shell中的变量一般为大写,一种规范
5.将命令返回值赋值给变量:使用 '指令',或者 $(指令)
#!/bin/bash
#Shell变量定义 变量=值; 中间不能有空格
#变量一般大写,一种规范
VAR1=10
echo $VAR1
#撤销变量 unset
unset VAR1
echo "VAR1的值:$VAR1"
#声明静态变量,关键字 readonly, 静态变量不能使用unset
readonly VAR2=11
echo "静态变量VAR2=$VAR2"
unset VAR2
echo "unset后的静态变量VAR2=$VAR2"
对静态变量使用Unset发生报错:
- 设置环境变量:export 变量名=值,使用 source 配置文件,使修改后的环境变量立即生效
- bash中的多行注释为 :<<! 内容 !
# 多行注释语法 :<<! 内容 !
:<<!
unset VAR2
echo "unset后的静态变量VAR2=$VAR2"
!
- 位置参数变量,通过shell脚本获取终端中输入的参数
- $n, n为数字,$0表示命令本身,依次的:$1, $2 ...表示若干位置参数;10以上的参数使用${n}表示
- $* 表示命令行中的所有参数,所以参数作为一个整体
- $@ 表示所有参数,但是区分
- $# 表示参数的个数
#!/bin/bash
# 获取命令行中的参数信息 $n
echo "命令行参数分别为:$0, $1, $2"
echo "获取所有的参数:$*"
echo "参数个数为:$#"
11.4 运算符
1. 使用 $((表达式)) 或者 $[表达式] , expr m + n 这里的m + n之间要有空格,不然被当做字符串
2. expr中使用的表达式,乘法要用 \*
#!/bin/bash
VAR1=10
VAR2=30
# 使用$((表达式))
RES1=$(($VAR1 + $VAR2))
echo "RES1=$RES1"
# 使用$[表达式]
RES2=$[$VAR1+$VAR2]
echo "RES2=$RES2"
RES3=`expr $RES1 + $RES2`
echo "RES3=$RES3"
RES4=`expr $RES3 \* $RES2`
echo "RES3*RES2=$RES4"
注意:使用expr的时候,如果将结果赋值给变量,需要使用 `expr 表达式`, 并且由于是赋值变量,所以需要满足:变量名=值,中间不能有空格
11. 5 条件判断
开始不适应了。。。
#!/bin/bash
# 1."ok"是否等于"ok"
if [ "ok" = "ok" ]
then
echo "hello true"
else
echo "hello false"
fi
# 2. 23 是否大于等于22
if [ 23 -ge 22 ]
then
echo "大于等于 true"
fi
- 一些判断条件的选项
- 多分支判断
# 3.多分支条件判断
if [ $1 -ge 60 ]
then
echo "及格"
elif [ $1 -lt 60 ]
then
echo "不及格"
fi
- case语句
#!/bin/bash
case $1 in
"1")
echo "周一"
;;
"2")
echo "周二"
;;
*)
echo "other.."
;;
esac
11.6 循环判断
#!/bin/bash
# 计算从1 到 100的和
SUM=0
for ((i = 1; i <= 100; i++))
do
SUM=$[$SUM + $i]
done
echo $SUM
while的语法: while [ condition ]
- 读取控制台的输入:
- 自定义函数语法:
#!/bin/bash
# 自定义函数:计算两数之和
function getSum() {
SUM=$[$n1 + $n2]
echo "SUM的值为:$SUM"
}
# 从控制台输入值
read -p "请输入第一个值n1=" n1
read -p "请输入第二个值n2=" n2
getSum $n1 $n2
十二、日志管理
12.1 常用系统日志
可以查看 secure日志,记录用户的登录状态,是否登录成功
Linux中通过rsyslogd服务监控日志的状态,通过配置文件/etc/rsyslogd.conf管理写入到那个日志中;
rsyslogd服务记录的日志信息主要包括:
1. 事件产生的时间
2. 产生事件的主机名
3. 产生事件的服务名或程序名
4.事件的具体信息