1. Linux 简介
- Linux 内核 最初只是由芬兰人李纳斯·托瓦兹(Linus Torvalds)在赫尔辛基大学上学时出于个人爱好而编写的
- Linux 是一套免费使用和自由传播的类 Unix 操作系统
- Linux 能运行主要的 UNIX 工具软件、应用程序和网络协议
2. Linux 的发行版
- Linux 的发行版说简单点就是将 Linux 内核与应用软件做一个打 包
- Ubuntu(图形化接口, 个人用户操作比较良好)
- RedHat(企业使用的比较多, 图形化接口比较 low, 收费)
- CentOS(免费 开源 图形化接口比较 low)
- Debian、Fedora、SuSE、OpenSUSE、Arch Linux、SolusOS
3. Linux 应用领域
- 作为企业服务器
- 嵌入式
4. Linux vs Windows
比较 | Windows | Linux |
---|---|---|
界面 | 界面统一,外壳程序固定所有 Windows 程序菜单几乎一致,快捷键也几乎相同 | 图形界面风格因发行版不同而不同,可能互不兼容。GNU/Linux 的终端机是从 UNIX 传承下来,基本命令和操作方法也几乎一致。 |
驱动程序 | 驱动程序丰富,版本更新频繁。默认安装程序里面一般包含有该版本发布时流行的硬件驱动程序,之后所出的新硬件驱动依赖于硬件厂商提供。对于一些老硬件,如果没有了原配的驱动有时很难支持。另外,有时硬件厂商未提供所需版本的 Windows 下的驱动,也会比较头痛。 | 由志愿者开发,由 Linux 核心开发小组发布,很多硬件厂商基于版权考虑并未提供驱动程序,尽管多数无需手动安装,但是涉及安装则相对复杂,使得新用户面对驱动程序问题(是否存在和安装方法)会一筹莫展。但是在开源开发模式下,许多老硬件尽管在 Windows 下很难支持的也容易找到驱动。HP、Intel、AMD 等硬件厂商逐步不同程度支持开源驱动,问题正在得到缓解。 |
使用 | 使用比较简单,容易入门。图形化界面对没有计算机背景知识的用户使用十分有利。 | 图形界面使用简单,容易入门。文字界面,需要学习才能掌握。 |
学习 | 系统构造复杂、变化频繁,且知识、技能淘汰快,深入学习困难。 | 系统构造简单、稳定,且知识、技能传承性好,深入学习相对容易。 |
软件 | 每一种特定功能可能都需要商业软件的支持,需要购买相应的授权。 | 大部分软件都可以自由获取,同样功能的软件选择较少。 |
5. Linux 的安装
刚开始已经安装过 centeros6.5
6. Linux 系统启动过程
-
内核的引导
- 当计算机打开电源后,首先是 BIOS 开机自检,按照 BIOS 中设置的启动设备(通常是硬盘)来启动。
操作系统接管硬件以后,首先读入 /boot 目录下的内核文件。
- 当计算机打开电源后,首先是 BIOS 开机自检,按照 BIOS 中设置的启动设备(通常是硬盘)来启动。
-
运行 init
- init 进程是系统所有进程的起点,你可以把它比拟成系统所有进程的老祖宗,没有这个进程,系统中任何进程都不会启动。
init 程序首先是需要读取配置文件 /etc/inittab
- init 进程是系统所有进程的起点,你可以把它比拟成系统所有进程的老祖宗,没有这个进程,系统中任何进程都不会启动。
-
系统初始化
- 在 init 的配置文件中有这么一行:si::sysinit:/etc/rc.d/rc.sysinit 它调用执行了 /etc/rc.d/rc.sysinit,而 rc.sysinit 是一个 bash shell 的脚本,它主要是完成一些系统初始化的工作,rc.sysinit 是每一个运行级别都要首先运行的重要脚本
-
建立终端
- rc 执行完毕后,返回 init。这时基本系统环境已经设置好了,各种守护进程也已经启动了。
init 接下来会打开 6 个终端,以便用户登录系统。在 inittab 中的以下 6 行就是定义了 6 个终端:
- rc 执行完毕后,返回 init。这时基本系统环境已经设置好了,各种守护进程也已经启动了。
-
用户登录系统
- 命令行登录
- ssh 登录
- 图形界面登录
7. Linux 系统目录结构
- /bin bin 是 Binary 的缩写, 这个目录存放着最经常使用的命令
- /boot 这里存放的是启动 Linux 时使用的一些核心文件,包括一些连接文件以及镜像文件
- /dev dev 是 Device(设备)的缩写, 该目录下存放的是 Linux 的外部设备,在 Linux 中访问设备的方式和访问文件的方式是相同的
- /etc 这个目录用来存放所有的系统管理所需要的配置文件和子目录
- /home 用户的主目录,在 Linux 中,每个用户都有一个自己的目录,一般该目录名是以用户的账号命名的
- /lib 这个目录里存放着系统最基本的动态连接共享库,其作用类似于 Windows 里的 DLL 文件。几乎所有的应用程序都需要用到这些共享库
- /lost+found 这个目录一般情况下是空的,当系统非法关机后,这里就存放了一些文件
- /media inux 系统会自动识别一些设备,例如 U 盘、光驱等等,当识别后,linux 会把识别的设备挂载到这个目录下。
- /mnt 系统提供该目录是为了让用户临时挂载别的文件系统的,我们可以将光驱挂载在 /mnt/ 上,然后进入该目录就可以查看光驱里的内容了
- /opt 这是给主机额外安装软件所摆放的目录。比如你安装一个 ORACLE 数据库则就可以放到这个目录下。默认是空的
- /proc 这个目录是一个虚拟的目录,它是系统内存的映射,我们可以通过直接访问这个目录来获取系统信息。
- /root 该目录为系统管理员,也称作超级权限者的用户主目录
- /sbin s 就是 Super User 的意思,这里存放的是系统管理员使用的系统管理程序
- /selinux 这个目录是 Redhat/CentOS 所特有的目录,Selinux 是一个安全机制,类似于 windows 的防火墙,但是这套机制比较复杂,这个目录就是存放 selinux 相关的文件的
- /srv 该目录存放一些服务启动之后需要提取的数据
- /sys 这是 linux2.6 内核的一个很大的变化。该目录下安装了 2.6 内核中新出现的一个文件系统 sysfs。
- /tmp 这个目录是用来存放一些临时文件的。
- /usr 这是一个非常重要的目录,用户的很多应用程序和文件都放在这个目录下,类似于 windows 下的 program files 目录。
- /usr/bin 系统用户使用的应用程序
- /usr/sbin 超级用户使用的比较高级的管理程序和系统守护程序
- /usr/src 内核源代码默认的放置目录。
- /var 这个目录中存放着在不断扩充着的东西,我们习惯将那些经常被修改的目录放在这个目录下。包括各种日志文件
8. Linux 中忘记密码
- !进入单用户模式更改一下 root 密码即可
- 3 秒之内要按一下回车
- 然后输入 a
- 在 末尾输入 (single s S)其中的一个,有一个空格
- 最后按回车启动,启动后就进入了单用户模式了
- 此时已经进入到单用户模式了,你可以更改 root 密码了。更密码的命令为 passwd
9. Linux 的远程登录
- ssh(putty mutty Secure CRT xshell)
10. Linux 文件基本属性
- 当为 [d] 则是目录
- 当为 [–] 则是文件;
- 若是 [l] 则表示为链接文档(link file);ln -s 源文件 连接文件
11. 文件的权限
- chmod u+x file
- chmod u=wx file
- chmod 421 file
12. Shell 简介
- Shell 是一个用 C 语言编写的程序, 它是用户使用 Linux 的桥梁
- Shell 既是一种命令语言,又是一种程序设计语言
- Shell 是指一种应用程序,这个应用程序提供了一个界面,用户通过这个界面访问操作系统内核的服务
13. Shell 脚本
- Shell 脚本(shell script),是一种为 shell 编写的脚本程序。
14. 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)
15. Shell 变量
-
定义变量
- 操作符左右不能有空格
-
使用变量
- 在变量名称之前添加$
-
变量类型
- 局部变量
- 环境变量
- shell 变量
16. Shell 字符串
-
单引号
- 单引号中的变量都会原样输出, 不会进行解析
-
双引号
- 双引号中的变量都会被解析
17. Shell 数组
-
定义数组
- ages=(12,14,16)
18.Shell 参数传递
- $n —->n 为参数的下标, 从 0 开始,0 代表脚本本身的名称
- $# 参数的个数
- $? 上一条命令执行的结果 返回 0 代表成功, 其他代表失败
19. Shell 中的运算符
-
算术运算符
运算符 | 说明 | 举例 |
---|---|---|
+ | 加法 |
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。 |
条件表达式要放在方括号之间,并且要有空格,例如: [$a==$b] 是错误的,必须写成 [$a == $b]
-
关系运算符
运算符 | 说明 | 举例 |
---|---|---|
-eq | 检测两个数是否相等,相等返回 true。 | [$a -eq $b] 返回 false。 |
-ne | 检测两个数是否不相等,不相等返回 true。 | [$a -ne $b] 返回 true。 |
-gt | 检测左边的数是否大于右边的,如果是,则返回 true。 | [$a -gt $b] 返回 false。 |
-lt | 检测左边的数是否小于右边的,如果是,则返回 true。 | [$a -lt $b] 返回 true。 |
-ge | 检测左边的数是否大于等于右边的,如果是,则返回 true。 | [$a -ge $b] 返回 false。 |
-le | 检测左边的数是否小于等于右边的,如果是,则返回 true。 | [$a -le $b] 返回 true。 |
-
布尔运算符
运算符 | 说明 | 举例 |
---|---|---|
! | 非运算,表达式为 true 则返回 false,否则返回 true。 | [! false] 返回 true。 |
-o | 或运算,有一个表达式为 true 则返回 true。 | [$a -lt 20 -o $b -gt 100] 返回 true。 |
-a | 与运算,两个表达式都为 true 才返回 true。 | [$a -lt 20 -a $b -gt 100] 返回 false。 |
-
逻辑运算符
运算符 | 说明 | 举例 | ||||
---|---|---|---|---|---|---|
&& | 逻辑的 AND | [[$a -lt 100 && $b -gt 100]] 返回 false | ||||
\ | \ | 逻辑的 OR | [[$a -lt 100 | $b -gt 100 ]] 返回 true |
20. Shell 流程控制
- if 语句
if condition
then
command1
command2
...
commandN
fi
- if.else 语句
if condition
then
command1
command2
...
commandN
else
command
fi
- if..elif..else
if condition1
then
command1
elif condition2
then
command2
else
commandN
fi
- for 循环
for var in item1 item2 ... itemN
do
command1
command2
...
commandN
done
- for 循环遍历数组
#!/bin/bash
ages=(12 14 16)
for element in ${ages[@]}
do
echo $element
done
- while
while condition
do
command
done
- 无限循环
while :
do
command
done
或者
while true
do
command
done
21. Shell 中的函数
- 定义函数
[function] funname ()
{
action;
[return int;]
}
- 调用函数
函数名称
22. Shell 输入 / 输出重定向
输出重定向: command1 > file1
输出追加: command1 >> file1
23. 常用的 Shell 脚本
23.1 启动 zookeeper 集群
#!/bin/bash
#在 zkHosts 中配置的主机中启动 zookeeper
for zkHost in `cat ./zkHosts`
do
#-T 进制分配伪终端 一般自动化脚本不需要分配伪终端
ssh -T root@${zkHost} << eeooff
$ZOOKEEPER_HOME/bin/zkServer.sh start
eeooff
done
23.2 停止 zookeeper 集群
#!/bin/bash
#在 zkHosts 中配置的主机中停止 zookeeper
for zkHost in `cat ./zkHosts`
do
#-T 进制分配伪终端 一般自动化脚本不需要分配伪终端
ssh -T root@${zkHost} >/dev/null 2>&1 << eeooff
$ZOOKEEPER_HOME/bin/zkServer.sh stop
eeooff
done