前言
文章里的命令选项只是常用的选项,还有更多的选项可自行去学习。
参考视频:Linux达人养成计划 I
参考网站:菜鸟教程
Linux基础(二)的笔记的地址:Linux基础(二)的笔记
一.Linux简介
1.Linux发展史
20世纪80年代,计算机的操作系统主要有Unix、DOS和MacOS这几种。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.介绍
-
Linux 内核最初只是由芬兰人林纳斯·托瓦兹(Linus Torvalds)在赫尔辛基大学上学时出于个人爱好而编写的。
-
Linux 是一套免费使用和自由传播的类 Unix 操作系统,是一个基于 POSIX 和 UNIX 的多用户、多任务、支持多线程和多 CPU 的操作系统。
-
Linux 能运行主要的 UNIX 工具软件、应用程序和网络协议。它支持 32 位和 64 位硬件。Linux 继承了 Unix 以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统。
3.Linux的版本
- 内核版
- 发行版
4.主要应用领域
- linux企业服务器
- 嵌入式应用
- Android:底层操作系统,Linux
5.Linux与windows的主要区别:
- linux严格区分大小写
- linux一切皆文件
- linux不靠扩展名区分文件类型,靠权限区分
- windows下的程序不能在linux直接安装和运行
- windows软件生态比较丰富
6.字符界面的优势
- 占用系统资源少
- 减少出错和被攻击的可能性
7.如何解决问题
- 先要尝试自己解决
- 帮助
- 文档
- 示例
- 提问的智慧
- 问题详尽
- 贴图
8.开源软件
-
使用的自由:绝大数开源软件免费
-
研究的自由:可获得软件源代码
-
散布及改良自由:可以自由传播,改良甚至销售
二.Linux系统的安装
1.Virtualbox
(1)Virtualbox简介:Virtualbox是一个虚拟PC的软件,可以在现有的操作系统上虚拟出一个新的硬件环境,相当于模拟出一台新的PC,以此来实现在一台机器上真正同时运行两个独立的操作系统。
(2) Virtualbox主要特点:
- 不需要分区或重新开机就能在同一台PC上使用两种以上的操作系统;
- 本机系统可以与虚拟机系统网络通信;
- 可以设定并且修改虚拟机操作系统的硬件环境
(3)建议的Virtualbox配置:
- CUP:建议主频为1GHz以上
- 内存:建议1GB以上
- 硬盘:建议分区空闲空间8GB以上
2.系统分区之分区与格式化
(1) 磁盘分区:磁盘分区使用分区编辑器在磁盘上划分几个逻辑部分。碟片一旦划分成数个分区,不同类型的目录与文件可以存储进不同的分区。
(2)分区的作用:把大硬盘分为小的逻辑分区,方便管理和存储数据,有利于数据的安全,节约查找时间。
(3)分区类型:
- 主分区:最多只能有4个
- 扩展分区:
- 最多只能有1个
- 主分区加扩展分区最多有4个
- 不能写入数据,只能包含逻辑分区
- 逻辑分区(逻辑分区最多23个)
(4) 分区图
注意: 这里的分区是MBR格式分区的。如果只有一个主分区,一个扩展分区,扩展分区下有三个逻辑分区。那么主分区的设备文件名为/dev/sda1,扩展分区的设备文件名为/dev/sda2.而逻辑分区直接是/dev/sda5,也就是说系统默认的设备文件名从/dev/sda1~/dev/sda4是给主分区和扩展分区命名的,而逻辑分区的设备文件名是从/dev/sda5开始的。
一、为什么最多只能4个分区?
1.磁盘的第一个扇区共512字节
2.MBR(主引导分区)共446个字节
3.一个磁盘分区表要占16个字节表示分区,最多共64个字节,就是4个分区
4.剩余2个字节存放结束状态
(5)格式化:
- 格式化(高级格式化)又称逻辑格式化,它是指根据用户选定的文件系统(如FAT16、FAT32等),在磁盘的特定区域写入特定数据,在分区中划出一片用于存放文件分配表、目录表等用于文件管理的磁盘空间
- 作用:是为分区构造操作文件的环境
(6)格式化图
每个分区按照指定大小分成等大的block
做分区列表管理数据
图里的ID号叫node
3.分区之分区设备文件名与挂载
(1)硬件设备文件名:
硬件 | 设备文件名 |
---|---|
IDE硬盘 | /dev/hd[a-d] |
SCSI/SATA/USB硬盘 | /dev/sd[a-p] |
光驱 | /dev/chrom或/dev/hdc |
软盘 | /dev/fd[0-1] |
打印机(25针) | /dev/1p[0-2] |
打印机(USB) | /dev/usb/1p[0-15] |
鼠标 | /dev/mouse |
(2)挂载:
- 必须分区
- /(根分区)
- swap分区(交换分区,内存2倍,不超过2GB)
- 推荐分区
- /boot(启动分区,一般200MB,建议稍大点)
4.系统安装
5.系统启动过程
6.系统目录结构
7.网络配置
三.命令基本格式以及文件处理命令
1.命令的基本格式以及命令提示符
(1)命令一般格式
命令 [选项] [参数]
(2)命令提示符
[root@centos7 ~]#
其中:
root: 当前登录用户
centos7: 主机名
~ 当前所在目录
# 超级用户的提示符,普通用户的提示符是$
2.文件目录命令
(1)查询目录中的内容:ls命令
ls [选项] [文件或目录]
选项:
-a 显示所有文件,包含隐藏文件
-l 显示详细信息
-d 查看目录属性
-h 人性化显示文件大小
-i 显示inode
命令英文全称:list
[root@centos7 ~]# ls -alhi
总用量 68K
33580097 dr-xr-x---. 5 root root 270 6月 13 11:32 .
64 dr-xr-xr-x. 17 root root 224 6月 6 20:24 ..
33580098 -rw-------. 1 root root 1.3K 6月 6 20:24 anaconda-ks.cfg
33580107 -rw-------. 1 root root 23K 6月 12 23:43 .bash_history
33882096 -rw-r--r--. 1 root root 18 12月 29 2013 .bash_logout
33882097 -rw-r--r--. 1 root root 176 12月 29 2013 .bash_profile
33882098 -rw-r--r--. 1 root root 176 12月 29 2013 .bashrc
33882099 -rw-r--r--. 1 root root 100 12月 29 2013 .cshrc
37249540 -rw-r--r-- 1 root root 32 6月 12 17:32 .gitconfig
33623086 -rw-------. 1 root root 69 6月 8 09:31 .mysql_history
17685645 drwxr-----. 3 root root 19 6月 7 20:39 .pki
33895418 -rw------- 1 root root 202 6月 13 10:58 .rediscli_history
33882100 -rw-r--r--. 1 root root 129 12月 29 2013 .tcshrc
37248811 drwxr-xr-x 2 root root 6 6月 13 11:32 test
1837058 drwxr-xr-x 2 root root 22 6月 13 11:12 test2
37248836 lrwxrwxrwx 1 root root 4 6月 13 11:32 test.link -> test
37248839 -rw------- 1 root root 6.7K 6月 13 11:12 .viminfo
-rw-r--r--
-表示文件类型(- 文件 d 目录 l 软连接文件 b 块设备文件 c 字符设备文件 p 管道文件 s:套字节文件)
rw- r-- r--
u拥有者 g所有组 o其他人
r读 w写 x执行
.文件名 代表隐藏文件,也代表ACL权限
(2)建立目录:mkdir命令
mkdir [选项] [目录名]
选项:
-p 递归创建
命令英文全称:make directories
需要创建多级目录时需要加上-p选项
[root@centos7 ~]# mkdir test3
(3)切换所在目录:cd命令
cd [目录]
命令英文全称: change directory
简化操作
cd ~ 进入当前用户的家目录
cd
cd - 进入上次目录
cd .. 进入上一级目录
cd . 进入当前目录
[root@centos7 /]# cd /etc
[root@centos7 etc]#
相对路径:参照当前所在目录进行查找
如:[root@centos7 ~]# cd ../usr/local/src/
绝对路径:从根目录开始指定,一级一级递归查找。在任何目录下都能进入指定位置
如:[root@centos7 /]# cd /etc
(4)查询当前所在目录:pwd命令
pwd
命令英文全称:print working directory
[root@centos7 src]# pwd
/usr/local/src
(5)删除空目录:rmdir命令
rmdir [目录名]
命令英文全称:remove empty directories
这个命令只能删除空目录
[root@centos7 ~]# rmdir test3
(6)删除文件或目录:rm命令
rm [选项] [文件名或目录名]
选项:
-r 删除目录
-f 强制
命令英文全称:remove
删除目录需要加上-r选项
删除目录:
[root@centos7 ~]# rm -rf test2
删除文件:
[root@centos7 ~]# rm -f test.link
(7)复制:cp命令
cp [选项] [原文件或目录] [目标文件或目录]
选项:
-r 复制目录
-p 连带文件属性复制
-d 若原文件是链接文件,则复制链接属性
-a 相当 -pdr
命令英文全称:copy
复制目录:
[root@centos7 ~]# cp -r test test_cp
复制文件:
[root@centos7 ~]# cp anaconda-ks.cfg test.cfg
(8)剪切或改名:mv命令
mv [原文件或目录] [目标文件或目录]
命令英文全称:move
[root@centos7 ~]# mv test.cfg test/
(9)链接:ln命令
ln [选项] [原文件] [目标文件]
选项:
-s 创建软连接
功能描述:生成链接文件
命令英文全称:link
硬链接:
[root@centos7 ~]# ln anaconda-ks.cfg anaconda-ks.link
软连接:
[root@centos7 test]# ln -s test.cfg test.link
一、硬链接特征:
1.拥有相同的节点和存储block块,可以看做是同一文件;
2.可以通过i节点识别
3.不能跨区
4.不能针对目录使用
二、软连接特征:
1.类似windows快捷方式;
2.软连接拥有自己的i节点和block块,但是数据块中只保存原文件的文件名和i节点,并没有实际的文件数据;
3.lrwxrwxrwx l软连接
软连接文件权限都为rwxrwxrwx
4.修改任意文件,另一个都改变;
5.删除原文件,软连接不能使用
硬链接图
软链接图
(10)创建文件命令:touch命令
touch [选项] 文件名
选项:
-a:只修改文件的访问时间;
-c:仅修改文件的时间参数(3 个时间参数都改变),如果文件不存在,则不建立新文件。
-d:后面可以跟欲修订的日期,而不用当前的日期,即把文件的 atime 和 mtime 时间改为指定的时间。
-m:只修改文件的数据修改时间。
-t:命令后面可以跟欲修订的时间,而不用目前的时间,时间书写格式为 YYMMDDhhmm。
[root@jueshadb test]# touch test.txt
[root@jueshadb test]# ll
总用量 16
-rwxr-xr-x 1 root root 1568 6月 27 23:04 1.sh
-rw-r--r-- 1 root root 392 7月 4 13:27 crontab
-rwxr-xr-x 1 root root 93 6月 27 23:02 test.sh
-rw-r--r--. 1 root root 261 7月 6 21:22 test.txt
drwxr-xr-x. 2 root root 39 6月 15 20:58 ziptest
四.文件搜索命令
1.文件搜索命令
(1)文件搜索:locate命令
locate [选项] 文件名
在后台数据库中按照文件名搜索,搜索速度更快
/var/lib/mlocate
#locate命令所搜索的后台数据库
updatedb
更新数据库
Centos 默认没有安装locate命令,需要先安装
yum -y install mlocate
#手动更新
updatedb
[root@centos7 test]# locate test
/etc/updatedb.conf配置文件
PRUNE_BIND_MOUNTS = 'yes'
#开启搜索限制
PRUNEFS =
#搜索时,不搜索的文件系统
PRUNENAMES =
#搜索时,不搜索的文件类型
PRUNEPATHS=
#搜索时,不搜索的路径
(2)搜索命令的命令:whereis命令
whereis [选项] 命令名
#搜索命令所在路径以及帮助文档所在位置
选项:
-b 只查找可执行文件
-m 只查找帮助文件
[root@centos7 test]# whereis mv
mv: /usr/bin/mv /usr/share/man/man1/mv.1.gz
(3)搜索命令的命令:which命令
which 命令名
#搜索命令所在路径及别名
[root@centos7 test]# which mv
alias mv='mv -i'
/usr/bin/mv
(4)find命令
find [搜索范围] [搜索条件]
#搜索文件
find / -name install.log
#避免大范围搜索,会非常耗费系统资源
#find是在系统当中搜索符合条件的文件名,如果需要匹配,使用统配符匹配,通配符是完全匹配
Linux中的通配符
* 匹配任意内容
? 匹配任意一个字符
[] 匹配任意一个括号内的字符
find /root -iname install.log
#不区分大小
find /root -user root
#按所有者搜索
find /root -nouser
#查找没有所有者的文件
find /var/log/ -mtime +10
#查找10天前修改的文件
-10 10天内修改文件
10 10天当天修改的文件 |--- +10 ---|10|--- -10 ---|
+10 10天前修改的文件
atime 文件访问时间
ctime 改变文件属性
mtime 修改文件内容时间
find . -size 25k
#查找文件大小是25KB文件,不写单位的话,是按照块(扇区)
-25k 小于25KB的文件
25k 等于25KB的文件
+25k 大于25KB的文件
find . -inum 266666
#查找I节点是266666的文件
find /etc -size +20k -a -size -20k
#查找/etc/目录下,大于20KB且小于50KB的文件
-a and 逻辑与,两个条件都满足
-o or 逻辑或, 两个条件满足一个即可
find /etc -size +20k -a -size -50k -exec ls -lh {} \;
#查找/etc/目录下,大于20KB且小于50KB的文件,并且显示详细信息
#-exec/-ok 命令 {} \;对搜索结果执行操作
扇区图
(5)搜索字符串命令:grep命令
grep [选项] 字符串 文件名
#在文件当中匹配符合条件的字符串
选项:
-i 忽略大小写
-v 排除指定字符串
[root@centos7 ~]# grep pwpolicy anaconda-ks.cfg
pwpolicy root --minlen=6 --minquality=1 --notstrict --nochanges --notempty
pwpolicy user --minlen=6 --minquality=1 --notstrict --nochanges --emptyok
pwpolicy luks --minlen=6 --minquality=1 --notstrict --nochanges --notempty
(6)find命令与grep命令的区别
- find命令:在系统当中搜索符合条件的文件名,如果需要匹配,使用通配符匹配,匹配符是完全匹配;
- grep命令:在文件当中搜索符合条件的字符串,如果需要匹配,使用正则表达式进行匹配,正则表达式时包含匹配。
五.帮助命令
1.帮助命令
(1)帮助命令:man命令
man 命令
#获取指定命令的帮助
例如:
man ls
#查看ls的帮助
man -f 命令
相当于 whatis 命令
#查看命令拥有那个级别的帮助
man -k 命令
相当于 apropos 命令
#查看和命令相关的所有帮助
man查询命令等级及意义
级别 | 意义 |
---|---|
1 | 查看命令的帮助 |
2 | 查看可被内核调用的函数的帮助 |
3 | 查看函数和函数库的帮助 |
4 | 查看特殊文件的帮助(主要是/dev目录下的文件) |
5 | 查看配置文件的帮助 |
6 | 查看游戏的帮助 |
7 | 查看其它杂项的帮助 |
8 | 查看系统管理员可用命令的帮助 |
9 | 查看和内核相关文件的帮助 |
n | 新文档,可能要移到更适合的领域 |
o | 老文档,可能会在一段期限内保留 |
I | 本地文档,与本特定系统有关 |
(2)选项帮助
命令 --help
#获取命令选项的帮助
例如:
ls --help
(3)shell内部命令帮助:help命令
help shell内部命令
例如:
whereis cd
#确定是否是shell内部命令
help cd
#获取内部命令帮助
(4)详细命令帮助:info命令
info 命令
- 回车: 进入子帮助页面(带有*好标记)
- u: 进入上层页面
- n:进入下一个帮助小节
- p:进入上一个帮助小节
- q:退出
六.压缩命令
1.压缩命令1
(1).zip格式
zip 压缩文件名 源文件
#压缩文件
zip -r 压缩目录 源目录
#压缩目录
unzip 压缩文件
#解压缩zip文件
(2).gz格式
gzip 源文件
#压缩为gz格式的压缩文件,源文件会消失
gzip -c 源文件 > 压缩文件
#压缩为gz格式,源文件保留
例如:gzip -c anaconda-ks.cfg > anaconda-ks.gz
gzip -r 目录
#压缩目录下所有的子文件,但不能压缩目录
gzip -d 压缩文件
#解压缩文件方式一
gunzip 压缩文件
#解压缩文件方式二
(3).bz2格式
bzip2 源文件
#压缩为bz2格式,不保留源文件
bzip2 -k 源文件
#压缩之后保留源文件
注意:bzip2命令不能压缩目录
bzip2 -d 压缩文件
#解压缩,-k保留压缩文件
bunzip2 压缩文件
#解压缩,-k保留压缩文件
2.压缩命令2
(1)打包命令:tar命令
tar -cvf 打包文件名 源文件
选项:
-c: 打包
-v: 显示过程
-f: 指定打包后的文件名
例如:tar -cvf anaconda-ks.tar anaconda-ks.cfg
tar -xvf 打包文件名
选项:
-x: 解打包
例如:tar -cxf anaconda-ks.tar
(2).tar.gz格式
其实.tar.gz格式是先打包为.tar格式,再压缩为.gz格式
tar -zcvf 压缩包名.tar.gz 源文件
选项:
-z: 压缩为.tar.gz格式
tar -zxvf 压缩包名.tar.gz
选项:
-x:解压缩.tar.gz格式
(3).tar.bz2压缩格式
tar -jcvf 压缩包名.tar.bz2 源文件
选项:
-z: 压缩为.tar.bz2格式
tar -jxvf 压缩包名.tar.bz2
选项:
-x: 解压缩为.tar.bz2格式
七.关机与重启命令
1.关机与重启命令
(1)shutdown命令
shutdown [选项] 时间
选项:
-c:取消前一个关机命令
-h:关机
-r:重启
(2)其他关机命令
halt
poweroff
init 0
(3)其他重启命令
reboot
init 6
(4)建议
建议使用shutdown命令来关机和重启,在执行之前先执行sync命令把内存的数据同步到硬盘
(5)系统运行级别
级别 | 作用 |
---|---|
0 | 关机 |
1 | 单用户 |
2 | 不完全多用户,不含NFS服务 |
3 | 完全多用户 |
4 | 未分配 |
5 | 图形界面 |
6 | 重启 |
cat /etc/inittab
#查看系统默认运行级别,inittab在使用systemd时不再使用(centos7)
runlevel
#查询系统运行级别
八.其他常用命令
1.挂载命令
(1)查询与自动挂载
mount
#查询系统中已经挂载的设备
mount -a
#依据配置文件/etc/fstab的内容,自动挂载
配置文件/etc/fstab的内容
[root@centos7 ~]# cat /etc/fstab
#
# /etc/fstab
# Created by anaconda on Sat Jun 6 20:20:18 2020
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
UUID=f56802e0-3277-49e6-ad90-9d6377b80f65 / xfs defaults 0 0
UUID=d1a1cc11-64bc-4188-a78a-3d3fb56af5c9 /boot xfs defaults 0 0
UUID=ba609814-ee9f-4a8d-af5e-542644f87961 swap swap defaults 0 0
#说明:
第一列:可以是实际分区名,也可以是实际分区的卷标(Lable)
第二列:挂载点
第三列:文件系统类型
第四列:挂载的特殊选项
第五列:能否被dump备份命令作用
第六列:fsck磁盘检查设置
(2)挂载命令格式
mount [-t 文件系统] [-o 特殊选项] 设备文件名 挂载点
选项:
-t 文件系统:加入文件系统类型来指定挂载的类型,可以ext3等文件系统
-o 特殊选项:可以指定挂载的额外选项
特殊选项图
特殊选项示例
#重新挂载根目录,并使用noexec权限
[root@centos7 ~]# mount -o remount,noexec /
#由于根分区设置了noexec权限
[root@centos7 ~]# vi hello.sh
-bash: /usr/bin/vi: 权限不够
#注意:慎用这些特殊选项,如果用了记得改回来,不然影响系统启动的
(3)挂载光盘
mkdir /mnt/cdrom/
#建立挂载点
mount -t iso9660 /dev/cdrom /mnt/cdrom/
#挂载光盘方式一
mount /dev/sr0 /mnt/cdrom/
#挂载光盘方式二
#为什么有两种方式挂载,是因为/dev/cdrom是sr0的软连接
[root@centos7 ~]# ll /dev/cdrom
lrwxrwxrwx 1 root root 3 6月 14 11:16 /dev/cdrom -> sr0
(4)卸载命令
umount 设备文件名或挂载点
例如: umount /mnt/cdrom 或 umount /dev/sr0
(5)挂载U盘
fdisk -l
#查看U盘设备文件名
mkdir /mnt/usb/
#建立挂载点
mount -t vfat /dev/sdb1 /mnt/usb/
#挂载
(6)用户退出命令
logout
#退出命令
2.用户登录查看命令
(1)查看登录用户信息
w [选项] 用户名
命令输出:
USER:登录的用户名
TTY:登录终端
FROM:从哪个ip地址登录
LOGIN@:登录时间
IDLE:用户空闲时间
JCPU:指的是和该终端连接的所有进程占用的时间。这个时间里并不包括过去后台作业时间,但却包括当前正在运行的后台作业所占用的时间
PCPU:是指当前进程所占用的时间
WHAT:当前正在运行的命令
who [选项] 用户名
命令输出:
用户名
登录终端
登录时间(登录来源ip地址)
(2)查询当前所有用户的最后一次登录时间
lastlog
#lastlog命令默认是读取/var/log/lastlog文件内容
命令输出:
用户名
登录终端
登录IP
最后一次登录时间
3.文本处理
(1)连接合并文件内容:cat命令
cat [选项] 文件名
选项:
-A, --show-all 等于-vET
-b, --number-nonblank 对非空输出行编号
-e 等于-vE
-E, --show-ends 在每行结束处显示"$"
-n, --number 对输出的所有行编号
-s, --squeeze-blank 不输出多行空行
-t 与-vT 等价
-T, --show-tabs 将跳格字符显示为^I
-u (被忽略)
-v, --show-nonprinting 使用^ 和M- 引用,除了LFD和 TAB 之外
--help 显示此帮助信息并退出
--version 显示版本信息并退出
#查看文件内容
[root@jueshadb test]# cat crontab
* * * * * ping www.baidu.com &>>/dev/null
* 1 * * * ntpdate time.windows.com &>> /dev/null
* hard nofile 65535
* soft nofile 65535
cat: test.txt:输入文件是输出文件
cat: test.txt:输入文件是输出文件
cat: test.txt:输入文件是输出文件
cat: test.txt:输入文件是输出文件
cat: test.txt:输入文件是输出文件
cat: test.t: 没有那个文件或目录
#把crontab文件内容输出到test.txt文件中
[root@jueshadb test]# cat crontab > test.txt
或者
[root@jueshadb test]# cat > test.txt crontab
(2)分屏显示文件内容:more命令
more [选项] 文件名
选项:
-d 显示帮助,而不是响铃
-f 统计逻辑行数而不是屏幕行数
-l 抑制换页(form feed)后的暂停
-p 不滚屏,清屏并显示文本
-c 不滚屏,显示文本并清理行尾
-u 抑制下划线
-s 将多个空行压缩为一行
-NUM 指定每屏显示的行数为 NUM
+NUM 从文件第 NUM 行开始显示
+/STRING 从匹配搜索字符串 STRING 的文件位置开始显示
-V 输出版本信息并退出
常用操作命令
Enter 向下n行,需要定义。默认为1行
Ctrl+F 向下滚动一屏
空格键 向下滚动一屏
Ctrl+B 返回上一屏
= 输出当前行的行号
:f 输出文件名和当前行的行号
V 调用vi编辑器
!命令 调用Shell,并执行命令
q 退出more
[root@jueshadb ~]# more anaconda-ks.cfg
(3)显示文件开头的内容:head命令
head [选项] 文件名
选项:
-q 隐藏文件名
-v 显示文件名
-c<数目> 显示的字节数。
-n<行数> 显示的行数。
[root@jueshadb ~]# head -n 100 anaconda-ks.cfg
(4)查看文件内容:less命令
less [选项] 文件名
选项:
-b <缓冲区大小> 设置缓冲区的大小
-e 当文件显示结束后,自动离开
-f 强迫打开特殊文件,例如外围设备代号、目录和二进制文件
-g 只标志最后搜索的关键词
-i 忽略搜索时的大小写
-m 显示类似more命令的百分比
-N 显示每行的行号
-o <文件名> 将less 输出的内容在指定文件中保存起来
-Q 不使用警告音
-s 显示连续空行为一行
-S 行过长时间将超出部分舍弃
-x <数字> 将"tab"键显示为规定的数字空格
/字符串:向下搜索"字符串"的功能
?字符串:向上搜索"字符串"的功能
n:重复前一个搜索(与 / 或 ? 有关)
N:反向重复前一个搜索(与 / 或 ? 有关)
b 向上翻一页
d 向后翻半页
h 显示帮助界面
Q 退出less 命令
u 向前滚动半页
y 向前滚动一行
空格键 滚动一页
回车键 滚动一行
[pagedown]: 向下翻动一页
[pageup]: 向上翻动一页
[root@jueshadb etc]# less updatedb.conf
less 与 more 类似,但使用 less 可以随意浏览文件,而 more 仅能向前移动,却不能向后移动,而且 less 在查看之前不会加载整个文件
(5)显示文件结尾的内容:tail命令
tail [选项] 文件名
选项:
-f 循环读取
· -q 不显示处理信息
-v 显示详细的处理信息
-c<数目> 显示的字节数
-n<行数> 显示文件的尾部 n 行内容
--pid=PID 与-f合用,表示在进程ID,PID死掉之后结束
-q, --quiet, --silent 从不输出给出文件名的首部
-s, --sleep-interval=S 与-f合用,表示在每次反复的间隔休眠S秒
[root@jueshadb etc]# tail -n 100 inittab
九.Shell基础
1.Shell的概述
(1)Shell的介绍
- Shell是一个命令解释器,它为用户提供了一个向Linux内核发送请求以便运行程序的界面系统级程序,用户可以用Shell来启动、挂起、停止甚至是编写一些程序。
- Shell还是一个功能相当强大的编程语言,易编写,易调试,灵活性较强。Shell是解释执行的脚本语言,在Shell可以直接调用Linux系统命令。
(2)Linux的系统结构
(3)shell的分类
- Bourne Shell:从1979起Unix就开始使用Bourne Shell,Bourne Shell的主文件名为sh
- C Shell:C Shell主要在BSD版的Unix系统中使用,其语法和C语言相类似而得名
- Shell的两种主要语法类型有Bourne和C,这两种语法彼此不兼容。Bourne家族主要包括sh、ksh、psh、zsh;C家族主要包括:csh、tcsh
- Bash:Bash与sh兼容,现在使用的Linux就是使用Bash作为用户的基本Shell
(4)Linux支持的Shell
[root@centos7 ~]# cat /etc/shells
/bin/sh
/bin/bash
/usr/bin/sh
/usr/bin/bash
2.脚本执行方式
(1)echo 输出命令
echo [选项] [输出内容]
选项:
-e:支持反斜线控制的字符转换
控制字符
控制字符 | 作用 |
---|---|
\a | 输出警告 |
\b | 退格键,也就是向左删除键 |
\n | 换行符 |
\r | 回车键 |
\t | 制表符,也就是Tab键 |
\v | 垂直制表符 |
\0nnn | 按照八进制ASCII码表输出字符,其中0为数字零,nnn是三位八进制数 |
\xhh | 按照十六进制ASCII码表输出字符,其中0为数字零,hh是两位十六进制数 |
[root@centos7 ~]# echo -e "\e[1;30m 我是测试\e[0m"
我是测试
#输出颜色
#30m=黑色,31m=红色,32m=绿色,33m=黄色
#34m=蓝色,35m=洋红,36m=青色,37m=白色
(2)第一个脚本
[root@centos7 test]# vim hello.sh
#!/bin/bash
#The first program
echo -e "\e[1;30m我是测试 \e[0m"
注意:‘#‘号代表是注释,但是第一行的#!/bin/bash不是注释,是标称我下面写的内容是linux系统的标准脚本,这句话一定不要省略,请小心。
(2)脚本运行
#第一种:赋予执行权限,直接运行
[root@centos7 test]# chmod 755 hello.sh
[root@centos7 test]# ./hello.sh
#第二种:通过Bash调用执行脚本
[root@centos7 test]# bash hello.sh
3.别名与快捷键
(1)别名
查看与设定别名
alias
#查看系统中所有的命令别名
alias 别名='原命令'
#设定命令别名
别名永久生效与删除别名
vi ~/.bashrc
#写入环境变量配置文件
unalias 别名
#删除别名
命令生效顺序
第一顺位执行用绝对路径或相对路径执行的命令
第二顺位执行别名
第三顺位执行Bash的内部命令
第四顺位执行按照$PATH环境变量定义的目录查找顺序找到的第一个命令
(2)常用快捷键
快捷键 | 作用 |
---|---|
ctrl+c | 强制终止当前命令 |
ctrl+l | 清屏 |
ctrl+a | 光标移动到命令行首 |
ctrl+e | 光标移动到命令行尾 |
ctrl+u | 从光标所在位置删除到行首 |
ctrl+z | 把命令放入后台 |
ctrl+f | 在历史命令中搜索 |
4.历史命令
(1)历史命令:history命令
history [选项] [历史命令保存文件]
选项:
-c:清空历史命令
-w:把缓存中的历史命令写入到历史命令保存文件~./bash_history
#历史命令默认保存1000条,可以在环境变量配置文件/etc/profile中进行修改
(2)历史命令的调用
使用上、下箭头调用以前的历史命令
使用“!n”重复执行第n条历史命令
使用“!!”重复执行上一条历史命令
使用“!字符串”重复执行最后一条以该字符开头的历史命令
5.输出重定向
(1)标准输入输出
设备 | 设备文件名 | 文件描述符 | 类型 |
---|---|---|---|
键盘 | /dev/stdin | 0 | 标准输入 |
显示器 | /dev/stdout | 1 | 标准输出 |
显示器 | /dev/stderr | 2 | 标准错误输出 |
(2)输出重定向
类型 | 符号 | 作用 |
标准输出重定向 | 命令 > 文件 | 以覆盖的方式,把命令的正确输出输出到指定的文件或设备当中 |
命令 >> 文件 | 以追加的方式,把命令的正确输出输出到指定的文件或设备当中 | |
标准错误输出重定向 | 错误命令 2> 文件 | 以覆盖的方式,把命令的错误输出输出到指定的文件或设备当中 |
错误命令 2>> 文件 | 以追加的方式,把命令的错误输出输出到指定的文件或设备当中 | |
正确输出和错误输出同时保存 | 命令 > 文件 2>&1 | 以覆盖的方式,把正确输出和错误输出输出到同一个文件当中 |
命令 >> 文件 2>&1 | 以追加的方式,把正确输出和错误输出输出到同一个文件当中 | |
命令 &> 文件 | 以覆盖的方式,把正确输出和错误输出输出到同一个文件当中 | |
命令 &>> 文件 | 以追加的方式,把正确输出和错误输出输出到同一个文件当中 | |
命令 >> 文件1 2>>文件2 | 把正确的输出追加到文件1中,把错误的输出追加到文件2中 |
(3)输入重定向
wc [选项][文件名]
选项:
-c:统计字节数
-w:统计单词数
-l:统计行数
[root@centos7 ~]# wc -l anaconda-ks.cfg
49 anaconda-ks.cfg
#注意:wc然后enter,按ctrl+d可以结束
[root@centos7 ~]# wc
asdasdsa
sadasda
sadsad
asdsad
asdsad
5 5 38
命令<文件把文件作为命令的输入
命令<<标识符
......
标识符把标识符之间内容作为命令的输入
例如:
# <
[root@centos7 ~]# wc < anaconda-ks.cfg
49 123 1278
#<< 标识符,遇到该标识符才结束
[root@centos7 ~]# wc << wcd
> asdasd
> asdsad
> asdsad
> asdsad
> wcd
4 4 28
6.管道符
(1)多命令顺序执行
多命令 | 格式 | 作用 |
---|---|---|
; | 命令1;命令2 | 多个命令顺序执行,命令之间没有任何逻辑关系 |
&& | 命令1 && 命令2 | 逻辑与 当命令1正确执行,则命令2才会执行 当命令1执行不正确,则命令2不会执行 |
|| | 命令1| | 命令2 | 逻辑或 当命令1执行不正确,则命令2才会执行 当命令1正确执行,则命令2不会执行 |
(2)管道符
命令格式:
命令1 | 命令2
#命令1的正确输出作为命令2的操作对象
[root@centos7 ~]# ps aux |grep nginx
root 955 0.0 0.0 46744 1464 ? Ss 11:46 0:00 nginx: master process /usr/sbin/nginx -c /etc/nginx/nginx.conf
www 961 0.0 0.1 47280 2204 ? S 11:46 0:00 nginx: worker process
www 963 0.0 0.1 47280 2204 ? S 11:46 0:00 nginx: worker process
root 2252 0.0 0.0 112828 976 pts/0 S+ 19:45 0:00 grep --color=auto nginx
7.通配符
(1)通配符
通配符 | 作用 |
---|---|
? | 匹配一个任意字符 |
* | 匹配0个或任意多个任意字符,也就是可以匹配任意内容 |
[] | 匹配中括号中任意一个字符。例如:[abc]代表一定匹配一个字符,或者是a,或者是b,或者是c 。 |
[-] | 匹配中括号中任意一个字符,-代表一个范围。例如[a-z]代表匹配一个小写字母。 |
[^] | 逻辑非,表示匹配不是中括号内的一个字符。例如:[^0-9]代表匹配一个不是数字的字符 |
(2)Bash中其它特殊符号
符号 | 作用 |
---|---|
‘’ | 单引号。在单引号中所有的特殊符号,如“$”和“`”(反引号)都没有特殊含义。 |
“” | 双引号。在双引号中特殊符号都没有特殊含义,但是“$”、“`”和“\”是例外,拥有“调用变量的值”、“引用命令”和“转义符”的特殊含义。 |
`` | 反引号。反引号括起来的内容是系统命令,在Bash中会先执行它。和$()作用一样,不过推荐使用$(),因为反引号非常容易看错 。 |
$() | 和反引号作用一样,用来引用系统命令。 |
# | 在shell脚本中,#开头的行代表注释。 |
$ | 用于调用变量的值,如需要调用变量name的值时,需要用$name的方式得到变量的值 。 |
\ | 转义符,跟在“\”之后的特殊字符号将失去特殊含义,变为普通字符。如$将输出“$”符号,而不当做是变量引用。 |