目录
Linux OS和各种发行版的关系
Linux 严格意义来说只是一个 "操作系统内核".一个完整的操作系统 = 操作系统内核 + 配套的应用程序.由于 Linux 是一个完全开源免费的内核, 因此有些公司/开源组织又基于 Linux 内核, 提供了不同的配套程序. 这就构成了不同的 "发行版".
- LinuxOS主要做的OS内核(进程管理,内存管理,网络管理,驱动管理)——只负责造车的发动机
- 各种各样的Linux发行版(基于LinuxOS的基础上的产品),Ubuntu,Redhat,Arch....,比较有名的就是Centos,但是放弃了支持这个,但是国内云厂商继续支持(TencentOS),基本都是再Centos 8.X继续的
- 不同的发行版的Linux,使用(80%)上都是一样的,但是有些是不太一样的
如何使用云服务器
Shell
- Shell就是操作Linux的一个平台/界面/控制台
- SSH协议:Secure Shell 安全版的Shell,会默认启动着一个ssh服务器的,进程名一般叫sshd
- 我们要操作我们的云服务器的话,需要一个ssh的客户端,我们的客户端软件就是Xshell,也可以使用别的客户端
在自己的电脑操作云服务器需要哪些操作
- ssh客户端
- 云服务器的公网IP
- 云服务器的ssh服务器的监听端口——默认是22端口
- 登录系统需要的用户名——root
- 登录系统需要的密码
关于Linux的操作方式
两种操作模式
- 我们的Linux就是基于命令行的操作模式
命令行的参数
- 每个参数之间需要空格,空格的数量无所谓
- 首先类似gcc的是命令名称
- 后面的三个词,其实都被作为三个字符串的形式的参数,传入第一个参数代表的程序中,进行处理
- 如何将空格分割的参数当成一个参数(比如aab ccc),按形式是两个参数,如何变成一个参数呢?可以用“aab ccc”或者'aab ccc'
- Linux中提前写好的很多程序,遵循一些规划,参数在逻辑上被分为选项和输入
命令行的自动补全
- 因为每次输入都很累,所以提供了自动补全功能,使用Tab来进行补全
- 由于w开头的候选命令很多,一次tab不行,需要两次tab,列出所有候选命令,如果候选命令有一个,使用一个tab就行
Linux命令行的复制操作
Linux文件系统简介
1、Linux文件系统与Windows有较大的差别
- 虽然都是使用树形结构组织文件,文件都是分为文件夹和普通文件(文件夹可以作为叶子节点也可以是非叶子节点,普通文件只能是叶子节点)
- Windows的文件结构是多个并列的树状结构,最顶部的是不同的磁盘(分区),如C、D、E、F等
- Linux的文件结构是单个的树状结构,根目录(用"/"表示),其他目录都要位于根目录下,/root是用户专属的目录,一般称为该用户的家目录(home),所有的操作在root下进行
- 在Linux中使用正斜杠(/)而不是反斜杠(\)来划分目录。在Linux中,反斜杠是用来标识转义字符的
2、绝对路径:路径的写法,由根目录/写起
- 例如: /usr/share/doc 这个目录
- 绝对路径总是以正斜杠作为起始的,指明文件系统的根目录
3、相对路径:路径的写法,不是由/写起
- 例如由/usr/share/doc要到/usr/share/man底下时,可以写成:cd ../man这就是相对路径的写法,相对路径表示就是从当前目录开始出发
- .表示当前所在路径,..表示当前所在路径的上一层
4、为了便于定位和查找,Linux中的每个目录一般都存放特定类型的文件,下表列出了各种Linux发行版本的常见目录
bin
是Binary
的缩写,存放着可执行文件或可执行文件的链接(类似快捷方式)与/bin
类似的是/sbin
目录,System Binary 的缩写,这里存放的命令可以对系统配置进行操作。普通用户可能可以使用这里的命令查看某些系统状态,但是如果想更改配置,就需要sudo
授权或者切换成超级用户。- 这里是系统启动需要的文件,你可以看到
grub
文件夹,它是常见的开机引导程序。我们不应该乱动这里的文件。
dev
是device
的缩写,这里存放这所有的设备文件。在 Linux 中,所有东西都是以文件的形式存在的,包括硬件设备。比如说,sda
,sdb
就是我电脑上的两块硬盘,后面的数字是硬盘分区:etc这个目录经常使用,存放很多程序的配置信息,比如包管理工具 apt:
tmp
是temporary
的缩写,存储一些程序的临时文件。
var
是variable
的缩写,这个名字是历史遗留的,现在该目录最主要的作用是存储日志(log)信息,比如说程序崩溃,防火墙检测到异常等等信息都会记录在这里。注:
1、Linux是以树的结构存储文件的。不管你的电脑中有几块硬盘(即便没有),也不管硬盘分了几个区,Linux都会给你整出来个根目录,也就是上图中最顶层的“/”
- 一旦你安装了Linux,它就会在根目录下创建几个文件夹,这些文件夹的名字是“root”、“home”、“dev”等等。路径分别是“/root”、“/home”、“/dev”等
2、众所周知,存储文件需要硬盘。Linux这波操作光搞了个目录,但是与硬盘和分区没有任何关系,那么这些文件夹和之后要写入的文件存在哪里啊?这就引入了Linux下“挂载”的概念
挂载即把一个分区或磁盘放在一个目录里
- 挂载点就是一个特定的目录
- 挂载的本质就是为设备提供一个访问入口,例如将光盘挂载到/mnt/cdrom的话,就可以通过访问/mnt/cdrom这个目录来访问光盘
首先进入Linux我们要知道的就是我是谁,我在哪,我的周围有什么,我是谁
who和whom
- who表示当前登录系统的所有用户
- whoami 我们是以哪个用户登录上了的
ls命令
1、作用:列出目标目录中所有的子目录和文件
- 如果ls指定其他目录,那么就会显示指定目录下的文件和目录,也就是知道我的周围有什么的功能
- 通过ls命令不仅可以查看linux文件夹包含的文件而且可以查看文件权限(包括目录、文件夹、文件权限)、查看目录信息等等
2、命令格式:ls [选项] [目录名]
3、常用参数:
- -a 列出目录下的所有文件,包括以 . 开头的隐含文件。
- -d 将目录象文件一样显示,而不是显示其下的文件。 如:ls –d 指定目录
- -k 以 k 字节的形式表示文件的大小。ls –alk 指定文件
- -l 列出文件的详细信息。
- -r 对目录反向排序。
- -t 以时间排序。
- -R 列出所有子目录下的文件。(递归)
- 可以写成 ls -la,等价于 ls -l -a
注:
- 默认情况下,ls命令会输出目录下所有非隐藏文件,有时候这个输出会很多。因此可以使用过滤器来决定输出那些文件信息
⑴这个过滤器就是一个简单文本匹配的字符串
2、ls命令能够识别标准通配符,可以在过滤器中用它们进行模式匹配
- 问号(?):代表一个字符,代表任意位置的单个字符
- 星号(*):代表零个或多个字符
3、ls -l命令的输出跟ll命令的输出是一样的(ll是ls -l的别名)
4、在操作文件或目录时可以直接使用文件名或目录名、也可以使用绝对路径+文件名或目录名
- 直接使用目录名或文件名的话:需要保证文件或目录在当前工作目录下
- 使用绝对路径则没有要求
pwd命令
1、命令功能:查看当前工作目录的完整路径
2、命令格式:pwd [选项]
3、常用参数:一般情况下不带任何参数
- 如果目录是链接时:pwd -P显示出实际路径,而非使用连接(link)路径
cd命令
- 1、作用:切换当前目录至指定目录
- 2、命令格式:cd [目录名]
- 3 路径可以是绝对路径也可以是相对路径
- 4 ..表示父目录,.表示当前目录
注意
- 1、未切换目录时显示的是波浪号(~):表示当前位于主目录中(为用户目录,不是根目录)
- 2、当前用户主目录和系统根目录是两个不同的概念
- 3 cd-表示返回上一次的目录
touch命令
- 语法:touch [选项]… 文件…
- 功能:1如果一个文件不存在,创建一个新文件(普通文件),文件内容是空的 2如果一个文件存在,修改这个文件的last modified(上一次的修改时间/最后修改时间)
常用选项:
- -a 或–time=atime或–time=access或–time=use只更改存取时间。
- -c 或–no-create 不建立任何文档。
- -d 使用指定的日期时间,而非现在的时间。
- -f 此参数将忽略不予处理,仅负责解决BSD版本touch指令的兼容性问题。
- -m 或–time=mtime或–time=modify 只更改变动时间。
- -r 把指定文档或目录的日期时间,统统设成和参考文档或目录的日期时间相同。
- -t 使用指定的日期时间,而非现在的时间
cat命令
1、作用:cat主要有三大功能
- 一次显示整个文件:cat filename
- 从键盘创建一个文件:cat > filename只能创建新文件,不能编辑已有文件
- 将几个文件合并为一个文件:cat file1 file2 > file
2、命令格式:cat [选项] [文件]...
3、命令参数:
- -n:对输出的所有行编号,由1开始对所有输出的行数编号
- -b:对非空输出行编号
- -s 不输出多行空行
4、cat命令是一次性显示整个文件内容(不能编辑),一般用于查看不会实时变更的文件内容
而tail命令一般用于查看会实时变更的文件内容,如日志文件等
mkdir命令
- 语法:mkdir [选项] dirname…
- 功能:在当前目录下创建一个名为 “dirname”的目录
常用选项:
- -p, --parents 可以是一个路径名称。此时若路径中的某些目录尚不存在,加上此选项后,系统将自动建立 好那些尚不存在的目录,即一次可以建立多个目录;
rm命令
1、作用:删除一个目录中的一个或多个文件或目录
如果没有使用-r选项,则rm不会删除目录。如果使用rm来删除文件,通常仍可以将该文件恢复原状
2、命令格式:rm [选项] 文件1 文件2...
3、命令参数:
- -f 即使文件属性为只读(即写保护),亦直接删除
- -i 删除前逐一询问确认(交互式)
- -r 删除目录及其下所有文件
rm是一个危险的命令,使用的时候要特别当心,否则整个系统就会毁在这个命令。比如在/(根目录)下执行rm -rf *
- 所以,我们在执行rm之前最好先确认一下在哪个目录,到底要删除什么东西,操作时保持高度清醒的头脑
5、 删除目录下的一类文件:find 目录 -name "*.类型" | xargs rm -f
- 通过find命令,查找指定目录下的某一类型的文件。并通过管道传递给xargs,执行后面的rm -f命令
- 例如:find . -name "*.txt" |xargs rm -rfv 。命令中的'.'表示当前目录下
- rm -r *和rm ./*是删除当前目录下的所有文件。*是通配符。
mv命令
- mv命令是move的缩写,可以用来移动文件或者将文件改名(move (rename) files),是Linux系统下常用的命 令,经常用来备份文件或者目录。
语法: mv [选项] 源文件或目录 目标文件或目录
功能:
- 视mv命令中第二个参数类型的不同(是目标文件还是目标目录),mv命令将文件重命名或将其移至一个新的目录中(相当于WIn中的剪切功能)。
- 当第二个参数类型是文件时,mv命令完成文件重命名,此时,源文件只能有一个(也可以是源目录名),它将所给的源文件或目录重命名为给定的目标文件名。 (相当于Win中的重命名)
- 当第二个参数是已存在的目录名称时,源文件或目录参数可以有多个,mv命令将各参数指定的源文件均移至 目标目录中。
常用选项:
- -f :force 强制的意思,如果目标文件已经存在,不会询问而直接覆盖
- -i :若目标文件 (destination) 已经存在时,就会询问是否覆盖!
4、移动一个文件或目录时,指令最后一个参数肯定是一个路径;而重命名时,指令最后一个参数就不是路径了,而应该是一个文件名或目录名
cp命令
- 语法:cp [选项] 源文件或目录 目标文件或目录
- 功能: 复制文件或目录(类似Win中的复制粘贴功能)
- cp/mv 关于询问,不是询问要不要复制/移动,而是询问是否覆盖原有的文件
常用选项:
- -f 或 --force 强行复制文件或目录, 不论目的文件或目录是否已经存在
- -i 或 --interactive 覆盖文件之前先询问用户
- -r 递归处理,将指定目录下的文件与子目录一并处理。若源文件或目录的形态,不属于目录或符号链接,则一律视为普通文件处理
- R 或 --recursive递归处理,将指定目录下的文件及子目录一并处理
man命令
- Linux的命令有很多参数,我们不可能全记住,我们可以通过查看联机手册获取帮助。访问Linux手册页的命令是
- man 语法: man [选项] 命令
常用选项:
- -k 根据关键字搜索联机帮助
- -num 只在第num章节找
- -a 将所有章节的都显示出来,比如 man printf 它缺省从第一章开始搜索,知道就停止,用a选项,当按 下q退出,他会继续往后面搜索,直到所有章节都搜索完毕。
解释一下,面手册分为8章
- 1 是普通的命令
- 2 是系统调用,是由操作系统提供的,如open,write之类的(通过这个,至少可以很方便的查到调用这个函数,需要加什么头文 件)
- 3 是库函数,一般都是与C如printf,fread注意:这个库函数手册是需要安装的,命令如下:(root下执行)yum install -y man-pages1
- 4 是特殊文件,也就是/dev下的各种设备文件
- 5 是指文件的格式,比如passwd, 就会说明这个文件中各个字段的含义
- 6 是给游戏留的,由各个游戏自己定义
- 7 是附件还有一些变量,比如向environ这种全局变量在这里就有说明
- 8 是系统管理用的命令,这些命令只能由root使用,如ifconfig
more命令
- 语法:more [选项][文件]
- 功能:more命令,功能类似 cat
常用选项:
- -n 对输出的所有行编号
- q 退出more
注意:在使用more的过程中,只能使用回车键进行向下查看,同时也可以使用/内容来搜索并查看相关的内容。
less命令
- less 工具也是对文件或其它输出进行分页显示的工具,应该说是linux正统查看文件内容的工具,功能极其强大。
- less 的用法比起 more 更加的有弹性。在 more 的时候,我们并没有办法向前面翻, 只能往后面看
- 但若使用了 less 时,就可以使用 [pageup][pagedown] 等按键的功能来往前往后翻看文件,更容易用来查看一个文件的内容!
- 除此之外,在 less 里头可以拥有更多的搜索功能,不止可以向下搜,也可以向上搜。
语法: less [参数] 文件
功能: less与more类似,但使用less可以随意浏览文件,而more仅能向前移动,却不能向后移动,而且less在查看之前 不会加载整个文件。
选项:
- -i 忽略搜索时的大小写
- -N 显示每行的行号 /字符串:向下搜索“字符串”的功能
- ?字符串:向上搜索“字符串”的功能
- n:重复前一个搜索(与 / 或 ? 有关)
- N:反向重复前一个搜索(与 / 或 ? 有关)
- q:quit
head命令
- head 与 tail 就像它的名字一样的浅显易懂,它是用来显示开头或结尾某个数量的文字区块,head 用来显示档案的 开头至标准输出中,而 tail 想当然尔就是看档案的结尾。
语法: head [参数]… [文件]…
功能: head 用来显示档案的开头至标准输出中,默认head命令打印其相应文件的开头10行。
选项:
- -n<行数> 显示的行数
tail命令
- tail 命令从指定点开始将文件写到标准输出.使用tail命令的-f选项可以方便的查阅正在改变的日志文件,tail - f filename会把filename里最尾部的内容显示在屏幕上,并且不断刷新,使你看到最新的文件内容.
语法: tail[必要参数][选择参数][文件]
功能: 用于显示指定文件末尾内容,不指定文件时,作为输入信息进行处理。常用查看日志文件。
选项:
- -f 循环读取
- -n<行数> 显示行数
进程之间通信的方式
- 1信号量
- 2管道
- 3信号
- 4共享内存
- 5文件
- 6网络
- Linux中使用|来表示使用管道
举几个例子
获得一个文件的8 9 10行
- 先获得有编号的所有内容,然后获得前10行,在获得前十行中的后三行
获得前20行中含有name的行
用来查看日志
统计日志中有多少个请求
Get有多少个
访问/name的请求有多少个
统计不同的URL的访问次数是多少
统计不同的方法请求的个数
重定向
输出重定向
- 语法:> 文件
- 功能:本来应该写入到显示器的内容,修改进程的标准输出
特征:
- 会清空原始文件的内容,进行重新写入。
- 如果文件不存在,就会自动创建文件并写入
追加输出重定向
- 语法:>> 文件
- 功能:将本来应该写入到显示器的内容,把它追加到文件的后面
特征:
- 不会清空原始文件中的内容,会在原来文件内容的末尾进行追加
- 如果文件不存在,就会自动创建
输入重定向
语法:< 文件功能:把本来应该i从键盘文件中读取数据的方式,修改进程的标准输入
grep指令
语法: grep [选项] 搜寻字符串文件
功能: 在文件中搜索字符串,将找到的行打印出来
常用选项:
- -i :忽略大小写的不同,所以大小写视为相同
- -n :顺便输出行号
- -v :反向选择,亦即显示出没有 ‘搜寻字符串’ 内容的那一行
find指令
- Linux下find命令在目录结构中搜索文件,并执行指定的操作。
- Linux下find命令提供了相当多的查找条件,功能很强大。由于find具有强大的功能,所以它的选项也很 多,其中大部分选项都值得我们花时间来了解一下。
在运行一个非常消耗资源的find命令时,很多人都倾向于把它放在后台执行,因为遍历一个大的文件系 统可能会花费很长的时间(这里是指30G字节以上的文件系统)
语法: find pathname -options功能: 用于在文件树种查找文件,并作出相应的处理(可能访问磁盘)
ps
- 语法:ps [参数]...
- 功能:用于查看当前系统上运行的进程 ps -aux ps -elf
选项:
- a 显示一个终端的所有进程
- u 以用户为主的格式来显示程序状况
- x 显示所有程序,不以终端机来区分
举例:
netstat
- 语法:netstat [参数]...
- 功能:查看系统上的网络状态.
选项:
- -a 显示所有正在或不在侦听的套接字
- -n 显示数字形式地址而不是去解析主机、端口或用户名
- -p 显示套接字所属进程的PID和名称
举例:
free
- 查看内存用了多少