Linux(林纳斯)
一、简介
1. 主要的应用领域
服务器
Linux生来就是被设计作为服务器的,众多服务程序均部署在Linux上。
嵌入式系统
Linux完全开源,可对内核进行裁剪,最小可打到几百kb,常应用于嵌入式系统,如机顶盒、白家电等。安卓的内核也是Linux。
2. 学习阶段
- ① 基本的操作命令:文件命令、编辑工具、linux用户管理
- ② 各种配置:环境变量、网络配置、服务配置
- ③ 搭建开发环境:如Java、python等的运行环境
- ④ shell脚本: 能对Linux进行维护,编写脚本文件。
- ⑤ 安全设置: 防止攻击、系统调优。
- ⑥ Linux内核: 熟练掌握大型网站应用架构的组成,熟练各个环节的部署和维护方法。
二、 Linux基础
1. 介绍
① 特点
- 免费、开源
- 安全、高效、稳定(基本半年不用重启)
- 处理高并发强悍(高并发场景)
- 企业级项目的部署
② 吉祥物
吉祥物:Tux(企鹅)
③ 发行版本
Linux只是一个内核,在内核的基础上添加应用软件得到发行版本。国内常用Ubuntu 和 CentOS (CentOS属于redhat的免费版)
④ Unix
Linux由Unix演化而来。
Ken tompson
- 用B语言开发了Unix
Dennis richres
- 与Ken tompson 设计C语言,重写Unix
Linus
- 顺应GUN计划,在Unix基础上开发出Linux
三、目录结构
在linux中,一切皆文件
Linux会把所有的东西映射成一个文件来处理,如外接硬盘、cpu、应用程序、内存等。
四、vi vim常用命令
参考:菜鸟教程vi vim
- yy 复制当前行
- p 粘贴
- (n)yy 复制n行
- G 回到文件末尾
- gg 回到文件开头
- :set nu 设置行号
- :set noun 取消行号
- n shift+g 去第n行
五、开关机、重启与注销
- sync 同步内存数据到磁盘(关机前执行)
- shutdwn
- shutdown -h now 立即关机
- shutdown -h 1 一分钟后关机
- shutdown -r now 立即重启
- halt 关机
reboot 重启系统
logout 关闭当前用户的连接
六、用户管理
linux是一个多用户多任务的操作系统,想使用系统资源的用户需向管理员root申请一个账号,用来登录系统
1. 基本概念
- 用户:linux系统的用户,可以有多个,root为管理员用户
- 用户组:每个用户可以被分配到一个或多个用户组(创建时指定或后期更换)
- 家目录:/home 每创建一个用户都会在home目录下分配一个子目录作为该用户的家目录,登陆后会进入该目录。
2. 常用命令
pwd 查看当前所在的目录
useradd [选项] 用户名 添加一个用户
未指定用户组时会自动创建一个与用户同名的组,并将该用户添加到该用户组中。
user add -g 用户组名 用户名
添加到passwd 用户名 为用户指定密码
userdel 用户名 删除用户(root用户来操作,用户家目录会保留)
userde -rl 用户名 删除用户(家目录也会被删掉,不推荐)
id 用户名 查询用户信息(id和所在组)
uid->用户id gid->用户组id groups->用户组
su - 用户名 切换用户
exit 切换到上一个用户
3. 用户组
用户组用于对相同类别的用户进行统一管理,这些用户具有一些共性(如可以访问的文件的权限相同)。
① 用户组命令
- groupadd 用户组名 添加用户组
- groupdel 用户组名 删除组
- usermod -g 用户组 用户名 将用户修改到别的用户组
- groups 查看当前登录用户组内的所有成员
- cat /etc/group 查看系统的用户组
- group 组名 查看该组内的所有成员
② 相关文件
/etc/passwd
保存用户信息的配置文件
详细内容:用户名:用户口令(加密):用户id:组id::家目录:shell解释器
/etc/group
保存用户组信息的配置文件
详细内容:组名:组口令(加密):组id
/etc/shadow
口令的配置文件,包含用户的密码和登录信息。
详细内容:用户名和密码等加密内容。
七. 运行级别
系统运行级别德指定,包含七个运行级别,配置文件在/etc/inittab的id:5:initdefault这一行的数字,常用的运行级别是3和5。
运行级别的指定命令:init [0123456]
- 0:关机
- 1:单用户【找回丢失密码】
- 2:多用户状态没有网络服务
- 3:多用户状态有网络服务(命令行界面)
- 4:系统未使用,保留给用户
- 5:图形界面
- 6: 系统重启
八、root密码找回 (实体机)
进入到单用户模式,这时会以root身份登录系统,这时就可以更改root密码。
- 开机引导时按:回车键 进入到引导开机前的界面
- 输入e在booting之前编辑命令
- 选择kernel 再按e
- 输入空格1, 回车,告诉内核进入到单用户模式
- 再输入b,启动boot
- passwd root 更改用户密码
九、 实用命令
0. 必知指令
- ln 软连接(link)
- ln -s 源文件路径/名 软连接名 创建一个软连接,指向某个源文件或路径(之后便可直接对该软连接操作,如cd more等)
- rm -rf 软连接名 直接删除该软连接(是一个目录时)
- history 查看历史执行过的指令
- history n 显示最近执行过的n个指令
- !n 执行history中的第n条指令
1. 帮助指令
- man [命令或配置文件] 获取功能描述或帮助信息
- help 命令 获得shell内置命令的帮助信息
2. 文件目录类
pwd 显示当前工作目录的绝对路径
ls 【选项】 【目录或者文件】 显示当前目录的信息
- -a 所有文件
- -l 以列表的方式显示信息
cd 【参数】 切换到指定目录
- cd ~ 切换到自己的家目录
mkdir 创建一个目录
make -p /xxx/yyy 创建多级目录
rm [选项] 目录 删除指定文件或目录
- -r 递归删除整个文件夹
- -f 强制删除不提示(不提示是否删除?)
rm -rf 目录 删除非空的目录
touch 文件名 创建一个空文件(可以多个 空格分开)
cp 【-r】source dest 将某个文件(文件夹下的所有内容)拷贝到dest路径
-r:表示遍历
\cp :表示复制时强制覆盖同名文件。
mv 旧文件名 新文件名 重命名文件
mv 源文件名(或目录) 新目录 将文件移动到新的目录(剪切)
cat 文件名 以只读的方式查看文件内容
- -n 查看内容的同时显示行号
- cat 文件名 | more 分页查看文件内容
more 文件名 以全屏方式显示文件内容(适合查看小文件)
- 空格:向下翻页
- 回车:向下翻一行
- Ctrl+F:向下滚动一屏
- Ctrl+B:向上滚动一屏
- =:显示行号
- :f :输出文件名和当前行号
- q:立即离开
less 文件名 部分加载的方式,分屏查看文件(适合查看大文件)
- 空格:向下翻页
- pagedown:向下翻页
- pageup:向上翻页
- /字符串:向下查找字符串
- ?字符串:向上搜索字符串
- q:退出
echo: 输出内容到控制台
- echo $PATH 输出当前的环境变量
head 用于显示文件的前n行(默认10行)
- head -n 20 文件名 显示该文件的前20行
tail 用于查看文件的后10行
- tail -n 20 文件名 查看文件的后20行内容
- tail -f 文件名 实时监控文件的内容变化(重要:常用日志查看)
>: 输出重定向
- ls -l > 文件名 列表内容写到文件中(覆盖写)
- cat 文件1 > 文件2 将文件1(可带路径)的内容写到文件2(可带路径)
- echo “内容” > 文件名 将内容写到文件中
>> : 追加
- ls -l >> 文件名 列表的内容追加到文件的末尾
- echo “内容” >> 文件名 将内容追加到文件中
3. 时间日期类
date 显示当前的时间日期(有格式的时候,加号必须有)
- date “+%Y-%m-%d” 显示年月日 用 - 连接 结果:2020-11-07
- date “+%Y年%m月%d日 %H:%M:%S” 结果:2020年11月07日 12:20:23
date -s “2020-11-07 12:20:20” 设置系统时间
- cal 以日历的方式显示当前时间
- cal 2020 显示2020年的日历
4. 搜索查找类
① find
- find 某目录 -name 文件名 按名称查询某个目录下是否有该文件
- find / -name *.txt 查询根目录下所有的txt文件
- find 某目录 -size +20M 查询某个目录下大于20M的文件(查找包、日志等大文件使用很方便)
- -20k 查询小于多少k的文件
② locate
运行前要执行updatedb
创建locate数据库
- locate 文件名 查询该文件所在目录
⑤ grep
- “|” 管道符号,表示将前一个命令的处理结果交给后面的命令处理。
- grep 【选项】 查找内容或源文件
- -n 显示匹配行和行号
- -i 忽略字母的大小写
- eg:cat test.txt | grep -ni aaa 不区分大小写查询test.txt中的aaa,并显示行号
- eg:ls -l /home |grep “^-“ | wc -l 统计/home目录下的文件的个数
5. 压缩与解压
① zip/unzip
- zip -r 压缩文件名 压缩目录 对目录内的文件递归压缩
- zip -r package.zip /root/ 将root目录下的所有文件打包为package.zip
- unzip -d /home/ package.zip 将文件解压到指定文件夹
② tar
- tar 【选项】 xxx.tar.gz 打包内容
- -c 产生.tar打包文件
- -v 显示详细信息
- -f 指定压缩后文件名
- -z 打包的同时压缩文件
- -x 解包.tar文件
- tar -cxvf xxx.tar.gz 要打包的文件(一个或多个) 将文件打包为xxx.tar.gz
- tar -zxvf xxx.tar.gz -C 目标目录 将xxx.tar.gz 解压到指定目录(目录事先存在)
6. 组管理
linux中每个文件都有 所有者、所在组、其他组的概念。
① 所有者
- ls -ahl 查看文件的所有者和所在组
- a 隐藏的文件
- l 列表详细显示(第三列:文件所有者;第四列:文件所在组)
- h 文件大小便于查看方式(G、K、M)
- chown 用户名 文件或文件夹 改变文件的所有者(所在组不会变)
- chown 【选项】 新的所有者:新的所在组 文件名 同时改变文件的所有者和所在组
- -R 递归更改某个目录下的所有文件的权限(该目录的子目录也会被更改)
② 所在组
- chgrp 组名 文件名 将文件所在组改为其他组
- usermod -g 组名 用户名 改变用户所在组
③ 其他组
除所在组的组为该文件的其他组。
7. 权限管理
① 文件详情解析
-rw-rw--r--. 1 sivey root 20 11月 18 19:24 hello.txt
文件类型
- - :普通文件
- d :目录
- l :软连接
- c : 字符设备【鼠标键盘】
- b :块文件【硬盘、U盘】
文件权限
- 前三位 用户对该文件的权限
- 中间三位 所属组对该文件的权限
- 后三位 其他组对该文件的权限
文件数 / 硬连接数
- 文件:1表示硬链接数
- 目录:1表示目录内文件个数
sivey:文件所有者
root:文件所在用户组
文件大小:20k
最后修改时间:11月 18 19:24
② rwx文件权限
r = 4, w = 2, x = 1,rwx=4+2+1=7
- 作用到文件
- r:可读
- w:可写(但不代表可以删除,只有对该问价所在目录有写权限才能删除)
- x:执行
- 作用到目录
- r:可读,ls查看目录内容
- w:可写,可修改目录,可创建、删除、重命名目录
- x:可执行,即可以进入目录
③ 修改权限
- 通过 + - = 变更权限
- chmod u=rwx,g=rx,o=x 文件或目录名 给文件或目录的所有者,所在组,其他组对应权限
- chmod o+w 文件或目录名 给文件或目录的其他组增加对应权限
- chmod a-x 文件或目录名 给文件的所有者、所在组、其他组去掉执行的权限
- 通过数字变更权限
- chmod 751 文件或目录名 给文件或目录的所有者,所在组,其他组对应权限
十、 任务调度(crond)
定时的执行一些脚本文件,如数据库的数据备份。
crontab 【选项】
- -e 编辑crontab定时任务(简单任务不用写脚本,直接编辑复杂任务要写脚本文件)
- -l 查询crontab任务
- -r 删除当前用户所有的crontab任务
service crond restart 重启任务调度
举例:执行完crontab -e后输入下面的内容。
1
*/1 * * * * ls -l /home >> /tmp/to.xtx
时间参数说明
| 位 | 含义 | 取值范围 |
| ———- | ————————— | ——————————- |
| 第1个 | 一小时中的第几分钟 | 0-59 |
| 第2个 | 一天当中的第几小时 | 0-23 |
| 第3个 | 一个月当中的第几天 | 1-31 |
| 第4个 | 一年当中的第几月 | 1-12 |
| 第5个 * | 一周当中的星期几 | 0-7(0和7都是星期日) |特殊符号
- * :代表任何时间,比如第一个*就代表一个小时中每分钟都执行一次的意思
- , :代表不连续的时间,比如”0 8,12,16 *命令”,就代表再每天的8点0分,12点0分,16点0分都执行一次。
- - :代表连续的时间范围,比如“/10 * 命令”,代表在周一到周六的凌晨5点0分执行命令。
- /n :代表多久执行一次,比如“\/10 命令”,代表每隔十分钟就执行一遍命令。
特定时间执行的案例
- 45 22 * 命令 在22点45分执行
- 0 17 1 命令 每周1的17点0分执行
- 0 5 1,15 命令 每月1号和15号的凌晨5点0分执行
- 40 4 1-5 命令 每周一到周五的凌晨4点40分执行命令
- /10 4 命令 每天的凌晨4点,每隔10分钟执行一次命令
- 0 0 1,15 * 1 命令 每月的1号和15号,每周1的0点0分都会执行命令。注:星期几和几号最好不要同时出现,因为他们定义的都是天,容易混乱。
1. 任务调度过程
编写xxx.sh脚本文件,路径 /home/xw 文件内容如下
1
2ls -l /home >> /tmp/to.txt
date >> /tmp/to.txt给脚本文件可执行的权限
crontab -e
/1 * /home/xxx.sh
十一、 磁盘分区与挂载
1. 常用命令
- lsblk -f 查看系统的分区和挂载情况。带有分区类型
- lsblk 查看系统的分区和挂载情况。带有分区大小信息
2. Linux的磁盘分区
① 介绍
磁盘分区包括主分区和扩展分区,系统必须装到主分区中,扩展分区还可以分成多个逻辑分区。
对Linux来说无论有几个分区,分给哪一个目录使用,它只有一个根目录,有独立且唯一的目录结构,每个分区都用来组成整个文件系统的一部分。
IDE硬盘,驱动器标识为hdx~,hd表示分区所在设备的类型,x:为盘号,
- 挂载:将一个分区和一个目录联系起来,即将某分区挂载到某个目录,这时要载入的一个分区将使用他的存储空概念在一个目录下获得。
- 卸载:将一个分区和一个目录取消联系。
② 实例分析
lsblk 命令得到
- 分区情况:—vda1
- 分区类型:ext4
- uuid:4b499d76-769a-40a0-93dc-4a31a59add28
- 挂载点:/
3. 磁盘情况查询
- df -lh 查询系统磁盘整体的使用情况
- du -h /目录 查询指定目录的磁盘占用情况
- -s 指定目录占用大小汇总
- -h 带计量单位
- -a 含文件
- —max-depth=1 子目录深度
- -c 列出明细的同时,增加汇总值
- yum install tree 安装tree指令
十二、网络配置
- ifconfig 查看网络情况
- eth0 表示第一块网卡
- eth1 表示第二块网卡
- ping ip或域名 查看网络的联通情况
- /etc/sysconfig/network-scripts/ifcfg-eth0 网卡的配置目录
- BOOTPROTO=static 以静态的方式获取IP(每次不变)默认none
- IPADDR 系统的IP地址
- ONBOOT=yes
- service network restart 重启网络服务
十三、进程管理
1. 基础知识
- linux中每一个执行的程序都为一个进程,每一个进程都被分配一个ID(PID)来管理
- 每一个进程都会对应一个父进程,父进程可以复制多个子进程。linux的总父进程为init.
- 进程以两种方式存在,前台和后台。
- 一般系统服务都是以后台进程方式存在,一般都会常驻在系统中,直到关机才结束。
2. 进程查询
①. ps -aux 查看程序
-a 显示当前终端的所有进程
-u 以用户格式显示进程信息
- -x 显示后台进程运行的参数
注: bash或/bin/bash表示终端的进程
参数列表:
- USER 用户名
- PID 进程ID
- %CPU CPU占用率
- %MEM 内存占用率
- VSZ 虚拟内存占用情况
- RSS 物理内存占用情况
- TTY 使用的终端
- STAT 进程的状态
- s 休眠
- r 运行
- D 短期等待
- Z 僵死进程
- T 被跟踪或被停止
- START 启动时间
- TIME 占用CPU的总共时间
- COMMAND 进程执行时的命令行
②. ps -ef 查看进程的同时查看父进程
- PPID 父进程ID
eg:ps -ef | grep sshd 查看sshd(远程连接服务)进程的父进程
③. pstree 以树状的形式查询进程
- -p 显示PID
- -u 显示进程 所属用户
3. 终止进程
- kill [选项] 进程号
- kill -9 进程号 强制停止某个进程(如终端进程会忽略kill,需要使用 -9 )
- killall 进程名称 通过一个进程的名称,将一个父进程及其所有子进程全部终止
4. 服务管理
① 简介
服务本质上就是一个进程,但是是运行在后台的,通常会监听一个端口,通过这个端口等待其他请求的连接。如sshd 防火墙 mysql等,又称守护进程。
② 管理指令
- centos7.0以前: service 服务名 start stop restart reload status
- centos7.0以后: systemctl 指令代替 service
eg:service iptables status 查看防火墙(iptables)的状态
③ 查看端口状态
- telnet ip 端口号 在windos上查看某个ip的端口号是否在监听状态
④ 查看系统的服务
- setup -> 系统服务 可以看到有哪些系统服务
- 带有星号的表示自启动的。
- ls -l /etc/init.d/ 查看有哪些服务
⑤ 开机流程
开机 - BIOS - /boot - init进程1 - 运行级别 - 运行级别对应的服务
每一个进程,针对每一个运行级别都设置了是否自启动。
⑥. 服务自启动(设置级别)
chkconfig —list 查看每个服务的各个运行级别设置是否自启动/关闭
chkconfig 服务名 —list 查看某个服务的各个运行级别设置是否自启动/关闭
- chkconfig —level 5 服务名 on/off 为某个服务设置在某个运行级别下是否自启动
5. 监控服务
①. 动态进程监控
top [选项] 显示正在执行的进程
- -d 指定top每隔几秒更新(默认3秒)
- -i 不显示任何限制或僵死的进程
- -p 查看指定PID的进程的状态
交互操作说明:
- P 以cpu使用率排序(默认)
- M 以内存使用率排序
- N 以PID排序
- u 输入u以后输入用户名回车,查看指定用户的进程
- k 输入k以后输入进程号,会杀死相应的进程
- Q 退出
②. 网络状态监控
netstat -anp 查看所有的网络服务
- -an 按一定顺序排列输出
- -p 显示哪个进程在调用
eg:
- netstat -anp |grep sshd 查看sshd服务的网络在那个太
- netstat -anp |grep 6379 查看6379端口的网络状态
十四、 RPM和YUM
1. RPM
全称:Redhat Package Manager 类似windos的.exe安装包,RPM被redhat、centos等发行版本所使用。
①. 命令
rpm -qa 查询已安装的rpm软件
eg:rpm -qa | grep xxx 查询系统是否安装了xxx
rpm -qa 查询已经安装的所有安装包
rpm -qi 软件包名 查看安装的rpm软件的详细信息(版本、安装时间等)
rpm -ql 软件包名 查看安装的软件安装了哪些文件(安装位置)
rpm -qf 目录 查看某个目录是属于哪个RPM包的
eg: rpm -qf /etc/passwd
rpm -e 软件包名 删除某个软件包(当该包被其他包依赖时会提示是否强制删除)
rpm -ivh 路径/软件包名 安装某个rpm软件包(要先有安装包,才能安装)
- -i install 安装
- -v verbose 提示
- -h hash 进度条
2.YUM(主流)
①. 简介
shell前端软件包管理工具,基于RPM包,可以从指定的服务器自动下载rpm包并进行安装,也可以自动处理依赖关系,并且一次性安装所有依赖的软件包。
②. 基本命令
- yum list | grep 软件包名称 查询远程服务器是否有该安装包
- yum install 软件包名称 安装某个软件(默认安装最新的,安装后自动删除安装包)
...
...
本文为作者原创文章,未经作者允许不得转载。