Linux60个小时速成
[toc]
1 前言
1.1 课程介绍
1.2 学习方向
1.3 应用领域
个人桌面领域
此领域是传统 linux 应用最薄弱的环节,传统 linux 由于界面简单、操作复杂、应用软件少的缺点,一直被 windows 所压制,但近些年来随着 ubuntu、fedora、Debian、Manjaro等优秀桌面环境的兴起,同时各大硬件厂商对其支持的加大,linux 在个人桌面领域的占有率在逐渐的提高。
服务器领域
linux 在服务器领域的应用是最强的。
linux 免费、稳定、高效等特点在这里得到了很好的体现,近些年来 linux 服务器市场得到了飞速的提升,尤其在一些高端领域尤为广泛。
嵌入式领域
近些年来 linux 在嵌入式领域的应用得到了飞速的提高
linux 运行稳定、对网络的良好支持性、低成本,且可以根据需要进行软件裁剪,内核最小可以达到几百 KB 等特点,使其近些年来在嵌入式领域的应用得到非常大的提高
主要应用:机顶盒、数字电视、网络电话、程控交换机、手机、PDA、智能家居、智能硬件等都是其应用领域。以后再物联网中应用会更加广泛
1.4 学习阶段
- linux 环境下的基本操作命令,包括 文件操作命令(rm mkdir chmod, chown) 编辑工具使用(vi vim)linux 用户管理(useradd userdel usermod)等
- linux 的各种配置(环境变量配置,网络配置,服务配置)
- linux 下如何搭建对应语言的运行环境(大数据,JavaEE, Python 等)
- 能编写 shell 脚本,对 Linux 服务器进行维护。
- 能进行安全设置,防止公鸡,保障服务器正常运行,能对系统调优。
- 深入理解 Linux 系统(对内核有研究),熟练掌握大型网站应用架构组成、并熟悉各个环节的部署和维护方法。
1.5 学习建议
- 高效而愉快的学习
- 先建立一个整体框架,然后细节
- 不需要掌握所有的 Linux 指令,要学会查询手册和百度
- 先 know how ,再 know why
- 计算机是一门”做中学”的学科,不是会了再做,而是做了才会.
- 适当的囫囵吞枣
- Linux 不是编程,重点是实际操作,各种常用指令要玩的溜
2 linux入门
2.1 linux简介
- Linux 内核最初只是由芬兰人林纳斯·托瓦兹(Linus Torvalds)在赫尔辛基大学上学时出于个人爱好而编写的。
- Linux 是一套免费使用和*传播的类 Unix 操作系统,是一个基于 POSIX 和 UNIX 的多用户、多任务、支持多线程和多 CPU 的操作系统。
- Linux 能运行主要的 UNIX 工具软件、应用程序和网络协议。它支持 32 位和 64 位硬件。Linux 继承了 Unix 以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统。
- Linux 是一款操作系统,免费,开源, 安全,高效,稳定, 处理高并发非常强悍,现在很多的企业级的项目都部署到 Linux/unix 服务器运行。
其内核于1991年10月5日首次发布
2.2 linux发行版
目前市面上较知名的发行版有:Ubuntu、RedHat、CentOS、Debian、Fedora、SuSE、OpenSUSE、Arch Linux、SolusOS 等。
这些发行版的关系如下图
2.3 和unix的关系
unix怎么来的
2.4 linux怎么来的
20世纪80年代,计算机硬件的性能不断提高,PC的市场不断扩大,当时可供计算机选用的操作系统主要有Unix、DOS和iOS这几种。
- Unix价格昂贵,不能运行于PC;
- DOS显得简陋,且源代码被软件厂商严格保密;
- MacOS是一种专门用于苹果计算机的操作系统。
此时,计算机科学领域迫切需要一个更加完善、强大、廉价和完全开放的操作系统。由于供教学使用的典型操作系统很少,因此当时在荷兰当教授的美国人AndrewS.Tanenbaum编写了一个操作系统,名为MINIX,为了向学生讲述操作系统内部工作原理。
MINIX虽然很好,但只是一个用于教学目的的简单操作系统,而不是一个强有力的实用操作系统,然而最大的好处就是公开源代码。
全世界学计算机的学生都通过钻研MINIX源代码来了解电脑里运行的MINIX操作系统,芬兰赫尔辛基大学大学二年级的学生Linus Torvalds就是其中一个,在吸收了MINIX精华的基础上,Linus于1991年写出了属于自己的Linux操作系统,版本为Linux0.01,是Linux时代开始的标志。他利用Unix的核心,去除繁杂的核心程序,改写成适用于一般计算机的x86系统,并放在网络上供大家下载,1994年推出完整的核心Version1.0,至此,Linux逐渐成为功能完善、稳定的操作系统,并被广泛使用。
2.5 与windows比较
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LGCtodW4-1653304158045)(file:///D:/%E5%A4%A7%E5%AD%A6/%E4%B8%9C%E8%BD%AF%E5%9F%B9%E8%AE%AD/linux%E6%95%99%E7%A8%8B_files/30a61r1n1csnkjn9d9sfgb39vj.png)]
3 安装虚拟机和CentOS
3.1 vmware 和 centos介绍
VMWare虚拟机软件是一个“虚拟PC”软件,它使你可以在一台机器上同时运行二个或更多Windows、DOS、LINUX系统。与“多启动”系统相比,VMware采用了完全不同的概念。多启动系统在一个时刻只能运行一个系统,在系统切换时需要重新启动机器
下载:
https://download3.vmware.com/software/wkst/file/VMware-workstation-full-16.0.0-16894299.exe
CentOS是免费的、开源的、可以重新分发的开源操作系统 ,CentOS(Community Enterprise Operating System,中文意思是社区企业操作系统)是Linux发行版之一。
CentOS Linux发行版是一个稳定的,可预测的,可管理的和可复现的平台,源于Red Hat Enterprise Linux(RHEL)依照开放源代码(大部分是GPL开源协议 )规定释出的源码所编译而成。
自2004年3月以来,CentOS Linux一直是社区驱动的开源项目,旨在与RHEL在功能上兼容。
下载:
http://mirrors.163.com/centos/7.9.2009/isos/x86_64/CentOS-7-x86_64-DVD-2009.iso
3.2 安装vmware
3.3 安装centos
3.4 联网和使用终端
3.5 设置共享目录
4 linux目录结构
4.1 树状目录
linux 的文件系统是采用级层式的树状目录结构,在此结构中的最上层是根目录"/",然后在此目录下再创建其他的目录。
深刻理解 linux树状文件目录是非常重要的,这里我给大家说明一下。
记住一句经典的话:在 Linux 世界里,一切皆文件。
4.2 详细介绍
bin 是 Binaries (二进制文件) 的缩写, 这个目录存放着最经常使用的命令。
这里存放的是启动 Linux 时使用的一些核心文件,包括一些连接文件以及镜像文件。
dev 是 Device(设备) 的缩写, 该目录下存放的是 Linux 的外部设备,在 Linux 中访问设备的方式和访问文件的方式是相同的。
etc 是 Etcetera(等等) 的缩写,这个目录用来存放所有的系统管理所需要的配置文件和子目录。
用户的主目录,在 Linux 中,每个用户都有一个自己的目录,一般该目录名是以用户的账号命名的,如上图中的 alice、bob 和 eve。
lib 是 Library(库) 的缩写这个目录里存放着系统最基本的动态连接共享库,其作用类似于 Windows 里的 DLL 文件。几乎所有的应用程序都需要用到这些共享库。
这个目录一般情况下是空的,当系统非法关机后,这里就存放了一些文件。
linux 系统会自动识别一些设备,例如U盘、光驱等等,当识别后,Linux 会把识别的设备挂载到这个目录下。
系统提供该目录是为了让用户临时挂载别的文件系统的,我们可以将光驱挂载在 /mnt/ 上,然后进入该目录就可以查看光驱里的内容了。
opt 是 optional(可选) 的缩写,这是给主机额外安装软件所摆放的目录。比如你安装一个ORACLE数据库则就可以放到这个目录下。默认是空的。
proc 是 Processes(进程) 的缩写,/proc 是一种伪文件系统(也即虚拟文件系统),存储的是当前内核运行状态的一系列特殊文件,这个目录是一个虚拟的目录,它是系统内存的映射,我们可以通过直接访问这个目录来获取系统信息。
这个目录的内容不在硬盘上而是在内存里,我们也可以直接修改里面的某些文件,比如可以通过下面的命令来屏蔽主机的ping命令,使别人无法ping你的机器:
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all
该目录为系统管理员,也称作超级权限者的用户主目录。
s 就是 Super User 的意思,是 Superuser Binaries (超级用户的二进制文件) 的缩写,这里存放的是系统管理员使用的系统管理程序。
这个目录是 Redhat/CentOS 所特有的目录,selinux 是一个安全机制,类似于 windows 的防火墙,但是这套机制比较复杂,这个目录就是存放selinux相关的文件的。
该目录存放一些服务启动之后需要提取的数据。
这是 Linux2.6 内核的一个很大的变化。该目录下安装了 2.6 内核中新出现的一个文件系统 sysfs 。
sysfs 文件系统集成了下面3种文件系统的信息:针对进程信息的 proc 文件系统、针对设备的 devfs 文件系统以及针对伪终端的 devpts 文件系统。
该文件系统是内核设备树的一个直观反映。
当一个内核对象被创建的时候,对应的文件和目录也在内核对象子系统中被创建。
tmp 是 temporary(临时) 的缩写这个目录是用来存放一些临时文件的。
usr 是 unix shared resources(共享资源) 的缩写,这是一个非常重要的目录,用户的很多应用程序和文件都放在这个目录下,类似于 windows 下的 program files 目录。
系统用户使用的应用程序。
超级用户使用的比较高级的管理程序和系统守护程序。
内核源代码默认的放置目录。
var 是 variable(变量) 的缩写,这个目录中存放着在不断扩充着的东西,我们习惯将那些经常被修改的目录放在这个目录下。包括各种日志文件。
是一个临时文件系统,存储系统启动以来的信息。当系统重启时,这个目录下的文件应该被删掉或清除。如果你的系统上有 /var/run 目录,应该让它指向 run。
在 Linux 系统中,有几个目录是比较重要的,平时需要注意不要误删除或者随意更改内部文件。
上边也提到了,这个是系统中的配置文件,如果你更改了该目录下的某个文件可能会导致系统不能启动。
/bin, /sbin, /usr/bin, /usr/sbin: 这是系统预设的执行文件的放置目录,比如 ls 就是在 /bin/ls 目录下的。
值得提出的是 /bin、/usr/bin 是给系统用户使用的指令(除 root 外的通用用户),而/sbin, /usr/sbin 则是给 root 使用的指令。
这是一个非常重要的目录,系统上跑了很多程序,那么每个程序都会有相应的日志产生,而这些日志就被记录到这个目录下,具体在 /var/log 目录下,另外 mail 的预设放置也是在这里。
5 远程登录linux
5.1 为什么要远程登录
说明: 公司开发时候, 具体的情况是这样的
- linux 服务器是开发小组共享的.
- 正式上线的项目是运行在公网的.
- 因此程序员需要远程登录到 centos 进行项目管理或者开发.
- 画出简单的网络拓扑示意图(帮助理解)
- 远程登录客户端有 Xshell, Xftp , 我们学习使用 Xshell 和 Xftp , 其它的远程工具大同小异
5.2 安装和使用xshell
Xshell 是目前最好的远程登录到 Linux 操作的软件,流畅的速度并且完美解决了中文乱码的问题, 是目前程序员首选的软件。
Xshell [1] 是一个强大的安全终端模拟软件,它支持 SSH1, SSH2, 以及 Microsoft Windows 平台的 TELNET 协议。
Xshell 可以在 Windows 界面下用来访问远端不同系统下的服务器,从而比较好的达到远程控制终端的目的。
特别说明:如果希望安装好 XShell 就可以远程访问 Linux 系统的话,需要有一个前提,就是Linux 启用了 SSHD 服务,该服务会监听 22 号端
5.3 安装和使用xftp
Xftp是一个功能强大的SFTP、FTP 文件传输软件。使用了 Xftp 以后,MS Windows 用户能安全地在 UNIX/Linux 和 Windows PC 之间传输文件。Xftp 能同时适应初级用户和高级用户的需要。它采用了标准的 Windows 风格的向导,它简单的界面能与其他 Windows 应用程序紧密地协同工作,此外它还为高级用户提供了众多强劲的功能特性。
5.4 开通sshd服务
监听22端口
5.5 乱码问题
6 关机、重启、登录与注销
6.1 关机与重启
6.2 登录与注销
7 常用指令
7.1 文件目录类
7.2 时间日期类
7.3 搜索查找类
案例:
1 使用find按文件名来查找语法:find / -name 文件名 ,这里可用通配符*
2 如果想按文件的修改时间来查找可以使用-mtime参数,后面接时间参数 -代表时间内 +代表时间以前
3 如果想按文件有大小来进行查找可以直接使用-size 参数后面加上文件大小即可 (+n 大于 -n 小于 n 等于)
4 如果相针对文件类型进行查找可以直接使用-type参数 ,文件的类型有 文件f 目录d 设备b,c 链接l 等
5 在查找的时候还可以把两个查找类型进行结合起来使用,使用-a代表并且 -o代表或者
6 查找当前目录下所有.txt文件并打印出详细的文件信息
7.4 locate
locaate 指令可以快速定位文件路径。locate 指令利用事先建立的系统中所有文件名称及路径的locate 数据库实现快速定位给定的文件。locate 指令无需遍历整个文件系统,查询速度较快。为了保证查询结果的准确度,管理员必须定期更新 locate 时刻。
7.6 grep和管道符号|
7.7 压缩和解压类
细节说明:
当我们使用 gzip 对文件进行压缩后,不会保留原来的文件
7.8 帮助信息类
8 用户管理
8.1 介绍
Linux系统是一个多用户多任务的分时操作系统,任何一个要使用系统资源的用户,都必须首先向系统管理员申请一个账号,然后以这个账号的身份进入系统。
在实际的项目中,由于要涉及到多个部门共同参与(如前端、后端、数据组。。。),这时就需要为每位开发人员创建一个用户,为了方便给不同的人分配不同的权限,可以将用户分为不同的组,之后对各个组分配权限就很方便了。
对于创建的每一个用户,都会在/home文件夹下默认创建一个以用户名命名的文件夹,用于该用户文件的存放。
8.2 用户操作
以下均是
8.3 添加用户
8.4 修改密码
注:如果没有带用户名,则是给当前登录的用户修改密码
8.5 删除用户
8.6 查询用户信息
8.7 切换用户
注意:
从权限高的用户切换到权限低的用户,不需要输入密码,反之需要。
当需要返回到原来用户时,使用 exit 指令
8.8 查看当前登录用户
8.9 用户组操作
8.10 新增组
8.11 删除组
8.12 修改用户的组、初始目录
8.13 用户和组的相关文件
特殊账号:
8.14 /etc/shadow
口令配置文件
密码生成的算法:
8.15 /etc/group文件
组(group)的配置文件,记录 Linux 包含的组的信息
每行含义:组名:口令:组标识号:组内用户列表
9 权限管理
9.1 介绍
Linux中所有内容都是以文件的形式保存和管理,即:一切皆文件。
- 普通文件是文件。
- 目录(在win下称为文件夹)是文件。
- 硬件设备(键盘、硬盘、打印机)是文件。
Linux下有两种用户:超级用户(root)、普通用户。
- 超级用户:可以再linux系统下做任何事情,不受限制,命令提示符是"#"
- 普通用户:在linux下做有限的事情, 命令提示符是"$"
linux文件对不同用户可以分别设置权限,管理员(root)有所有权限。
文件访问者的分类
- 文件和文件目录的所有者:u—User
- 文件和文件目录的所有者所在的组的用户:g—Group
- 其它用户:o—Others
9.2 查看文件类型和所有者
一般为文件的创建者,谁创建了该文件,就自然的成为该文件的所有者,当然后期可以改
使用命令查看: ls -l
9.3 权限说明
9.4 修改文件权限-chmod
9.4.1 第一种方式:+ 、-、= 变更权限
使用chmod命令来改变文件的权限,
注:只有文件的拥有者和root用户才能调用chmod命令改变权限
u:所有者 g:所有组 o:其他人 a:所有人(u、g、o 的总和)
- chmod u=rwx,g=rx,o=x 文件目录名
- chmod o+w 文件目录名
- chmod a-x 文件目录名
练习:
9.4.2 第二种方式:通过数字变更权限
规则:r=4 w=2 x=1 ,rwx=4+2+1=7
chmod u=rwx,g=rx,o=x 文件目录名
相当于 chmod 751 文件目录名
9.5 修改文件所有者-chown
9.6 修改文件所在组-chgrp
实战练习:
练习1:
- 练习文件权限管理[课堂练习]
- 建立两个组(神仙,妖怪)
- 建立四个用户(唐僧, 悟空,八戒,沙僧)
- 给四个用户设置密码
- 把悟空,八戒放入妖怪组, 唐僧、沙僧 在神仙
- 用悟空( 切换用户 )建立一个文件 (monkey.java 该文件要输出 i am monkey) echo 'i am monky' > monkey.java
- 给八戒一个可以rw 的权限
- 八戒修改 monkey.java 加入一句话( i am pig)
- 设置唐僧、沙僧对该文件没有权限
- 把 沙僧 放入妖怪组
- 让沙僧 修改 该文件 monkey, 加入一句话 ("我是沙僧,我也是妖怪!");
练习2:
- 用 root 登录,建立用户 lucy,自己设定密码
- 用 lucy 登录,在主目录下建立目录 ff/gg/hh
- 在 hh 中建立一个文本文件 hello.txt, 向 hello.txt 输出 hello,kitty
- 改变 hello.txt 的权限为当前用户可读可写可执行,组用户可读可执行,其他用户只读
- 删除新建立的目录 ff/gg/hh
- 删除用户 lucy 及其主目录中的内容
- 重新启动 linux 或关机
10 vi和vim
10.1 vi和vim介绍
所有的 Linux 系统都会内建 vi 文本编辑器。
Vim 具有程序编辑的能力,可以看做是 Vi 的增强版本,可以主动的以字体颜色辨别语法的正确
性,方便程序设计。代码补完、编译及错误跳转等方便编程的功能特别丰富,在程序员中被广泛使用。
10.2 三种模式
命令模式: 启动 vim编辑器 后默认进入命令模式,该模式中主要完成如光标移动、字符串查找,以及删除、复制、粘贴文件内容等相关操作;
编辑模式: 该模式中主要的操作就是录入文件内容,可以 对文本文件正文进行修改、或者添加新的内容。处于输入模式时,vi编辑器的最后一行会出现"–INSERT–"的状态提示信息;
末行模式: 该模式中可以设置vi编辑环境、保存文件、退出编辑器,以及对文件内容进行查找、替换等操作。处于末行模式时,vim编辑器的最后一行会出现冒号:提示符。
10.3 各种操作说明
10.3.1 光标移动
10.3.2 复制、粘贴、删除
10.3.3 保存文件及退出vi编辑器
10.3.4 文本内容替换
10.3.5 文件内容查找和撤销编辑及保存退出
10.4 练习游戏:
https://vim-adventures.com/
10.5 实战练习1:
1、 请在 /tmp 这个目录下建立一个名为 vitest 的目录;
2、 进入 vitest 这个目录当中;
3、 将 /etc/man_db.conf 复制到本目录底下(或由上述的连结下载 man.config 档案);
4、 使用 vim 开启本目录下的 man_db.conf 这个档案;
5、 在 vim中设定一下行号;
6、 移动到第 58 行,向右移动10个字符
7、 移动到第一行,并且向下搜寻一下『 man 』这个字符串,请问他在第几行?
8、 接着下来,我要将 50 到 100 行之间的『小写 man 字符串』改为『大写 MAN 字符串』,并且一个一个挑选是否需要修改,如何下达指令?如果在挑选过程中一直按『y』, 结果会在最后一行出现改变了几个 man 呢?
10、 我要复制 65 到 73 这九行的内容(含有MANPATH_MAP),并且贴到最后一行之后;
11、21 到 42 行之间的开头为 # 符号的批注数据我不要了,要如何删除?
12、将这个档案另存成一个 man.test.config 的檔名;
13、去到第 27 行,并且删除 15 个字符,结果出现的第一个单字是什么?
14、在第一行新增一行,该行内容输入『I am a student…』;
15、储存后离开吧!
10.6 实战练习2:
1 复制系统/etc/services文件到/root目录,然后使用vim命令打开此文件。
2 显示该文件的行号
3 显示该文件的每一行结尾的标识符
4 替换文件中所有的"ssh"字符串替换成"oldboy"
5 跳转到30行,并删除此行。
6 撤销一次你的操作。
7 当你执行了撤销的时候,发现撤销错了,回滚,怎么操作。
8 给第25行到30行的行首添加一个注释"#".写出操作步骤。
9 删除第10行到20行的行首的注释"#".写出操作步骤。
11 磁盘分区挂载
11.1 硬盘类型
对于Linux而言硬件是作为设备来进行管理的,每个硬件设备有对应的文件,文件都存储在/dev目录中
分区设备的文件名:
对于一个硬盘如果进行了分区,则在每个硬盘的文件名后面加上数字用来指代分区,例如/dev/sda1,表示sda硬盘的第一个分区
[a-d]解释:(a 为基本盘,b 为基本从属盘,c 为辅助主盘,d 为辅助从属盘)
主分区用数字1-4来指代
逻辑分区从数字5开始按顺序进行指代
11.2 分区基本知识
11.2.1 mbr 分区:
1.最多支持四个主分区
2.系统只能安装在主分区
3.扩展分区要占一个主分区
4.MBR 最大只支持 2TB,但拥有最好的兼容性
11.2.1 gtp 分区:
1.支持无限多个主分区(但操作系统可能限制,比如 windows 下最多 128 个分区)
2.最大支持 18EB 的大容量(1EB=1024 PB,1PB=1024 TB )
3.windows7 64 位以后支持 gtp
11.3 windows和linux查看分区格式
windows:
右击我的电脑 -> 管理 -> 磁盘管理 -> 右击磁盘0 -> 属性 -> 卷
linux :
fdisk -l
parted -l
11.4 linux分区
11.4.1 原理介绍
Linux 来说无论有几个分区,分给哪一目录使用,它归根结底就只有一个根目录,一个独立且唯一的文件结构 , Linux 中每个分区都是用来组成整个文件系统的一部分。
Linux 采用了一种叫"载入"的处理方法,它的整个文件系统中包含了一整套的文件和目录,且将一个分区和一个目录联系起来。这时要载入的一个分区将使它的存储空间在一个目录下获得
11.4.2 查看分区情况
lsblk 或者 lsblk -f
11.5 增加硬盘并挂载
11.5.1 示意图
整体步骤:
- 虚拟机添加硬盘
- 分区 fdisk /dev/sdb
- 格式化 mkfs -t ext4 /dev/sdb1
- 挂载 先创建一个 /home/newdisk , 挂载 mount /dev/sdb1 /home/newdisk
- 设置可以自动挂载(永久挂载,当你重启系统,仍然可以挂载到 /home/newdisk)
11.6 具体步骤
11.6.1 虚拟机添加硬盘
- 选中 目标虚拟机 右键 设置
- 点击左下角添加,
- 选中硬盘,点击 下一步
- 选择SCSI类型,点击 下一步
- 选择 创建新虚拟磁盘,点击 下一步
- 指定 磁盘大小为10G,点击 下一步
- 点击完成
- 注意: 重启 才可以生效
- 重启后查看是否多了一个硬盘sdb
11.6.2 分区
- fdisk /dev/sdb 开始分区
- 输入 n , 新增分区
- 输入 p , 开始分区, 后面按回车
- 最后 输入 w , 保存 且 退出
- lsblk -f 查看是否成功
11.6.3 格式化
mkfs -t ext4 /dev/sdb1
-t :表示指定文件系统格式为ext4
11.6.4 挂载
将 /dev/sdb1 挂载到 /home/newdisk 目录
1 创建目录 mkdir -p /home/newdisk
2 执行 mount /dev/sdb1 /home/newdisk 建立设备分区和系统目录的映射关系
3 lsblk -f 查看是否挂载成功
如果是卸载:
•umount 设备名称 或者 挂载目录
•例如: umount /dev/sdb1 或者 umount /newdisk
11.6.5 设置永久挂载
经过上面步骤已经挂载后了,但重启后发现又失效了,怎么办?
1: 将映射关系写到配置文件中 /etc/fstab
vim /etc/fstab
2: mount -a 重新加载 /etc/fstab 文件 ;
3: 重启操作系统后, 测试 lsblk -f
11.7 查看磁盘使用情况
11.8 查看目录占用磁盘空间情况
11.9 统计某个目录下文件个数
如果要统计包含的子目录,以及子目录的子目录下的文件个数怎么办?
11.10 统计某个目录下子目录个数
12 网络配置
13 进程与服务管理
13.1 进程管理
13.2 基本介绍
- 在 LINUX 中,每个执行的程序(代码)都称为一个进程。每一个进程都分配一个 ID 号。
- 每一个进程,都会对应一个父进程,而这个父进程可以复制多个子进程。例如 www 服务器。
- 每个进程都可能以两种方式存在的。前台与后台,所谓前台进程就是用户目前的屏幕上可以进行操作的。后台进程则是实际在操作,但由于屏幕上无法看到的进程,通常使用后台方式执行。
- 一般系统的服务都是以后台进程的方式存在,而且都会常驻在系统中。直到关机才才结束。
13.3 查看系统进程
查看进行使用的指令是 ,一般来说使用的参数是 ps -aux
13.4 进程信息说明
13.4.1 ps -aux
ps -aux
• USER:进程使用者
• PID :程序的id
• %CPU:占用cpu的比例
• %MEM:占用内存的比例
• VSZ:该进程使用的虚拟內存量(KB)
• RSS:该进程占用的固定內存量(KB)
• TTY :登入者的终端机位置若与终端无关,则显示? 若为pts/0等,则表示由网络连接主机进程。
• STAT :进程状态
- D 不可中断 Uninterruptible(usually IO)
- R 正在运行或在队列中的进程
- S 处于休眠状态
- T 停止或被追踪
- Z 僵尸进程
- W 进入内存交换(从内核2.6开始无效)
- X 死掉的进程
- < 高优先级
- n 低优先级
- s 包含子进程
- \+ 位于后台的进程组
• START:进程开始时间
• TIME:实际使用cpu的时间
• COMMAND:所下达的是什么指令
13.4.2 ps -ef
ps -ef | more
•UID:用户 ID
•PID:进程 ID
•PPID:父进程 ID
•C:CPU 用于计算执行优先级的因子。数值越大,表明进程是 CPU 密集型运算,执行优先级会
降低;数值越小,表明进程是 I/O 密集型运算,执行优先级会提高
•STIME:进程启动的时间
•TTY:完整的终端名称
•TIME:CPU 时间
•CMD:启动进程所用的命令和参数
13.5 终止进程
若是某个进程执行一半需要停止时,或是已消了很大的系统资源时,此时可以考虑停止该进程。
使用 kill 命令来完成此项任务。
基本语法:
- kill [选项] 进程号(功能描述:通过进程号杀死进程)
- killall 进程名称 (功能描述:通过进程名称杀死进程,也支持通配符,这在系统因负载过大而变得很慢时很有用)
-9 :表示强迫进程立即停止
13.6 查看进程树
pstree [选项] ,可以更加直观的来看进程信息
-p :显示进程的 PID
-u :显示进程的所属用户
13.7 服务管理
13.8 基本介绍
服务(service) 本质就是进程,但是是运行在后台的,通常都会监听某个端口,等待其它程序的请求,比如(mysql , sshd 防火墙等),因此我们又称为守护进程,是 Linux 中非常重要的知识点。【原理图】
13.9 service指令
service 服务名 [start | stop | restart | reload | status]
13.10 查看有哪些服务
- setup
- ls -l /etc/init.d
13.10.1 chkconfig
13.11 动态监控进程
#top
- top:输入此命令,按回车键,查看执行的进程。
- u:然后输入“u”回车,再输入用户名,即可
- k:然后输入“k”回车,再输入要结束的进程 ID
14 shell编程
14.1 shell概述
14.2 什么是shell
Shell就是用户与Linux内核之间的解释器,负责将用户的指令翻译为内核可以识别的指令。
14.3 什么是shell脚本
Shell 脚本(shell script),是一种为 shell 编写的脚本程序。
业界所说的 shell 通常都是指 shell 脚本,但读者朋友要知道,shell 和 shell script 是两个不同的概念。
14.4 谁要学习shell
Linux运维工程师:编写Shell程序进行服务集群管理。
Python和JavaEE程序员:编写Shell脚本程序或者是服务器的维护,比如编写一个定时备份数据库的脚本。
大数据程序员:编写Shell程序来管理集群。
...
14.5 有哪些shell
Shell 编程跟 JavaScript、php 编程一样,只要有一个能编写代码的文本编辑器和一个能解释执行的脚本解释器就可以了。
Linux 的 Shell 种类众多,常见的有:
- Bourne Shell(/usr/bin/sh或/bin/sh)
- Bourne Again Shell(/bin/bash)
- C Shell(/usr/bin/csh)
- K Shell(/usr/bin/ksh)
- Shell for Root(/sbin/sh)
...
14.6 第1个shell脚本
vim hello.sh
说明:
\#! 告诉系统这个脚本需要什么解释器来执行。
文件扩展名 .sh 不是强制要求的。
- 方法1 直接运行解释器,hello.sh 作为 Shell 解释器的参数。此时 Shell 脚本就不需要指定解释器信息,第一行可以去掉。
- 方法2 hello.sh 作为可执行程序运行,Shell 脚本第一行一定要指定解释器。
14.7 变量
定义
- Shell 变量分为系统变量和自定义变量。系统变量有PWD、$USER等,显示当前 Shell 中所有变量:set 。
- 变量名可以由字母、数字、下划线组成,不能以数字开头。
基本语法
- 定义变量:变量名=变量值,等号两侧不能有空格,变量名一般习惯用大写。
- 删除变量:unset 变量名 。
- 声明静态变量:readonly 变量名,静态变量不能unset。
- 使用变量:$变量名
将命令返回值赋给变量(重点)
- A=
ls
反引号(``),执行里面的命令 - A=$(ls) 等价于反引号
14.8 环境变量
定义
基本语法
- export 变量名=变量值,将 Shell 变量输出为环境变量。
- source 配置文件路径,让修改后的配置信息立即生效。
- echo $变量名,检查环境变量是否生效
14.9 位置参数变量
基本语法
- $n :$0 代表命令本身、$1-$9 代表第1到9个参数,10以上参数用花括号,如 ${10}。
- $* :命令行中所有参数,且把所有参数看成一个整体。
- $@ :命令行中所有参数,且把每个参数区分对待。
- $# :所有参数个数。
实例:
编写 Shell 脚本 positionPara.sh ,输出命令行输入的各个参数信息。
14.10 预定义变量
定义
在赋值定义之前,事先在 Shell 脚本中直接引用的变量。
基本语法
- $? :最后一次执行的命令的返回状态,0为执行正确,非0执行失败。
实例:
编写 Shell 脚本 prePara.sh ,输出命令行输入的各个参数信息。
14.11 运算符
基本语法
- $((运算式)) 或 $[运算式]
- expr m + n 注意 expr 运算符间要有空格
- expr m - n
- expr \*,/,% 分别代表乘,除,取余
实例
14.12 条件判断
基本语法
[ condition ] 注意condition前后要有空格。非空返回0,0为 true,否则为 false 。
实例
运行结果:
大于
hello
条件满足,执行后面的语句
14.13 流程控制
14.13.1 if判断
基本语法
实例e
编写 Shell 程序:如果输入的参数大于60,输出“及格”,否则输出“不及格”。
14.13.2 case分支
实例
当命令行参数为1时输出“周一”,2时输出“周二”,其他情况输出“其它”。
14.13.3 for 循环
实例
1.打印命令行输入的参数。
- 输出从1加到100的值。
14.13.4 while 循环
实例
输出从1加到100的值。
14.14 读取控制台输入
基本语法
- read(选项)(参数)
- 选项
- -p:指定读取值时的提示符
- -t:指定读取值时等待的时间(秒),如果没有在指定时间内输入,就不再等待了。
参数
变量名:读取值的变量名
实例
读取控制台输入一个num值。
运行结果:
请输入一个数num1=10
你输入num1的值是:10
请在10秒内输入一个数num2=20
你输入num2的值是:20
14.15 函数
14.15.1 系统函数
basename,删掉路径最后一个 / 前的所有部分(包括/),常用于获取文件名。
基本语法
- basename [pathname] [suffix]
- basename [string] [suffix]
- 如果指定 suffix,也会删掉pathname或string的后缀部分。
实例
dirname,删掉路径最后一个 / 后的所有部分(包括/),常用于获取文件路径。
基本语法
- dirname pathname
- 如果路径中不含 / ,则返回 '.' (当前路径)。
实例
14.15.2 自定义函数
实例
计算输入两个参数的和。
14.16 实战练习
1 编写一个 Shell 程序 mkf,此程序的功能是:显示 root 下的文件信息,然后建立一个 kk 的文件夹,进入该文件夹下建立一个文件 aa,修改此文件的权限为可执行
2 判断当前系统上是否有用户的默认shell为bash;
如果有,就显示有多少个这类用户;否则,就显示没有这类用户;
3 给定一个文件,比如/etc/inittab
判断这个文件中是否有空白行;
如果有,则显示其空白行数;否则,显示没有空白行。
4 编写shell脚本,打印乘法口诀表
5 循环接收用户输入的一个年份,写一个函数判断是否是闰年,当用户输入q时退出
14.17 综合案例
14.17.1 归档文件
实际生产应用中,往往需要对重要数据进行归档备份。
需求:
实现一个每天对指定目录归档备份的脚本,输入一个目录名称(末尾不带/), 将目录下所有文件按天归档保存,并将归档日期附加在归档文件名上,放在/root/archive 下。
这里用到了归档命令:tar
后面可以加上-c 选项表示归档,加上-z 选项表示同时进行压缩,得到的文件后缀名 为.tar.gz。
脚本实现如下:
15 任务调度
16 rpm和yum
17 搭建javaee运行环境
`
14.13.4 while 循环
实例
输出从1加到100的值。
14.14 读取控制台输入
基本语法
- read(选项)(参数)
- 选项
- -p:指定读取值时的提示符
- -t:指定读取值时等待的时间(秒),如果没有在指定时间内输入,就不再等待了。
参数
变量名:读取值的变量名
实例
读取控制台输入一个num值。
运行结果:
请输入一个数num1=10
你输入num1的值是:10
请在10秒内输入一个数num2=20
你输入num2的值是:20
14.15 函数
14.15.1 系统函数
basename,删掉路径最后一个 / 前的所有部分(包括/),常用于获取文件名。
基本语法
- basename [pathname] [suffix]
- basename [string] [suffix]
- 如果指定 suffix,也会删掉pathname或string的后缀部分。
实例
dirname,删掉路径最后一个 / 后的所有部分(包括/),常用于获取文件路径。
基本语法
- dirname pathname
- 如果路径中不含 / ,则返回 '.' (当前路径)。
实例
14.15.2 自定义函数
实例
计算输入两个参数的和。
14.16 实战练习
1 编写一个 Shell 程序 mkf,此程序的功能是:显示 root 下的文件信息,然后建立一个 kk 的文件夹,进入该文件夹下建立一个文件 aa,修改此文件的权限为可执行
2 判断当前系统上是否有用户的默认shell为bash;
如果有,就显示有多少个这类用户;否则,就显示没有这类用户;
3 给定一个文件,比如/etc/inittab
判断这个文件中是否有空白行;
如果有,则显示其空白行数;否则,显示没有空白行。
4 编写shell脚本,打印乘法口诀表
5 循环接收用户输入的一个年份,写一个函数判断是否是闰年,当用户输入q时退出
14.17 综合案例
14.17.1 归档文件
实际生产应用中,往往需要对重要数据进行归档备份。
需求:
实现一个每天对指定目录归档备份的脚本,输入一个目录名称(末尾不带/), 将目录下所有文件按天归档保存,并将归档日期附加在归档文件名上,放在/root/archive 下。
这里用到了归档命令:tar
后面可以加上-c 选项表示归档,加上-z 选项表示同时进行压缩,得到的文件后缀名 为.tar.gz。
脚本实现如下: