转眼一周新的开始,我们又可以开始上课了!
首先回顾了上次课堂的一个内容,搭建局域网的yum源,首先reposync将网上的yum源同步下来,再用createrepo创建yum源包依赖关系,然后再http或ftp搭建web服务器,将yum源发布出去。最后在客户端配置local.repo文件。
[local]
name=local
baseurl=http:// //自已本地服务器的地址
gpgcheck=0
enabled=1
这里提到 web服务器如果不能访问成功,可能出现的原因是linux的防火墙在起作用。
a.这里设置firewalld
systemctl stop firewalld //停止防火墙
systemctl disabled firewalld //禁止开机自动启动防火墙
b.这里设置selinux
[root@localhost ~]# setenforce 0 //将selinux临时关闭
[root@localhost ~]# getenforce
Permissive
[root@localhost ~]# vi /etc/selinux/config
# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
# enforcing - SELinux security policy is enforced.
# permissive - SELinux prints warnings instead of enforcing.
# disabled - No SELinux policy is loaded.
SELINUX=disabled //将这里设置成disabled就可以永久禁止selinux起作用
# SELINUXTYPE= can take one of three two values:
# targeted - Targeted processes are protected,
# minimum - Modification of targeted policy. Only selected processes are protected.
# mls - Multi Level Security protection.
SELINUXTYPE=targeted
1. history
Linux 可以记录每个用户所使用的命令, 并记录到 ~/.bash_history 文件中 当用户以 bash 登入 Linux 主机后, 系统会主动地由 ~/.bash_history 读取命令历史 当用户注销时, 会将最近的 HISTFILESIZE 个记录写入 ~/.bash_history 文件中.
文件: ~/.byash_histor ,变量: HISTFILE=/home/<user>/.bash_history or /root/.bash_history # 指定 history 文件, 变量: HISTFILESIZE=1000 # history 文件最大的命令记录条数,变量: HISTSIZE=1000 # 当前环境最大的命令记录条数.
这里有几个参数: history -c: 清除当前内存内的全部命令记忆 !<#> 执行 history 命令显示的 第 # 条命令
!! 执行上一条命令 !<keywords> 执行最近的一条以< keywords> 开头的命令
2. 命令补全(『Tab』)
这个在工作中几乎每天都用到,按一下:能进行 『命令』 以及 『文件名』 的补全,按两下:能够罗列出所有符合补全的可能选项。
3. 命令别名(alias、unalias)
3.1 查看当前已经存在的命令别名 alias
3.2 设置命令别名 alias a=cd
3.3 命令别名的相关文件:如果在 bash 中设置命令别名,则重启后别名失效,其实只要是用户登录后所有会调用的环境配置文档中写入自定义命令别名的设置语句,都能实现 命令别名的固定.
3.4 取消命令别名 unalias <别名>
4. 通配符与特殊符号(这部分非常重要)
4.1通配符
符号 | 意义 |
* | 代表0-无穷个 任意字符 |
? | 代表有且只有一个字符 |
[ ] | 代表有且仅有一个字符,且为[...]中所枚举的其中一个, 如 [13579] |
[-] | 同上,只不过是一个范围,如[ 0-9 ],[a-z]等 |
[^] | 有且仅有一个,且不是所枚举的任何字符,如:[^a-zA-Z] 代表该位不是字母 |
符号 | 内容 |
# | 批注号 |
\ | 转义符号,将特殊字符或通配符还原成一般字符 |
| | 管道符 |
; | 命令衔接符,连续执行两条命令 |
~ | 当前用户家目录 |
$ | 取用变量符号 |
& | 工作控制,将指令变成后台工作 |
! | 逻辑非 |
>、>> | 数据流重定向,output |
<、<< | 数据流重定向,input |
' ' | 单引号,无法引用变量 |
" " | 双引号,可以引用变量 |
` ` | 指令引用,功能同 $(command) |
5. 输入输出重定向
5.1.1 标准输出(覆盖): >
如果多次命令的结果导出至同一个文件, 并采用覆盖方式,那该文件将仅保留最后一次输出的结果
[root@localhost /]# echo "11111">2.txt
[root@localhost /]# cat 2.txt
11111
5.1.2 标准输出(追加): >>
如果多次命令结果导出至同一个文件,若采用追加方式,那每次命令的结果都会追加至该文件的末尾
[root@localhost /]# echo "2222">>2.txt
[root@localhost /]# cat 2.txt
11111
2222
5.1.3 标准错误输出(覆盖): 2>
[root@localhost /]# ls 3.txt 2>2.txt
[root@localhost /]# cat 2.txt
ls: cannot access 3.txt: No such file or directory
5.1.4 标准错误输出(追加): 2>>
[root@localhost /]# ls 3.txt 2>>2.txt
[root@localhost /]# cat 2.txt
ls: cannot access 3.txt: No such file or directory
ls: cannot access 3.txt: No such file or directory
5.1.5 同时进行标准输出与标准错误输出
如果同时想将正常输出与错误输出都导入到同一个文件
[root@localhost /]# ls 1.txt 3.txt >2.txt 2>1.txt
[root@localhost /]# cat 1.txt
ls: cannot access 3.txt: No such file or directory
[root@localhost /]# cat 2.txt
1.txt
5.2 标准输入:原本需要由键盘输入的数据,改由文件内容来取代
5.2.1 标准输入(以 Ctrl + d 结束)
[root@localhost /]# cat > 2
k
3
4
[root@localhost /]# cat 2
k
3
4
5.2.2 标准输入(以 指定字符 结束)
[root@localhost /]# cat >3 << "end"
> 53
> 34
> 54
> end
[root@localhost /]# cat 3
53
34
54
5.3 巧用垃圾桶:Linux 下有一个特殊的设备 /dev/null ,所有被写入该设备的东西都会消失,所以如果有部分信息不想输出至文件,也不想输出至屏幕,那就输出至 /dev/null 吧
6. 管道符
管道的概念与数据流重定向不同,管道只是在输出至屏幕前多加一道工序,而配合管道的这些工序,往往是字符处理软件
[root@localhost /]# ps aux |grep vim
root 84924 0.0 0.0 112704 956 pts/0 S+ 12:08 0:00 grep --color=auto vim
7. 作业控制:当你希望同时执行多项耗时较长的任务时, 虽然 tty 有多个, 但是来回切换也是很麻烦的这时可以用到 linux 下的 "工作管理"
7.1 基本概念
- foreground: 前台, 平常执行命令的界面
- background: 后台, 看不到的地方
- 什么样的工作适合放到后台: 不需要与用户交互的命令
- 放入后台的工作是无法用 Ctrl + c 来终止的
- 后台的工作有两种状态: 暂停(stop) 和 运行中( running)
7.2 直接将命令放到后台运行(&)
[root@localhost /]# vi 1.txt &
[1] 85207
7.3 将正在运行的命令扔到后台,且置为暂停(ctrl+z)
[root@localhost /]# vi 1.txt
[2]+ Stopped vi 1.txt
7.4 查看后台中的任务(jobs)
[root@localhost /]# jobs
[1]- Stopped vi 1.txt
[2]+ Stopped vi 1.txt
7.5 将后台工作拿回到前台来(fg)
[root@localhost /]# fg 1
vi 1.txt
7.6 将后台暂停的任务激活
[root@localhost /]# bg 2
[2]+ vi 3.txt &
7.7 kill 命令
7.7.1 常用 signal
7.7.2 ps-1.: kill 默认是以 PID 来进行进程杀死的, 若要杀死某个任务号, 则任务号前必须加 %
ps-1.: -9是暴力杀死, -15是温柔杀死, 两者的区别在杀死 vim 时较为明显: 若用 -9 杀死, 则会留有 .filename.swp 文件, 下次再进行 vim 时会有修复提示; 而若用 -15 杀死, 则能较好地料理后事, 不会有这种缓存文件存在.
8. Shell 变量
8.1 变量的种类
环境变量:往往以纯大写来命名, bash 的子进程中仍可使用
自定义变量:推荐使用纯小写来命名, 不经过声明, 则在 bash 的子进程中无法使用
注意-1:如果变量值中存在空格,需要用单引号或双引号将变量值括起来
注意-2:如果变量值中有引用其他变量,需要用双引号将变量值括起来
8.4 变量的相关命令
8.4.1 echo:功能:打印变量的内容
8.4.2 export 功能:将变量转换为环境变量
8.4.3 env 功能:查看环境变量
8.4.4 declare
8.5 常用环境变量
- HOME: 当前用户的家目录
- HOSTNAME: 该主机的主机名
- USER: 当前用户的用户名
- SHELL: 当前使用的 shell 类型
- HISTSIZE: 可存储的历史命令条数
- MAIL: 当前用户的邮箱
- PATH: 可执行命令的所在目录
- LANG: 当前语系
- PS1: 命令提示符的格式, 可玩性较高, 但工作中不常用, 可自行 man bash 查看 PS1 的设置方法
- PS2: 输入命令时强制换行后的提示符
- OSTYPE: 当前操作系统类型
- MACHTYPE: 安装的机器类型
- HOSTTYPE: 主机的位数, x86 还是 x86_64
9. 环境变量配置文件
login shell:取得 bash 时需要完整的登录流程。
non-login shell:取得 bash 接口的方法不需要重复登录的举动,如在 bash 环境下,再次执行bash命令进入子 shell 时,不需要输入账号和密码
9.2 /etc/profile (login shell)
- PATH:根据 UID 决定PATH 变量是否要包含 sbin 目录
- USER:根据 id 命令的结果,显示用户名
- LOGNAME:等于 USER
- MAIL:配置好用户的邮箱
- HOSTNAME:根据 hostname 指令,决定该变量值
- HISTSIZE:直接设定历史命令记录的条数为 1000
9.3 ~/.bash_profile (login shell)
根据之前流程图的描述,bash shell 读取完通用配置后,才开始进行用户个性化配置的读取。
其实用户个性化配置的文件不止 ~/.bash_profile 一个,还可能有 ~/.bahs_login 和 ~/.profile
为什么有这么多个性化配置文件呢?主要是为了给从其他种类的 shell 转来使用 bash 的用户提供便利,满足其习惯罢了。
其实 bash 的 login shell 只会读取上述文件中的其中一个, 读取顺序依照上面的排序, 一旦读取到其中一个文件, 就不再继续读取其余文件
9.4 ~/.bashrc (non-login shell)
当通过 non-login shell 取得 bash 后, 仅会读取 ~/.bashrc 文件
/etc/bashrc 会完成以下任务
ps. 如果家目录下没有 .bashrc 文件, 那么你的 bash 提示符可能会变成如下样子
但是没关系, 还记得 /etc 下有个模板目录吗? 就是 /etc/shel/. 把该目录下的 .bashrc 文件复制到家目录即可.