概述
简介
- Linux是现在服务器上最常用的操作系统(OS - Operating system) - 所谓的操作系统本质上也是一个软件,是一个可以运行其他软件的容器
- 如果一台服务器,没有安装操作系统,此时称之为裸机。裸机可以使用,在使用的时候需要使用机器语言或者汇编语言;为了提高可读性,采用了操作系统,可以才能使用通用的编程语言操作
- 经常使用的操作系统:Windows、Linux、Unix、Harmony、Mac、Android、IOS等
- Linux官网:www.linux.org
- Linux之父:Linus(林纳斯),还开发了Git - 名言:
Talk is cheap, show me your code!
发展历程
- 1970年左右,贝尔实验室(曾经是全球最顶级的实验室之一,曾经也是在通信领域最顶级的实验室)在肯.汤普森(Unix之父)的主导和带领下,试图开发一套分时操作系统Unix,Unix是利用B语言开发的 - Unix也是众多分时操作系统的鼻祖
- 由于B语言无法直接解释为机器码,所以导致Unix的效率一直不高。后来,肯.汤普森和丹尼斯.里奇改进了B语言 - new B语言,改名为了C语言,利用新的语言重新设计了Unix系统,大大的提升了操作系统的执行效率。到此,Unix正式面世
- 各大公司,纷纷针对Unix系统进行了改进和适配,都产生了各自公司的Unix系统(Unix和硬件的耦合度非常高):IBM-AIX、HP-UX等
- 荷兰阿姆斯特丹大学的教授xxx(《计算机网络》的一书的作者)为了教学安排,仿照Unix设计了一个拥有教学的操作系统MINIX(mini unix)。由于MINIX系统是用于教学操作,本身存在非常多的问题
- Linus在上大学期间,学习MINIX系统的时候,产生了非常浓厚的兴趣,试图解决MINIX系统存在的问题(打补丁),打补丁的过程中,发现代码量已经超过了一万行,到此,Linus决定放弃MINIX,试图开发独立的操作系统 - 1991年6月份
- 同年9月份,Linux系统面世 - Linux0.01版本
- 1991年底,Linus将Linux系统公布并开源,此后各个机构和组织都针对Linux进行了不同程度的开发,也因此Linux系统是20世纪最伟大的发明之一
发行版
- Red Hat系列(红帽系列 - 红帽认证)
- RHEL(Red Hat Enterprise Linux):Red Hat公司(2018年被IBM收购)推出的开源的收费版的Linux系统,也是目前最稳定的Linux系统,收费不菲,不面向个人用户
- Fedora:Fedora社区维持,红帽公司赞助的免费版本。红帽公司将最新版的系统发布到Fedora上,免费公开给用户使用,每6个月进行一次强制更新
- CentOS:Centos社区维持,将RHEL中的付费部分去掉,剩余的部分开源,就是Centos系统。Centos已经被红帽收购,也因此Centos前后发生了较大的变化:Centos8作为分水岭,CentOS8及以前的版本更新稳定,Centos8以后的版本更名为Centos Steam,也是每6个月已更新,可以认为Centos Stream是另一个版本的Fedora
- Rockey Linux(岩石系列):其实就是原来的Centos,开源、免费、稳定
- Debian系列
- Debian:Debian社区维护,开源、免费。分为稳定版、不稳定版和测试版
- Ubuntu:以桌面应用为主的Linux系统,相对其他的Linux系统,Ubuntu提供了更友好的界面操作
- 国产Linux
- Deepin(深度):基于Debian开发,提供个人版和企业版,提供了较多的应用,并且兼容安卓应用
- KylinOS(麒麟):国防科技大学基于Ubuntu研发,更多的应用于军工领域
- UOS(统信):以Deepin系统为基础做的二次开发,跟为个人版、家庭版、企业版和专业版,更多的应用于政府领域
- SUSE系统
- SLES:德国SUSE公司开发的商用版Linux系统,也号称是最华丽的Linux系统,银行领域偏多
- Open SUSE:类似于RHEL和Centos的关系
目录结构
-
在Linux中,一切皆文件
-
在Linux中,根路径是
/
。路径分为绝对路径和相对路径- 绝对路径:以根路径为起始路径,例如:
/var/lib/log
- 相对路径:不以根路径为起始路径,例如
tmp
,lib/log
.
:当前路径。lib/log
和./lib/log
表示当前路径下的lib目录下有一个log..
:上一层路径。../lib
表示返回上一层目录,然后在上一层中寻找lib。
- 实际开发中,相对路径使用偏多
- 绝对路径:以根路径为起始路径,例如:
-
目录结构
- bin:binary的缩写,存放的是Linux常用的指令
- boot:Linux用于存放系统引导文件
- dev:device的缩写,用于管理Linux的设备文件
- etc:存放系统环境配置和环境变量,不同于Windows,Linux中环境变量也是在文件中配置
- home:其他用户的家路径。Linux本身是一个多用户操作系统,允许创建多个用户,其中超级用户是root,除此之外的其他用户的根路径都是在home下。例如创建了一个tom用户,那么此时就会产生一个
/home/tom
用于存放tom用户的数据 - lib和lib64:library的缩写,存放的是Linux的系统文件
- media:临时挂在外在媒介
- root:root用户的数据目录
- tmp:临时目录,系统运行产生的缓存和日志都是在tmp目录下,当系统磁盘空间不足时,会自动清理tmp目录下的文件,所以自己的文件一定不能放在tmp下!
- var:软件运行产生的日志数据会存在这个路径下
- opt:operation的缩写,Linux系统提供的,希望用户在此进行操作的目录
vi和vim
-
vi
是Linux提供的用于编辑文件的命令,但是没有格式和高亮显示 -
vim
的功能和vi
一致,只是提供了高亮显示 -
需要注意:Linux中默认内置了
vi
命令,vim
需要安装 -
安装
vim
yum -y install vim
-
存在三种模式:一般模式、编辑模式和指令模式
-
当
vi
或者vim
一个文件的时候,默认进入一般模式,在这种模式下,无法对数据进行修改或者插入 -
如果需要对数据进行修改或者插入,那么进入编辑模式
-
案例
-
编辑文件
# 切换到opt下 cd /opt # 创建空文件 # 命令格式:touch 文件名 touch a # 编辑文件 # 命令格式:vim 文件名 # 或者:vi 文件名 vim a
-
进入编辑模式:按
i, I, o, O, a, A, r, R, Insert
-
退出编辑模式:按
esc
,默认进入的是一般模式 -
进入命令模式:输入
:
参数 解释 w write的缩写,表示写入/保存 q quit的缩写,表示退出 ! 表示强制执行
-
-
一般模式操作
操作 解释 yy 复制当前一行数据 p 粘贴数据 y数字y 例如y3y,表示复制3行 dd 删除一行 d数字d 例如d3d,表示删除3行 u 撤销上一步 x 向后删除一个字母,等价于del X 向前删除一个字母,等价于Backspace yw 复制一个单词 dw 删除一个单词 shift+$ 挪到行尾 shift+^ 挪到行首 shift+g 挪到页尾 数字+shift+g 挪到指定行,例如3+shift+g。如果需要挪到页头,那么就是1+shift+g -
命令模式操作
参数 解释 :set nu 显示行号 :set nonu 关闭行号 /单词 或者 ?单词 查找单词 1. n向下寻找 2. N向上寻找 :noh 关闭高亮
常用命令
帮助命令
-
man
:获取帮助信息# 命令格式 man 命令/配置文件 # 获取cd命令的帮助信息 man cd
字段 解释 NAME 命令的名称和单行描述 BASH BUILTID COMMANDS 命令之后可以添加的参数 -
help
:获得shell内置命令的帮助信息# 命令 help 命令 # 获得cd命令的帮助信息 help cd
-
whatis
:确定这个命令是干什么的# 命令格式 whatis 命令
目录文件类
-
pwd
:print working directory,查看当前所在的绝对路径 -
ls
:list(列出)的缩写ls [参数] [路径]
-
案例
# 查看当前路径下所有的文件和目录 ls # ls 路径 # 表示查看指定路径下所有的子文件和子目录,不包含隐藏文件 # 在Linux中,.开头的文件是隐藏文件,默认不被ls发现 ls /var # ls -a [路径] # -a是all的缩写,表示所有,因此这个命令表示查看指定路径下的所有子文件和子目录,包含隐藏文件 ls -a ls -a /root # ls -l [路径] # -l是list的缩写,ls -l表示列出指定路径下所有子文件和子目录的详细信息 ls -l /var # drwxr-xr-x. 2 root root 19 Feb 27 00:28 account # 文件类型和权限 链接数 所有者 所有者所在的用户组 文件大小,单位是字节 文件的修改日期 文件名 # -开头表示这是个文件,d开头表示这是个目录,l开头表示这是个软链接(可以理解为Windows中的快捷方式) # ls -l可以缩写为ll
-
权限解释
文件 目录 r - read 可以被读取 可以查看这个目录下的子文件和子目录 w - write 可以被修改 对这个目录下的子目录和子文件进行创建、删除、重命名、复制操作 x 可执行,只要这个文件能被打开、能被修改等,就算是可以被执行 这个目录可以被打开 -
在Linux中,一个文件能否被看到,由它的父目录的权限决定
-
权限每三位一组,决定用户、用户组和其他用户的权限
-
-
cd
:change directory,切换目录cd [参数] 路径 # 回到上一层目录 cd .. # 回到上一次所在的路径 cd - # 回到当前用户所在的用户数据目录 # 如果当前是tom用户,对应的数据目录就是/home/tom # 如果当前是root用户,对应的数据目录就是/root cd ~
-
mkdir
:make directory,创建目录# 创建空目录 mkdir test # -p:表示创建多层目录 mkdir -p bigdata/a2312
-
rmdir
:remove directory,只能删除空目录rmdir bigdata/a2312/
-
rm
:remove,移除文件/目录# 删除a文件 rm a # -r,recursive(递归)的缩写,递归删除 mkdir a rm -r a # -f,force(强制)的缩写 mkdir -p test/bigdata/a2312 rm -rf test/bigdata/a2312 # -v,verbose,显示删除的详细过程 mkdir -p test/bigdata/a2312 rm -rfv test/bigdata/a2312
温馨提示:在Linux中慎重删除文件/目录,因为Linux没有回收站!!!删除就无法恢复!!!
-
touch
:创建空文件 -
cp
:copy的缩写,复制文件或者目录# 格式 cp [参数] 原文件 目的地 # 复制文件 cp /root/original-ks.cfg /opt # 在复制文件的时候,如果发现目的地中有同名文件,会询问是否覆盖 # 复制的时候修改文件名 cp /root/original-ks.cfg /opt/test.cfg # 复制的时候,如果有同名文件,就强制覆盖 \cp /root/original-ks.cfg /opt # cp如果要复制目录,要求是空目录 # -r,表示递归复制。如果目录非空,需要使用-r cp -r /var/log ./
-
mv
:move的缩写,剪切或者重命名文件/目录# 重命名 mv test.cfg a.cfg # 剪切 mv a.cfg /root # 剪切并重命名 mv /root/a.cfg /opt/b.cfg
-
head
:查看文件头部的内容,默认是10行数据# 查看头部数据,默认10行 head test # 查看指定行数 head -n 3 test
-
tail
:查看文件尾部的内容,默认是10行数据# 查看尾部数据,默认10行 tail test # 查看指定行数 tail -n 3 test
-
cat
:查看文件的所有的数据# 查看文件所有的数据 cat test # 查看数据的时候显示行号 cat -n test
-
more
:分屏查看# 分屏查看 more /var/log/boot.log # 回车表示查看下一行 # 空格或者Ctrl+F表示查看下一页 # Ctrl+B表示回滚一页 # =表示查看当前是第几行 # :f表示查看的是哪一个文件,查看的是第几行 # q表示退出
-
less
:分屏查看# 分屏查看 less /var/log/boot.log # 空格或者pagedown表示查看下一页 # pageup表示查看上一页 # /单词 或者 ?单词 要搜索这个单词,n表示查找下一个,N表示查找上一个 # q表示退出
-
more和less的区别:
- less的功能会更加强大:less支持搜索,more不支持
- more是先将整个文件读取出来,然后再进行分屏,因此会占用更大的内存空间;less根据屏幕来进行分屏读取,也就意味着如果结束查看,未查看到部分数据不读取。也就意味着,读取大文件更适合于用less
-
ln
:建立软链接# 命令格式 ln -s [源文件] [目的地] # 建立软链接 # 将/var/log目录链接到/opt下 ln -s /var/log /opt cd log # 进入的/opt/log # 删除软链接 mkdir test ln -s test a rm -rf a # 删除软链接,但是不删除源目录/文件 rm -rf a/ # 命令无效 # 进入软链接对应的实际路径 cd -P log # 此时进入的是/var/log
echo
-
echo
是Linux提供的用于输出的命令,类似于Java中的printecho a echo 'a' echo "a"
-
在Linux中,数据默认就是字符串!
echo 2+3 # 输出就是2+3
-
需要使用转义字符
echo "hello\tworld" # 打印hello\tworld echo -e "hello\tworld" # 打印hello world
>和>>
-
>表示覆盖写入;>>表示追加写入
-
案例
# 将打印结果覆盖到a.txt中 echo "abc" > a.txt # 将打印结果追加到a.txt中 echo "def" >> a.txt
-
监控指定文件(a.txt),如果文件中追加了新数据,能自动发现并打印这个数据
tail -f a.txt
-
合并两个文件
cat a.txt >> b.cfg
复习:转义字符、编码
-
转义字符:键盘上部分键的效果无法直接体现,所以才采用转义字符来表示
字符 解释 \t table的缩写,制表符,补齐字节,用于对齐!!!默认Windows中是4个字节,Linux是8个字节 \r return的缩写,回车符,现在使用的较少,Linux不支持 \n newLine的缩写,换行符 \f 分页符 -
编码:将字符按照指定规则映射成数字,这个过程就叫编码,记录映射过程的表格称之为编码表
- ASCII(阿斯克码表):不完全码表,1个字符占用1个字节
- ISO-8859-1(西欧码表):一共有256个字符,1个字符占用1个字节
- GB2312(国标码,后来扩展成了GBK):1个字符占用2个字节,收录的是大部分的简体汉字和少部分的繁体汉字,GBK在大陆内范围通用,港澳台不适用
- Unicode编码体系:规定了一系列码表,UTF-8,UTF-16,UTF-32等。常用的是UTF-8,规定1个字符占用3个字节。UTF-8中收录的是常见语言的基本字符
| newLine的缩写,换行符 |
| \f | 分页符 |
-
编码:将字符按照指定规则映射成数字,这个过程就叫编码,记录映射过程的表格称之为编码表
- ASCII(阿斯克码表):不完全码表,1个字符占用1个字节
- ISO-8859-1(西欧码表):一共有256个字符,1个字符占用1个字节
- GB2312(国标码,后来扩展成了GBK):1个字符占用2个字节,收录的是大部分的简体汉字和少部分的繁体汉字,GBK在大陆内范围通用,港澳台不适用
- Unicode编码体系:规定了一系列码表,UTF-8,UTF-16,UTF-32等。常用的是UTF-8,规定1个字符占用3个字节。UTF-8中收录的是常见语言的基本字符
- 所有码表的前256位一模一样 - 英文在所有字符集/码表中都只占用1个字节!