在linux中,OS是指操作系统,是管理和控制计算机硬件与软件资源的计算机程序,是直接运行在“裸机”上的最基本的系统软件,任何其他软件都必须在操作系统的支持下才能运行。OS存在的原因:单纯的硬件计算机,操作起来效率特别低下,难度特别高。
本教程操作环境:linux7.3系统、Dell G3电脑。
前言: OS(操作系统)的学习是很重要的,这里学习操作系统先从Linux开始。
Linux是指令操作的,距离OS更近,更便于我们掌握OS。学习C++,一般从事后端较多,并且Linux对于想要从事后端是非常重要,LInux很大概率就是工作的OS。
一.OS(操作系统)基本概念
操作系统(Operating System,简称OS)是管理和控制计算机硬件与软件资源的计算机程序,是直接运行在“裸机”上的最基本的系统软件,任何其他软件都必须在操作系统的支持下才能运行。
OS存在的原因:单纯的硬件计算机,操作起来效率特别低下,难度特别高。
OS是一款软件,用来进行对软硬件资源进行管理的软件,管理目的:对上,对下,提高操作效率。
现实生活中的操作系统
-
win7
-
Mac
-
Android
-
iOS
二.Linux常见指令
我们为什么要学习指令呢?
因为所有的操作系统,刚开始的时候都是支持指令操作的,图形化界面是后来才有的,所以指令执行距离OS更近,便于我们更好的掌握OS。
1.ls指令
(1)语法:ls [选项] [目录或文件] (目录或文件不写为当前目录)
(2)功能:对于目录,该命令列出该目录下的所有子目录和文件。
对于文件,将列出文件名及其他信息。
(3)常用选项
① 直接使用ls 只有子目录和文件
② -l 列出文件的详细信息(可以写成ls -l,也可以写成ll )
③ -a 列出目录下的所有文件,包括以 . 开头的隐含文件
以 . 开头的文件我们称为隐藏文件,在任意目录下,都会存在两个隐藏文件
.(当前路径) ..(上级路径)
④ -i 输出文件的i节点的索引信息
⑤ -n 用数字的 UID,GID 代替名称
(4)举例
ls -al
2.pwd指令
(1)语法:pwd
(2)功能:显示用户当前所在目录
Linux的路径分割符是:/(斜杠)
Window的路径分割符是:(反斜杠)
(3)举例
pwd
3.cd指令
我们一般定位某个文件,是通过路径定位的方式,找到文件的。那为什么我们是通过路径的方式定位文件的呢?
Linux的目录结构本质是一颗多叉树(1. 每一个子节点既可以是一个目录(再放目录或者普通文件,递归式的定义),也可以是一个普通文件 2. 这颗多叉树的叶子节点,一定是一个普通文件或者空目录)
因此任何一个节点,可以有多个子节点,但是任何一个子节点,都只有一个父节点。
所以常规的路径定位是具有唯一性的(绝对路径具有唯一性)
除了相对路径,还有绝对路径(相对于当前所处的路径)
如果是日常使用,推荐相对路径 —— 简单
如果是添加配置文件之类,推荐绝对路径 —— 不会出错
(1)语法:cd [目录名]
(2)功能:改变工作目录,将当前工作目录改变到指定的目录下。(进入输入的目录)
(3)常用选项
① cd .. 返回上级目录(.为当前目录,..为上级目录)
② cd 绝对路径
③ cd 相对路径
④ cd – 返回最近访问目录
⑤ cd ~ 进入用户家目录(/home/hb)
(4)举例
cd .. :返回上级目录
cd /home/hb/code :绝对路径
cd ../test :相对路径
cd – :返回最近访问目录
cd ~ :进入用户家目录
4.touch指令
如果我们创建了一个空文件,在磁盘中会占据空间吗?
要占用 文件有属性数据,也是数据
文件 = 文件内容 + 文件属性
我们要学的所有的文件操作无非两类:
①对文件的内容操作
②对文件的属性操作
(1)语法:touch [选项] [文件]
(2)功能:touch命令参数可更改文档或目录的日期时间,包括存取时间和更改时间,或者新建一个不存在的文件,
(3)常用选项
① 直接使用touch 创建一个文件
(4)举例
touch test.c
5.mkdir指令
(1)语法:mkdir [选项] [目录名字]
(2)功能:在当前目录下创建一个目录
(3)常用选项
-p [路径名称] 可以是一个路径名称,此时若路径中的某些目录尚不存在,加上此选项后,系统将自动建立好那些尚不存在的目录,即一次可以建立多个目录
(4)举例
mkdir dir :创建一个目录
mkdir -p dir1/dir2/dir3 :递归建立多个目录
6.rmdir指令 && rm指令
rmdir是一个于mkdir相对于的指令,mkdir是建立目录,而rmdir是删除目录
Ⅰ. rmdir:
(1)语法:rmdir [选项] [目录名字]
(2)功能:删除空目录
(3)常用选项
① -p 当子目录被删除后如果父目录也变成空目录的话,就连带父目录一起删除
(4)举例
rmdir dir
rmdir -p dir
Ⅱ. rm(一般这个用的较多)
(1)语法:rm [选项] [目录名字]
(2)功能:删除文件或目录
(3)常用选项
① 直接使用rm 删除一个文件或目录(文件都可以删除,但只能删除空目录)
② -r 删除目录及其下的所有文件(可以删除非空目录)
③ -f 强制删除文件,即使文件属性为只读(即写保护)
④ -i 删除前逐一询问确认
(4)举例
rm dir :删除目录
rm test :删除文件
rm -r dir :删除目录下所有文件
rm -rf dir :强制删除目录下所有文件
rm -ir dir :删除目录下所有文件时依次询问
* 通配符:匹配当前目录下的任何内容
rm * :删除当前目录下的所有文件(等价于rm ./*)
./ 当前目录:告知系统,要访问的资源在当前目录下,如果省略,部分情况下,默认就是当前目录
7.man指令
(1)语法:man [选项] 命令
(2)功能:man相当于一个联机手册,Linux的命令有很多参数,我们不可能全都记住,这时候就可以使用man来获取帮助。
(3)常用选项
① -k 根据关键字搜索联机帮助
② man man 可以搜索man的相关操作
③ 数字 输入对应的数字,会去查找不同的命令
man手册:
1 是普通的命令
2 是系统调用,如open(通过这个可以很方便的查到如何调用这个函数,以及需要加说明头文件)
3 是库函数,如printf
4 是特殊文件,也就是/dev下的各种设备文件
5 是指文件的格式,比如password,就会说明这个文件中各个字段的函数
6 是给游戏留的,由各个游戏自己定义
7 是附件和一些变量,比如像environ这种全局变量在这里就由有说明
8 是系统管理用的命令,这些命令只能由root使用,如ifconfigman相当于一个联机手册,Linux的命令有很多参数,我们不可能全都记住,这时候就可以使用man来获取帮助。
(4)举例
man 1 ls
man 3 printf
8.cp指令
(1)语法:cp [选项] 源文件或目录 目标文件或目录
(2)功能:复制文件或目录
(3)常用选项
① 直接使用cp 复制一个文件
② -r 递归处理,将指定目录下的文件和子目录一并复制
③ -f 强制复制文件或目录,不论目的文件或目录是否已经存在
④ -i 覆盖之前先询问
(4)举例
cp file.txt file2.txt
cp -r dir1 dir2
cp -rf dir ..
9.mv指令
mv命令是move的缩写,可以用来移动文件或者将文件改名,经常用来备份文件或者目录。
(1)语法:mv [选项] 源文件或目录 目标文件或目录
(2)功能:
根据mv命令中第二个参数类型的不同(是目标文件还是目标目录),mv命令将文件重命名或将其移至一个新的目录中。
①当第二个参数类型是源文件(源目录)时,mv命令完成文件重命名,此时,源文件只能有一个,它将所给的源文件或目录重命名为给定的目标文件名
②当第二个参数类型是已存在的目录名称时,源文件或目录参数可以有多个,mv命令将各参数指定的源文件均移至目标目录中
(3)常用选项
① 直接使用mv 移动或重命名一个文件或目录
② -f 如果目标文件已经存在,不会询问直接覆盖
③ -i 若目标文件已经存在时,会询问是否覆盖
(4)举例
mv file.txt a.txt
mv file.txt ..
mv dir1 dir2 dir
10.cat指令
(1)语法:cat [选项] [文件]
(2)功能:查看目标文件的内容
(3)常用选项
① -n 输出行编号
(4)举例
cat file.txt
cat -n file.txt
除了cat,还有tac,从后往前查看
tac file.txt
重定向:
这里先介绍一个echo,类似于printf,输出信息到显示器上。
例如:echo "hello world"
(1)输出重定向
创建一个文件touch file.txt,然后可以通过echo "hello world" > file.txt,使本来应该写入到显示器的内容,把它写入到文件中(每次都会情况原始文件的内容,进行重新写入)
(2)追加重定向
echo "hello Linux" >> file.txt,类似上面的输出重定向,但是这里是两个>,并且它不会清空原始内容,而是在原始文件的结尾进行新增式的写入
(3)输入重定向
cat < file.txt,输入重定向是把本来应该从键盘文件中读取数据的方式,改成从指定的文件中读取
11.more指令
(1)语法:more [选项] [文件]
(2)功能:功能类似cat,但是可以手动向下翻
(3)常用选项
① -n 输出行编号
② q 退出more
(4)举例
more file.txt
12.less指令
(1)语法:less [选项] 文件
(2)功能:类似cat和more,但是功能更强大,可以向上和向下翻(一般都使用less)
(3)常用选项
① -n 输出行编号
② q 退出less
(4)举例
less file.txt
13.head指令
(1)语法:head [选项] [文件]
(2)功能:显示文件开头(默认显示开头10行)
(3)常用选项
① -n<行数> 想要显示的行数
(4)举例
head -20 file.txt
14.tail指令
(1)语法:rm [选项] [文件]
(2)功能:显示末尾开头(默认显示末尾10行)
(3)常用选项
① -n<行数> 想要显示的行数
(4)举例
tail -20 file.txt
管道:
如果我们想要查看文件的中间部分,比如一个1万行的文本,我们想要查看[5000, 5030]行的信息,我们怎么办呢?
①创建临时文件
通过head -5030 file.txt > temp.txt,先得到一个临时文件,然后在tail -30 temp.txt,我们才能看到[5000, 5030]中的信息了。
比较复杂。
②管道
管道是用来级联多个命令,来完成流水线式的数据处理工作的。(可以传输数据资源)
| 这个就是管道
这么写 head -5030 file.txt | tail -30 就可以通过管道来完成查看了。
15.date指令(时间相关指令)
(1)语法:date [选项] [格式]
(2)功能:指定格式显示时间或者显示时间戳
(3)常用选项
① 在显示上,使用者可以设定想要显示出的格式,格式设定为一个+后接标记,其中常用的标记列表如下:
%H:小时
%M:分钟
%S:秒
%X:相当于%H:%M:%S
%d:日
%m:月份
%Y:年份
%F:相当于%Y-%m-%d
② 时间戳
时间->时间戳 date+%s
时间戳->时间 date -d@时间戳
时间戳是从1970年1月1日开始所经过的秒数,不考虑闰秒
(4)举例
date +%Y-%m-%d_%H:%M:%S
date +%s
16.cal指令
(1)语法:cl [选项] [年份]
(2)功能:显示日历
(3)常用选项
① 直接使用就是当前月份
② -3 显示前一个月,当前月,下一个月的月历
③ -y 显示当前年份的年历
(4)举例
cal -3
cal -y 2020
17.find指令
find命令在目录结构中搜索文件,并执行指定的操作
Linux下find命令提供了相当多的查找条件,功能很强大。由于find具有强大的功能,因次它的选项也很多。
(1)语法:find [查找位置] [选项] [查找]
(2)功能:用于在文件树中查找文件,并作出相应的处理(可能访问磁盘)
(3)常用选项
① -name 按照文件名查找文件
(4)举例
find /usr/include/ -name stdio.h
18.grep指令
(1)语法:grep [选项] 搜寻的字符串 文件
(2)功能:在文件中搜索字符串,将找到的行打印出来(使用正则表达式搜索)
(3)常用选项
① 直接使用grep,打印出带有想要字符串的行
② -i 忽略大小写的不同,将大小写视为相同
③ -n 输出行号
④ -v 反向打印,打印出没有想要搜寻的字符串的那些行
(4)举例
grep 'hello' file.txt
grep -i 'HeLlo' file.txt
grep -iv 'HeLlo' file.txt
19.zip/unzip指令
1.zip:
(1)语法:zip 定义压缩文件名.zip [目录或文件]
(2)功能:将目录或文件压缩成zip格式
(3)常用选项
① 直接使用zip 压缩一个文件
② -r 可压缩一个目录下的所有文件
(4)举例
zip test.zip package
zip -r test.zip tar_package
zip -r test.zip -d tar_package
2.unzip
(1)语法:unzip 压缩文件
(2)功能:解压缩
(3)常用选项
① 直接使用unzip 解压缩
② -d 指定压缩到哪一个路径下
(4)举例
unzip test.zip
unzip test.zip -d /home
20.tar指令
(1)语法:tar [选项] [文件或目录]
(3)常用选项
① -c 建立一个压缩文件
② -z 判断是否具有gzip的属性,是否需要用gzip压缩
③ -f 使用档名,在f之后要立即接档名,不能再加参数
④ -x 解开一个压缩文件
⑤ -t 查看压缩包里面的文件
⑥ -v 压缩的过程中显示文件
⑦ -C 解压到指定目录下
(4)举例
tar czf test.tgz tar_package // 压缩文件
tar xzf test.tgz // 解压缩
tar xzf test.tgz -C /home // 解压缩到指定目录
tar xzvf test.tgz 解压缩过程显示文件
21.bc指令
(1)语法:bc [数字][符号][数字]
(2)功能:计算器
(3)常用选项
① 直接使用bc 计算
(4)举例
bc 1+2
22.uname指令
(1)语法:uname [选项]
(2)功能:用来获取电脑和操作系统的相关信息(可用来显示linux主机所用的操作系统的版本、硬件名称等基本信息)
(3)常用选项
① -r 显示内核版本
② -a 详细输出所有信息,依次为内核名称、主机名、内核版本号、内核版本、硬件名、处理器类型、硬件平台类型、操作系统名称
(4)举例
uname -r
uname -a
23.热键
① Tab:命令自动补齐
② Ctrl+c:终止失控程序
③ Ctrl+d:快速退出账户
④ Ctrl+r:搜索历史命令
24.关机指令
(1)语法:shutdown [选项]
(2)功能:关机
(3)常用选项
① -h 将系统的服务停掉后,立即关机
② -r 在将系统的服务停掉之后就重重新启动
③ -t 在-t后加秒数,表示过多少秒关机
(4)举例
shutdown -h
三.shell命令及运行原理
1.介绍
Linux严格意义上说的是一个操作系统,我们称之为”核心(kernel)“,但是一般用户不能直接使用kernel,而是通过kernel的”外壳“程序,也就是shell,来与kernel沟通。(shell是一种外壳程序)
2.作用
外壳可以保护OS系统,降低操作OS的成本,
shell外壳:传递用户指令,交给OS,OS执行完毕,结果交给shell,shell再交给用户。
从技术角度,Shell的简单定义:命令行解释器包含:
①将使用者的命令翻译给kernel处理
②同时,将核心的处理结果翻译给使用者
Linux中,外壳就是命令行解释器。
Window中,外壳就是图形化界面
在centos 7中常用的命令行解释器(shell),叫做bash
四.Linux权限概念
Linux下有两种用户:①超级用户(root)②普通用户
①超级用户:可以在Linux系统下做任何事情,不受限制
②普通用户:在Linux下做有限的事情
③超级用户的命令提示符是"#",普通用户的命令提示符是"$"
命令:su [用户名]
功能:切换用户
从普通用户切换到root用户,使用su root或su – ,从root用户切换到普通用户user,使用su user
举例:
su - su user