• Linxu学习——上


    目录

    前言引入

    Linux OS和各种发行版的关系

     如何使用云服务器​编辑

    Shell

    关于Linux的操作方式

    命令行的参数

     Linux命令行的复制操作​编辑

    Linux文件系统简介

    具体的命令

    who和whom

    ls命令

    pwd命令

    cd命令

    touch命令

    cat命令

    mkdir命令

    rm命令

    mv命令

    cp命令

    man命令

    more命令

    less命令

     head命令

    tail命令

    Linux管道

    重定向

    grep指令

    find指令

     ps

    netstat

    free


    前言引入

    Linux OS和各种发行版的关系

    Linux 严格意义来说只是一个 "操作系统内核".一个完整的操作系统 = 操作系统内核 + 配套的应用程序.由于 Linux 是一个完全开源免费的内核, 因此有些公司/开源组织又基于 Linux 内核, 提供了不同的配套程序. 这就构成了不同的 "发行版".
     

    • LinuxOS主要做的OS内核(进程管理,内存管理,网络管理,驱动管理)——只负责造车的发动机image-20220520185445070
    • 各种各样的Linux发行版(基于LinuxOS的基础上的产品),Ubuntu,Redhat,Arch....,比较有名的就是Centos,但是放弃了支持这个,但是国内云厂商继续支持(TencentOS),基本都是再Centos 8.X继续的
    • 不同的发行版的Linux,使用(80%)上都是一样的,但是有些是不太一样的

     如何使用云服务器

    Shell

    • Shell就是操作Linux的一个平台/界面/控制台
    • SSH协议:Secure Shell 安全版的Shell,会默认启动着一个ssh服务器的,进程名一般叫sshd 
    • 我们要操作我们的云服务器的话,需要一个ssh的客户端,我们的客户端软件就是Xshell,也可以使用别的客户端

    在自己的电脑操作云服务器需要哪些操作

    1. ssh客户端
    2. 云服务器的公网IP
    3. 云服务器的ssh服务器的监听端口——默认是22端口
    4. 登录系统需要的用户名——root
    5. 登录系统需要的密码

    关于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 中,所有东西都是以文件的形式存在的,包括硬件设备。比如说,sdasdb 就是我电脑上的两块硬盘,后面的数字是硬盘分区:

    • 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<行数> 显示行数

    Linux管道

     进程之间通信的方式

    • 1信号量
    • 2管道
    • 3信号
    • 4共享内存
    • 5文件
    • 6网络

    image-20220527175739266

    •  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

    • 查看内存用了多少
  • 相关阅读:
    JAVA猎才学员成长心得分享
    NSSCTF做题(5)
    1、k8s问题pod从service中剔除
    常见的数值转换函数
    JavaWeb JavaScript
    Linux之Shell编程快速上手
    MTK SOC timing
    使用 Sa-Token 完成踢人下线功能
    vue-element-admin 集成框架设置中文语言
    如何在 .NET Core WebApi 中处理 MultipartFormDataContent 中的文件
  • 原文地址:https://blog.csdn.net/qq_50985215/article/details/126742251