• Re-Learn Linux Part1


    1. Linux的目录结构

    在Linux文件系统中有两个特殊的目录:

    • 一个用户所在的工作目录,也叫当前目录,可以使用一个点 . 来表示
    • 另一个是当前目录的上一级目录,也叫父目录,可以使用两个点 .. 来表示

         . :代表当前的目录,也可以使用 ./ 来表示;
        .. :代表上一层目录,也可以 ../来代表

    • 如果一个目录或文件名以一个点 . 开始,表示这个目录或文件是一个隐藏目录或文件(如:.bashrc)。即以默认方式查找时,不显示该目录或文件。 

    • bin (binaries)存放的是二进制的可执行文件
    • sbin (super user binaries)存放二进制可执行文件,只有root才能访问
    • etc (etcetera)存放系统配置文件
    • usr (unix shared resources)用于存放共享的系统资源,系统应用程序,软件的默认安装目录
    • home 存放用户文件的根目录,每个用户在该目录下都有一个与用户名同名的目录
    • root 超级用户目录
    • dev (devices) 用于存放系统中所有的设备文件
    • lib (library)存放跟文件系统中的程序运行所需要的共享库及内核模块
    • mnt (mount)系统管理员安装临时文件系统的安装点{挂载}
    • boot存放用于系统引导时使用的各种文件
    • tmp (temporary)用于存放各种临时文件
    • var (variable)用于存放运行时需要改变数据的文件
    开发人员关注目录:
    • 配置目录etc:软件安装后配置文件选择放入的地址。
    • 软件安装目录:usr/local
    • 安装应用程序目录:opt,部署的API程序一般放在这个目录。部署的API放入用户的目录:/home/用户名

    注意:Linux系统的文件系统是以斜杠“/” - [根目录]开始,不是windows中的盘符概念。

    小知识:
    • Linux的目录中有且只有一个根目录/;
    • Linux的各个目录存放的内容是规划好的,不用乱放文件;
    • Linux是以文件的形式管理我们的设备,因此Linux系统,一切皆文件;
    • Linux的各个文件目录下存放什么内容,大家必须有一个认识;
    • 你的脑海里应该有一颗Linux的目录树。
    • Linux是一套类Unix的操作系统。

    2. Linux的用户

    • Linux系统是一个多用户多任务的分时操作系统,任何一个要使用系统资源的用户,都必须首先向系统管理员申请一个账号,然后以这个账号的身份进入系统。
    • 用户的账号一方面可以帮助系统管理员对使用系统的用户进行跟踪,并控制他们对系统资源的访问;另一方面也可以帮助用户组织文件,并为用户提供安全性保护。
    • 每个用户账号都拥有一个唯一的用户名和各自的口令(指的就是密码)
    • 用户在登录时键入正确的用户名和口令后,就能够进入系统和自己的主目录

    2.1 用户账号

    用户账户一般非为两大类:超级管理员普通用户

    •     超级管理员:用root表示,root用户在系统中拥有最高权限
    •     普通用户:除了root之外的用户。例如我们之前创建的gch用户,就是普通用户。   

    在真实的企业开发当中,我们很少使用root用户的权限,我们一般都是普通用户。 

    2.2 查看用户信息

    #语法 cat /etc/passwd

      - root:用户名
          - x :密码 :已经加密 ,密码存放在  [vi/vim] /etc/shadow   密码文件
          - 0 :账号id ,userId
          - 0 : 组id ,group id 

    我们一般自定义的用户,id都在1000及以上。 

    2.2 添加用户 / 创建一个用户

    • 我们来创建一个用户:useradd  用户名  
    • 只有Root用户或者具有Root权限的用户才可以!、
    • 创建用户后会在/home目录下创建同名目录。

    # 创建一个用户
        #语法:useradd 选项 用户名
            #选项:

             -c comment 表示指定一段注释性描述
             -d 目录 指定用户主目录,如果此目录不存在,则同时使用-m选项,可以创建主录。
             -g 用户组 指定用户所属的用户组。
             -G 用户组,用户组 指定用户所属的附加组。
             -s Shell文件 指定用户的登录Shell。
            -u 用户号 指定用户的用户号,如果同时有-o选项,则可以重复使用其他用户的标识号。

    • 由于我们在企业开发当中一般都是普通用户,因此这些可选选项我们不用过多关注!

          #案例1:
          useradd lina02  

    • Linux命令行的特征:只要命令没有错误,回车后就直接进行到下一行,它提示的一般都是错误信息! 

    进入到密码文件当中来看看,输入:[vi / vim]  /ect/shadow

    退出vi编辑器,输入:q,接着按回车即可! 

    2.3 删除一个用户

    # 删除一个用户
        #语法:userdel 选项 用户名    其中 -r 是常用的选项,表示将用户的主目录一起删除
        #案例:
            userdel -r lina02 

    2.4 用户口令/密码的管理

    用户口令的管理其实就是用户密码的管理用户账号刚创建时没有口令,但是被系统锁定,无法使用,必须为其指定口令后才可以使用,即使是指定空口令。

    指定和修改用户口令的命令是passwd

    超级用户 - root可以为自己和其他用户指定口令普通用户只能用它修改自己的口令。

    # 用户口令的管理
        #语法:passwd 选项 用户名
        可使用的选项:
            -l 锁定口令,即禁用账号
            -u 口令解锁
            -d 使账号无口令
            -f 强迫用户下次登录时修改口令。 

    如果默认用户名,则修改当前用户的口令

    • 例如,切换到用户lina,则下面的命令修改该用户自己的口令:

    PS:Linux操作系统中密码部分不予显示,所以看起来是空白的,实际已经输入了密码。

    • 普通用户修改自己的口令时,passwd命令会要求先输入原口令,验证后再要求用户输入两遍新口令,如果两次输入的口令一致,则将这个口令指定给用户 

    如果是超级用户,可以用下列形式指定任何用户的口令:  

    • 超级用户为用户指定口令时,就不需要知道原口令。  

    为了系统安全起见,用户应该选择比较复杂的口令,例如最好使用8位长的口令口令中包含有大写、小写字母和数字,并且应该与姓名、生日等不相同。  

    PS:如果当前用户正在被使用,则无法删除! 

    2.5 切换用户 

    语法:su [-] [用户名] 

    •  - 表示切换用户后加载环境变量,建议带上
    • 用户名可以省略,省略默认切换到root用户
    • 使用普通用户切换到其它用户,需要输入密码,比如切换到root用户
    • 使用root用户切换到其它用户,无需密码,可以直接切换
    • root用户即超级管理员用户,拥有最大权限
    • 切换用户后,可以通过exit命令退回到上一个用户,也可以使用快捷键:Ctrl + D

    3. Linux的常用命令-重要

    3.1 Linux目录管理

    Linux的目录结构为树状结构,最顶级的目录为根目录 /

    其他目录通过挂载可以将它们添加到树中通过解除挂载可以移除它们

    绝对路径与相对路径:
    • 绝对路径:由根目录 / 写起,例如: /usr/share/doc 这个目录。
    • 相对路径:不是由根目录 / 写起,例如由 /usr/share/doc(本身已经就在doc目录下) 要到 /usr/share/man 底下时,可以写成: cd ../man 这就是相对路径的写法

    3.1.1 查看目录

    Linux系统当中, ls 命令可能是最常被运行的

    ls语法:

    •     ls :查看当前路径下的文件名称
    •     ls -a :全部的文件,连同隐藏文件( 开头为 . 的文件) 一起列出来(常用)
    •     ls -d :仅列出目录本身,而不是列出目录内的文件数据(常用)
    •     ls -l :以列表的形式展示内容,长数据串列出,包含文件的属性与权限等等数据;          (常用)
    •     ll: 等价于ls -l
    •     ls -al :目录下的所有文件列出来(含属性与隐藏档) 

    补充:ls --help:查看帮助文档! 

    3.1.2 切换目录

    cd是Change Directory的缩写,这是用来变换工作目录的命令。  

    语法:
        cd [相对路径或绝对路径] 

    如果不写参数。直接输入cd命令,则默认切换到当前登陆用户的HOME目录

    HOME目录

    每一个用户在Linux系统中都有自己的专属工作目录,称之为HOME目录:

    • 普通用户的HOME目录,默认在:/home/用户名
    • root用户的HOME目录,在:/root
    • ~,表示当前登陆用户的HOME目录,比如cd ~,即可切回用户的HOME目录
    1. #使用绝对路径切换到 local 目录
    2. cd /usr/local/
    3. # 表示回到自己的家目录,亦即是 /root 这个目录
    4. cd ~
    5. # 表示去到目前的上一级目录,亦即是 /root 的上一级目录的意思;
    6. cd ..

    PS:/root <==> ~ 

    3.1.3 显示当前目录

    pwd Print Working Directory 的缩写,也就是显示目前所在目录的命令。  

    语法:pwd 

    3.1.4 创建目录  

    mkdir (make directory)用来创建新的目录。  

    语法:mkdir [-mp] 目录名称
            -m :配置文件的权限喔!直接配置,不需要看默认权限的脸色
            -p :直接将所需要的目录(包含上一级目录)递归创建起来!

    • 查看帮助 mkdir --help 

    示例:/tmp底下尝试创建新目录看看:

    • cd /tmp
    • mkdir lina    <==创建一名为 lina 的新目录

    mkdir test1/test2/test3/test4
        mkdir: cannot create directory `test1/test2/test3/test4': 
        No such file or directory       <== 没办法直接创建此目录啊!
    mkdir -p test1/test2/test3/test4

    加了这个 -p 的选项,可以自行帮你创建多层目录!   

    3.1.5 删除空目录

    rmdir 命令用来删除空的目录

    语法: rmdir [-p] 目录名称

    •         -p :连同上一级『空的』目录也一起删除 

    3.2 文件操作

    3.2.1 查看文件内容

    3.2.1.1 cat 查看所有内容
    • 语法:cat  Linux路径/文件路径
    • cat是直接将内容全部显示出来,由第一行开始显示全部文件内容 

    语法:tac 文件路径   
    • 反着列出文件内容 

    tail -f:监控日志文件 

    tali命令查看文件尾部内容,语法:tail -f  -num  文件路径 
    • 默认查看10行
    • 选项-f,表示可以持续跟踪文件尾部的最新更改变化,一般用来监控日志文件

    • 选项-num,表示查看文件尾部多少行,不填默认查看10行。Ctrl + C中断
    head命令列出文件头几行
    • 语法:head [-num] 文件路径
    • 不写选项num,默认显示10行

    find命令 - 用于查找指定的文件

    • 按文件名查找:find  起始路径  -name "被查找的文件名"      支持*通配符
    • 按文件大小来查找:find 起始路径 -size +/-Num k,M,G

    wc命令做文件的行数-l、单词数量-w统计

    • 语法:wc [-c -m -l -w]  文件路径
    3.2.1.2 more 一页一页的显示文件内容
    • 语法:more Linux路径/文件路径
    • 例如:more /etc/man_db.config 
    • ....(中间省略)....
    • --More--(28%)  <== 重点在这一行喔!你的光标也会在这里等待你的命令

    在 more 这个程序的运行过程中,你有几个按键可以按的:

    • 在查看的过程中,通过空格(Space)翻页,通过q退出查看
    • 通过Enter代表向下翻一行,通过:f代表立刻显示出文件路径以及目前显示的行数

    more命令同样可以查看文件内容,同cat命令不同的是:

    • cat命令是直接将全部内容显示出来
    • more命令支持翻页,如果文件内容过多,可以一页一页的展示文件内容

    例子:Linux系统内容比较多的文件:/etc/man_db.conf       /etc/services 

    3.2.1.3 less 一页一页翻动
    • 语法: less 文件路径
    • 例如:less /etc/man_db.conf

        ....(中间省略)....
        :   <== 这里可以等待你输入命令!
        
    less运行时可以输入的命令有:

    •     空格Space键    :向下翻动一页;
    •     [pagedown]:向下翻动一页;
    •     [pageup]  :向上翻动一页;
    •     q         :离开 less 这个程序;

    3.2.2 创建文件

    • 语法:touch  xxx.txt
    • 通过touch命令创建一个空白的普通文件 

    3.2.3 写入内容

    • 可以使用echo命令在命令行输出指定内容,语法:echo "输出的内容"
    • echo `pwd`:被反引号/飘号`包围的内容,将会被作为命令去执行,而不是作为普通的字符

    echo配置重定向符使用:两个特殊符号,重定向符:>和>> 

    • >将左侧命令的结果覆盖写入到符号右侧指定的文件中
    • >>将左侧命令的结果追加写入到符号右侧指定的文件中 

    • echo 把内容重定向到指定的文件中 ,有则打开,无则创建 

    3.2.4 复制/拷贝文件 / 文件夹

    • 语法: cp [-adfilprsu] 参数1 - 来源档(source)  参数2 - 目标档(destination) 

    • -r选项,表示用于复制文件夹使用,表示递归!
    • 并且复制文件夹,必须使用-r选项,递归复制,否则不会生效! 

    3.2.5 移动文件或文件夹

    语法:mv 参数1-源文件  参数2-目标文件

    • mv 命令可以移动文件或文件夹(目录),移动后源文件就没有了,因为源文件已经移动到了目标文件当中了。

    举例:移动myself文件夹到NewMyself文件夹中  

    如果目标文件不存在,则还起到改名的效果,移动源文件后还要进行源文件的改名,修改源文件的名称并移动到目标文件。

    如果目标文件存在,则会询问你是否要覆盖目标文件的内容:

    • 输入n则不覆盖也不移动,输入y则确定覆盖目标文件的内容且移动! 

    如果不想询问,可以:mv  -f  参数1  参数2,强制覆盖,但这种方式不推荐!

    3.2.6 删除文件或文件夹 

    语法: rm [-fir] 文件或目录1.....文件或目录N
            -f :
    就是 force 的意思,强制删除,忽略不存在的文件,不会出现警告信息
            -i :互动模式,在删除前会询问使用者是否动作
            -r :递归删除啊!最常用在目录(文件夹)的删除了!这是非常危险的选项!!!

    删除文件夹必须加-r选项,表示递归!

    rm命令来自英文单词:remove 

    如果不想让提示,直接rm -rf /文件路径:

    3.3 打包与拆包  压缩和解压缩

    • 先打包再压缩    先拆包再解压缩

    为了便于传输或节省存储空间,有时候文件是以压缩包的形式存在,因此就需要了解压缩与解压缩相关的命令。

    • 打包就是指将一大堆文件或目录什么的变成一个总的文件。
    • 压缩是指将一个大的文件通过一些压缩算法变成一个小的文件。
    • 在Linux中打包和压缩是两个过程

    一般Linux 上常用的压缩方式是选用 tar打包命令 将多个文件打包成一个文件再以 gzip压缩命令压缩成xxx.tar.gz(或者xxx.tgz)的文件
      
     常用参数:        

    •         -c:打包,创建一个新tar文件
    •         -v:显示运行过程的信息
    •         -f:指定要操作的文件名
    •         -z:调用gzip 压缩命令进行压缩或解压缩
    •         -t:查看压缩文件的内容
    •         -x:解包/拆包,解开tar 文件
    •         -C:解压文件至指定的目录,如果是解压到当前目录,可以不加-C

    打包:tar -cvf  + xxx.tar + 要打包的文件或目录的列表,用空格隔开

    打包并且压缩为指定文件:tar + -zcvf + xxx.tar.gz + 要打包的文件或目录的列表,用空格隔开

    拆包指定文件到指定位置:tar  + -xvf + xx.tar + -C + /📂路径

    解压指定文件到指定位置:tar + -zxvf + /xx.tar.gz + -C + /📂路径 

    • 注意-C大写,防止拆包解压缩的路径找不到

    PS:如果在Linux命令行不小心输错命令,可以使用Ctrl + C组合键来中断当前命令的执行!  

    3.3.1 grep命令

    语法:grep [-n] "关键字" 文件路径

    作用:通过grep命令,从文件中通过关键字的过滤找出匹配的行并输出! 

    • 选项 -n,可选,表示在结果中显示匹配的行的行号

    3.3.2 管道符
    • 一个新的特殊的管道符:| 
    • 管道符的含义是:将管道符左边命令的结果,作为右边命令的输入。
    • 只要能产生内容输出的命令,都能跟管道符做配合。

    3.4 Linux进程管理

    • 程序运行在操作系统中,是被操作系统所管理的。
    • 为管理运行的程序,每一个程序在运行的时候,便被操作系统注册为系统中的一个:进程,并会为每一个进程都分配一个独有的:进程ID(进程号) 

    任务都以进程或线程的形式存在,因此需要随时关注系统的进程,查看是否有异常进程以及各进程占用系统资源的情况并使用不同的进程管理命令对进程管理和控制。 

    3.4.1 Linux进程管理 - 查看进程快照

    1. ps

    功能描述:查看系统中所有进程

    参数:

    • -e:表示显示所有进程,包括其它用户的进程
    • -f:全格式,表示以完整的格式显示进程信息,包括进程的状态,PID(进程ID),PPID(父进程ID),父进程指的就是被启动的程序是由哪个程序所启动的?%CPU(CPU使用率)
    • -a:表示显示所有终端运行的进程,包括当前用户和其它用户的进程。
    • -u:表示以用户为基础显示进程信息,显示用户级别的详细信息
    • -x:表示显示没有终端的进程,也就是守护进程(Daemon)

    ps -ef:列出全部进程的全部信息 

    ps :ps  -axu  <==> ps -ef  都是显示全部进程,显示当前进程的快照  

    • 只是进程显示范围不同,ps -ef默认只显示与当前终端相关的进程(比如登录用户的终端),而ps -axu则会显示所有运行终端运行的进程,包括守护进程和其它用户的进程。

    UID表示启动进程的用户是谁! 

    每一项含义
    USER所属用户,进程是由哪个用户产生的
    PID进程ID / 进程号
    %CPUCPU使用率,该进程占用CPU的百分比,占用越高,进程越耗费资源
    %MEM内存使用率,该进程占用内存的百分比,占用越高,进程越耗费资源
    VSZ占用虚拟内存的大小,单位KB
    RSS占用实际物理内存的大小,单位KB
    TTY终端设备,标识启动此进程的终端序号,如果显示为?,表示非终端启动,表示该进程在哪个终端中运行,tty1-tty7代表本地控制台终端(tty1-tty6是本地的字符界面终端,tty7是图形终端),pts/0-255代表虚拟终端
    STAT进程状态,常用状态有:R(运行)、S(睡眠)、T(停止状态)、s(包含子进程)、+(位于后台)
    START / STIME进程启动时间
    TIME进程累计使用CPU的运算时间,进程执行时间,即占用cpu的运算时间,不是系统时间
    COMMAND / CMD产生此进程的命令名或启动路径或进程对应的名称

    ps  -ef  |   grep   关键字   :过滤指定关键字进程信息 

    查看Java进程:ps - axu | grep java

    查看MySQL进程 ps - axu | grep mysql

    终止进程:语法:kill 【-9】进程ID/号
    • 选项:-9,表示强制关闭进程。
    • 不使用此选项会向进程发送信号要求其关闭,但是否关闭看进程自身的处理机制。

    动态监控进程top - 系统资源监控top命令

    • 通过top命令查看监视系统的实时进程以及CPU、内存等使用情况,类似Windows的任务管理器 
    • 默认每隔2秒刷新一次显示内容语法:直接输入top即可,按q或Ctrl + C退出 

    top与ps最大的不同:top可以动态的更新正在运行的进程 

    • us表示用户自己启动的进程占用了多少CPU
    • sy表示系统启动的进程占用了多少CPU
    • PR:表示进程的优先级,越小越高
    • NI:负值表示高优先级,正表示低优先级
    • RES:进程使用物理内存,单位KB
    • %CPU:进程占用CPU率     
    • %MEM:进程占用内存率

    4. VIM文本编辑器-重要

    4.1 VIM的模式

    vim 共分为三种模式,分别是命令模式(Command mode)输入模式(Insert mode)底线命令模式(Last line mode)

    vim 是 vi 的加强版本,兼容 vi 的所有指令!

    如果需要通过vi / vim编辑器编辑文件,请通过如下命令:

    • vi / vim 文件路径

    PS:如果文件路径表示的文件不存在,那么此时会创建一个新的文件供编辑使用;如果文件路径表示的文件存在,那么就直接编辑已有文件。 

    4.1.1命令模式:

    用户刚刚启动 vi/vim,便进入了命令模式。

    此状态下敲击键盘动作会被Vim识别为命令,而非输入字符

    • 比如我们此时按下i,并不会输入一个字符,i被当作了一个命令。

    以下是常用的几个命令:

    •     i 切换到输入模式以输入字符
    •     x 删除当前光标所在处的字符
    •     : 冒号切换到底线命令模式,以在最底一行输入命令。

    若想要编辑文本:启动Vim,进入了命令模式,按下i,切换到输入模式
    命令模式只有一些最基本的命令,因此仍要依靠底线命令模式输入更多命令。

    4.1.2 输入模式 - -- INSERT --

    在命令模式下按下i就进入了输入模式

       在输入模式中,可以使用以下按键:

    1.    字符按键以及Shift组合,输入字符
    2.     ENTER,回车键,换行
    3.     BACK SPACE,退格键,删除光标前一个字符
    4.     DEL,删除键,删除光标后一个字符
    5.     方向键,在文本中移动光标
    6.     HOME/END,移动光标到行首/行尾
    7.     Page Up/Page Down,上/下翻页
    8.     Insert,切换光标为输入/替换模式,光标将变成竖线/下划线
    9.     ESC,退出输入模式,切换到命令模式 

    4.1.3 底线命令模式

    在命令模式下按下:(英文冒号)就进入了底线命令模式。  

    底线命令模式可以输入单个或多个字符的命令,可用的命令非常多。
    在底线命令模式中,基本的命令有(已经省略了冒号):

    •     w - write保存文件
    •     q  - quit退出vim编辑器
    •     wq 保存文件并退出vim编辑器,哪怕 / 即使文件内容没有发生修改,也会强制更新文件的修改时间!
    • :x    也是保存文件并退出Vim编辑器,当且仅当文件被修改时才更新文件的修改时间!

    推荐使用:x,因为使用:wq会强制更新文件的修改时间,让整个项目误认为文件被修改过了,然后就得重新编译链接生成可执行文件,这可能会产生让人误解的后果,当热也产生了不必要的系统资源花销!

    •     :q! 强制退出 /  不保存退出

    按ESC键可随时退出底线命令模式。 

    命令模式: 

    输入模式: 

    5. Linux的文件权限

    • 用户:UserID   用户组:GroupID 

    Linux操作系统中对权限的管理很严格。Linux系统中不仅是对用户与组根据UID,GID进行了管理,还对Linux系统中的文件,按照用户与组进行分类,针对不同的群体进行了权限管理,用它来确定谁能通过何种方式对文件和目录进行访问和操作。  

    • Linux下文件的权限类型一般包括【读,写,执行】对应字母为 r、w、x

    ullet Linux下权限的粒度有【拥有者/当前用户 、用户组 、其它组】三种,类似于你自己你的好朋友陌生人这三种;每个文件都可以针对三个粒度,设置不同的rwx(读写执行)权限

    • 通常情况下,一个文件只能归属于一个用户和组, 如果其它的用户想有这个文件的权限,则可以将该用户加入具备权限的群组,一个用户可以同时归属于多个组
    • Linux上通常使用chmod命令对文件的权限进行设置和更改

    5.1文件权限

    1. Linux文件一共有三种身份:

    • u:文件的拥有者(user)
    • g:文件所属的群组(group)
    • o:其他用户(other)

    2. 对于每个身份,又有四种权限:

    • r:读取文件的权限(read)
    • w:写入文件的权限(write)
    • x:执行的权限(execute)
    • s:特殊权限(special) 

    权限共有10个字符,我们将它分为4大部分来理解:
    -  ---  ---  ---      总共四部分
    第1部分,第一个字符:表示文件的类型

    •     -  表示是一个文件
    •     d 表示是一个目录
    •      l link,表示是一个连接(理解为快捷方式)

    第2部分,第2,3,4个字符:当前用户具有的对该文件的权限(user 属主,缩写u,文件的拥有者)
    第3部分,第5,6,7个字符:当前组内其他用户具有的对该文件的权限 (group 属组,缩写g)
    第4部分,第8,9,10个字符:其他组的用户具有的对该文件的权限 (other 其他,缩写o)

    •     r:Read 读
    •     w:Write 写
    •     x:eXecute 执行
    •      -:就表示啥都没有

    PS:针对目录才加执行权限,文件不加执行权限(因文件具备执行权限有安全隐患)      

    对于文件和目录来说,r,w,x有着不同的作用和含义:

    针对文件:

    • r:读取文件内容 
    • w:修改文件内容 
    • x:执行权限对除二进制程序以外的文件没什么意义

     针对目录:目录本质可看做是存放文件列表、节点号等内容的文件

    • r: 查看目录下的文件列表 
    • w:删除和创建目录下的文件 
    • x:可以cd进入目录,能查看目录中文件的详细属性,能访问目录下文件内容(基础权限)

    PS:root用户虽然不受文件权限的读写限制,但是root用户仍然受到可执行权限的限制!!!

    以数字形式表示权限:

    • 读取权限:r 或者4
    • 写入权限:w或者2
    • 执行权限:x或者1
    • 可读写可执行:rwx = 4 + 2 + 1 = 7
    • 可读写不可执行:rw- = 4 + 2 = 6
    • 可读不可写可执行:r-x = 4 +1 = 5

    常见权限形式

    • -rw------- (600) 只有拥有者有读写权限。

    • -rw-r--r-- (644) 只有拥有者有读写权限;而属组用户和其他用户只有读权限。

    • -rwx------ (700) 只有拥有者有读、写、执行权限。

    • -rwxr-xr-x (755) 拥有者有读、写、执行权限;而属组用户和其他用户只有读、执行权限。

    • -rwx--x--x (711) 拥有者有读、写、执行权限;而属组用户和其他用户只有执行权限。

    • -rw-rw-rw- (666) 所有用户都有文件读、写权限。

    • -rwxrwxrwx (777) 所有用户都有读、写、执行权限。

    用户获取文件权限的顺序:

    • 先看是否为所有者,如果是,则后面权限不看;
    • 再看是否为所属组,如果是,则后面权限不看。  

    5.2 修改文件权限

    chown  是change owner的意思,主要作用就是修改/改变文件或者目录的拥有者User,即用户.

    • 语法:chown + 选项 + 用户/所有者/拥有者user + :用户组/群体的使用者group+ 要修改的文件或目录
    • -R处理指定目录以及其子目录下的所有文件

    chown  修改文件和文件夹的用户和用户组属性,使用权限为root 

    当前前目录下的所有文件与子目录的所有文件的拥有者设为 itnanls,群体的使用者 ydl: 

    • chown -R itnanls:ydl *

    将Vim.txt的拥有者设置为gch:

    5.3 chmod以字符形式修改文件权限 

    • chmod  修改文件和文件夹读写执行属性

    语法:chmod who opt per file

    • who - 要修改的是谁:user group others all(User用户Group用户组Others其它用户All所有用户)
    • operation - 权限操作意图:+ 添加某个权限         – 取消某个权限            = 赋予权限
    • permission - 权限:r-可读    w-可写    x-可执行  
    • File:指定要操作的是哪个文件 

    5.4 chmod以数字形式改变文件权限  

    语法:chmod XXX file

    • rwx         rw-           r--    
    • 421        420          400
    •  7             6              4  
    •  X            X              X

    0无权限;x = 1表示可执行权限;w = 2表示可写权限;r = 4表可读权限

    6. Linux常用网络操作

    6.1 主机名操作(类似于Windows中的设备名称)

    查看/显示主机名:hostname 

    6.2 查询系统完整信息

    • uname - 显示操作系统名称

    • 查询/显示完整的系统信息:uname -a   用于显示当前系统的内核信息和操作系统版本

    6.3 IP地址操作

    • 每一台联网的电脑都会有一个IP地址,用于和其它计算机进行通讯!

    查看虚拟机的IP地址:ip addr    /   ifconfig

    由于VMware默认的网络模式是NAT地址转换模式,使用NAT连接方式,DHCP服务器会动态/自动分配IP地址,即每次重启设备后都会获取一次,可能导致IP地址频繁变更,导致IP地址有可能会发生变化,这样一来我们每次使用远程工具连接时都要查询IP地址,因此我们可以直接给虚拟机绑定一个静态IP。 

    修改IP地址:进入/etc/sysconfig/network-scripts/,Vim编辑器进入修改ifcfg-ensxx:

    两个特殊的IP:
    • 127.0.0.1  这个IP地址用于表示本机
    • 0.0.0.0 可以用于表示本机,也可以表示允许任意IP访问

    域名解析

    • 域名解析:将域名转换为IP地址
    • 在计算机系统里面,我们的IP地址是它的唯一的地址的标记。

    IP地址实在是难以记忆,有没有什么办法可以通过主机名或替代的字符地址去代替数字化的IP地址呢?

    • 实际上,我们一直都是通过字符化的地址去访问服务器,很少指定IP地址
    • 比如,我们在浏览器内打开:www.baidu.com,会打开百度的网址
    • 其中,www.baidu.com,是百度的网址,我们称之为:域名 
    • 我们只需做一个映射,把baidu.com去映射为一个具体的IP就可以了
    • DNS服务器的作用就是:你给我个域名,我给你个IP。

    重启网络服务:service network restart

    6.4 网络服务管理

    • ctl:Control的缩写 

    systemctl命令控制软件服务的XXX

    Linux系统上很多软件均支持使用systemctl命令控制:

    语法:systemctl start | stop | status | restart | enable | disable 服务名

    • start启动、stop关闭、status查看状态、restart重启、enable开启开机时自启动、disable关闭开机时自启。
    • 能够被systemctl管理的软件,一般也称之为:服务!

    系统内置的服务比较多,比如:

    • NetworkManager:操作系统的主网络服务
    • network,副网络服务
    • firewalld,防火墙服务
    • sshd,指的是ssh服务(使用第三方远程连接工具登录Linux使用的就是这个服务,端口号为22)

    查看网络服务状态:systemctl status network 


    启动网络服务:systemctl start network 
    停止网络服务:systemctl stop  network (不建议)
    重启网络服务:systemctl restart network    /  service network restart

    设置开机启动网络服务:systemctl enable network 

    6.4 防火墙设置

    查看防火墙状态: systemctl status firewalld  

    启动防火墙: systemctl start firewalld
    关闭防火墙: systemctl stop firewalld 

    查询防火墙服务是否开机启动:systemctl is-enabled firewalld
    开机时启用防火墙服务:systemctl
    enable firewalld
    开机时禁用防火墙服务:systemctl
    disable firewalld 

    • 查询已经启动的服务列表:systemctl list-unit-files|grep enabled
    • 查询启动失败的服务列表:systemctl --failed 

    7. 其它命令补充

    1. shutdown [‐h] now    立刻关机  譬如:shutdown ‐h now
    2. shutdown [‐r]  now  重新启动 譬如:shutdown ‐r now
    3. reboot    重新启动 譬如:reboot
    4. man [shutdown] 帮助命令 譬如:man shutdown
    5. 查找命令所在路径 :whereis + 命令

    ping命令 

    语法:ping  [-c num]  ip或主机名/域名 

    • 通过ping命令,检查指定的网络服务器是否是可联通状态
    • 选项:-c,指定检查的次数;如果不使用-c选项,将无限次数持续检查
    • 参数:ip或域名/主机名,被检查的服务器的IP地址或域名/主机名地址

    date命令查看系统的日期时间  

    stat显示指定文件相关信息 

    who、w显示当前登录到系统的用户信息 => Linux是一个多任务、多用户的操作系统

    whoami显示当前登录用户的用户名 

    id显示当前登录用户的用户ID - uid以及所属的用户组ID - gid信息等: 

    dmesg显示系统启动信息 

    du显示指定的文件目录已使用的磁盘空间的容量:

    • -h:以K,M,G作为单位显示文件大小,可读性好
    • -s:仅显示总计大小,而不显示子目录的详细信息
    • -c:末尾显示总计大小,并且列出所有的文件以及文件夹的信息和大小

    df命令显示文件系统的磁盘空间使用情况:

    • /dev/sda是指整个硬盘,实际使用中一般都会有分区,也就是/dev/sda1, /dev/sda2这样的

    free [-h -t]  显示当前系统内存的使用情况:

    • 交换内存类似于Win上的虚拟内存,虚拟内存就是把硬盘空间转换为内存! 

    locale显示当前语言环境:

    Linux下查看环境变量:echo $PATH 

    ln命令创建软连接(相当于创建了快捷方式),可以把文件或文件夹链接到其它位置,链接只是一个指向,并不是物理移动,类似Windows系统的快捷方式!

    语法:ln  -s  参数1-被链接的文件或文件夹 参数2-要链接去的目的地

    • 选项 -s 表示创建软链接

    source命令

    • 语法:source  配置文件 
    • source命令也称为"点命令",也就是一个点符号(.)。
    • source命令通常用于重新执行刚修改的初始化文件,使之立即生效,而不必重新登录

    端口 

    • 通过IP只能锁定计算机,但是无法锁定具体的程序。 
    • 通过端口可以锁定计算机上具体的程序,确保程序之间进行沟通

    Linux系统可以支持65535个端口,这6万多个端口分为3类进行使用:

    1. 公认端口:1~1023,通常用于一些系统内置或知名程序的预留使用,如SSH服务的22端口,HTTPS服务的443端口 非特殊需要,不要占用这个范围的端口
    2. 注册端口:1024~49151,通常可以随意使用,用于松散的绑定一些程序\服务
    3. 动态端口:49152~65535,通常不会固定绑定程序,而是当程序对外进行网络链接时,用于临时使用。 

    可以通过nmap命令去查看Linux系统端口的占用情况

    • 要想使用nmap命令,就要先安装nmap命令:yum -y install nmap 
    语法:nmap 被查看的IP地址  查看指定IP地址对外暴露的端口       SSH:远程连接登录协议

    通过netstat命令,查看指定端口占用情况 或指定进程的使用情况  查看某个端口是否开启
    • 要想使用netstat命令,首先就必须要安装netstat命令:yum -y install net-tools 

    语法:netstat -anp | grep 端口号 /  进程ID 

    • 查看本机指定端口被哪个程序(进程号)使用了  /   指定进程的使用情况(使用了哪些端口)

     其中,0.0.0.0:22,表示端口绑定在0.0.0.0这个IP地址上,表示允许外部访问 

    netstat -tunlp:显示当前正在启动的服务 

    telnet 命令

    • telnet就是查看某个端口是否可访问
    • 语法:telnet  IP  Port端口号

    需要进行telnet命令的安装:yum -y install telnet 

    yum命令  

    语法:yum [-y] [install / remove / search] 软件名称

    • 选项-y:表示自动确认安装或卸载,无需手动确认操作
    • install:安装
    • remove:卸载
    • search:搜索
    • yum命令需要root权限,可以su - root切换到root用户,或者使用sudo授权
    • yum命令需要联网
    • yum是Linux里面在线安装软件的命令!是RPM包软件管理器!
    • RPM包是Linux操作系统的软件安装包的格式!.rpm
    • yum命令在线安装某个软件,是命令行中的软件商店!

    yum search 命令名 / 软件名:查看某个软件或命令是否已经安装

    history命令

    • 可以通过history命令,查看历史输入过的命令,可以配合 |  grep来查找历史输入过的命令

    Linux自带了Python,输入python就进入到了Pthon程序的特定专属页面: 

    Ctrl + A:跳到命令开头!        Ctrl + L  <==>  clear 清屏

    环境变量

    • 我们所执行或使用的一系列命令其实本质上就是一个个的可执行程序
    • env命令查看当前系统的环境变量!
    • 环境变量是一种Key-Value型结构,即名称和值
    • 我们所执行的命令都是借助于环境变量中的PATH环境变量来做到的,PATH环境变量记录的是命令的搜索路径!
     在Linux系统中,$符号被用于取”变量”的值。
    • 取得环境变量的值就可以通过语法:$环境变量名  来取得
    • 比如: echo $PATH   取得PATH这个环境变量的值,并通过echo语句输出出来

    配置环境变量的语法:export 变量名=变量值 
    • 针对当前用户生效,配置在当前用户的:    ~/.bashrc文件中
    • 针对所有用户生效,配置在系统的:    /etc/profile文件中 
    • ~指的是当前登录用户的HOME目录!

    8. Linux上部署Web项目

    8.1 远程上传工具的使用

    • Xftp、MobaXterm

    Linux搭建Java开发环境

    1.1 下载JDK8

    下载JDK8 Linux 版本 https://www.oracle.com/java/technologies/downloads/#java8-linux 

    把下载好的JDK8上传到Linux虚拟机上:

    上传文件的方式一:使用MobaXterm

    上传文件方式二:使用Xftp完成上传

    PS:若使用MobaXtrem,则默认上传到当前用户的HOME目录下! 

    上传到了根目录下:

    规范:我们自己安装的软件必须要安装在 /usr/local 目录下

    将自己所下载好的位于根目录下的JDK移动到刚才所创建的目录:

    解压Linux版本的JDK8的压缩包:文件后缀为tar.gz

    查看JDK的版本,验证是否安装成功:

    配置JDK环境变量:vim /etc/profile

    • PS:我们所有的配置文件都在etc目录里面! 

    编辑profile文件,在profie文件中添加JAVA_HOME变量:   

    使配置生效:source  /etc/profile

    查看变量是否更新成功:echo $PATH

    验证:JDK环境变量若配置好了,就可以在任意目录下查看java -version了!

    在Linux里面启动SpringBoot项目的Jar包 

    • java -jar  xxxx.jar

    将打好的Jar包上传到Linux服务端: 

     

    接着java  -jar运行该项目: 

    原因:在JDK8上面运行了JDK11环境下的程序! 

    话不多说,接着安装JDK11的Linux版本,就是干! 

    安装JDK11:

    Java Downloads | Oracle

    把下载好的JDK11上传到Linux服务器上:

    检查是否通过Xftp将JDK11上传到了/root目录下:

    将打好的Jar包以及JDK11分别都移动到/usr/local/MySoftWare目录下:

    解压Linux版本的JDK11的压缩包到/usr/local/MySoftWare目录下:

    通过命令查看JDK的版本,验证是否安装成功:

    接着配置环境变量,修改JDK环境变量为JDK1:vim /etc/profile 

    使配置生效:source  /etc/profile 

    查看环境变量是否更新成功:

    验证JDK环境变量是否配置成功,如果配置成功,那么就可以在任意目录下查看java -version了

    注意:此时,出现问题了,java -version后显示的是JDK8,javac -version却显示JDK11????? 

    难道版本不对???获取JDK11的java -version检查版本到底是不是JDK11:

    PS:我确定/etc/profile下的环境变量配置正确,并且我也重启后再次检查,甚至我换了一个终端工具还是老问题:

    原因剖析:在Linux更改Java环境变量后,使用的还是之前的Java环境变量,哪怕重启终端货重新加载环境配置后依然无效,这是因为在终端中启动的Java进程会使用先前加载的环境变量。 

    解决办法:要永久设置java -version命令为JDK11,需要通过更改系统的环境变量来实现:
    1. 找到JDK11的安装路径:/usr/local/MySoftWare/jdk-11.0.20

    2. 编辑.bashrc文件,在终端中运行以下命令:vim ~/.bashrc

    3. 在.bashrc文件末尾添加以下行:

    • export JAVA_HOME=/usr/local/你的JDK11的实际安装路径

    我的:

    • export JAVA_HOME=/usr/local/MySoftWare/jdk-11.0.20
    • export PATH=$JAVA_HOME/bin:$PATH  PS:第二行写法固定

    4. :wq保存并关闭文件后,使更新的环境变量生效:source ~/.bashrc

    接着检查java -version是否为JDK11: 

    为我自己点个赞!!!修复完Bug真爽! 

    再次java -jar运行项目: 

    Linux进程管理  

    • ps -aux :显示全部信息
    • 查看Java进程:ps    -aux   |   grep java            ps   -ef    |  grep  "java"

    终止进程:语法:kill 【-9】进程ID/号

    • 选项:-9,表示强制关闭进程。
    • 不使用此选项会向进程发送信号要求其关闭,但是否关闭看进程自身的处理机制。

    在使用netstat -anp | grep 8080确定8080端口已经开启后,则检查防火墙是否关闭:

    • 防火墙相当于Linux对自己的一个保护你外界要想访问我的端口或者程序,那么你必须要穿过我的防火墙,防火墙一旦开启,那么你端口或程序就穿不过! 

    手动关闭防火墙:systemctl stop firewalld 

    Windows开启telnet服务: 

    打开控制面板 => 找到程序和功能 => 点击启用或关闭Windows功能 => 勾选Telnet客户端

    CMD窗口输入:telnet 192.168.153.137 22 

    安装Tomcat

    • 安装Tomcat之前要保证JDK安装成功哦

    通过Xftp远程上传下载好的Tomcat的压缩包: 

    将Tomcat压缩包移动到/usr/local/MySoftWare目录下:

    解压Tomcat压缩包:

    进入Tomcat的bin目录启动Tomcat: 

    启动Tomcat:sh   startup.sh

    关闭防火墙之后测试访问:

    • PS:注意:此前我们已经关闭了防火墙!!!

    关闭Tomcat:sh   shutdown.sh 

    • 将来我们可以直接把自己的Web项目打成War包直接扔到webapps文件夹里面进行部署访问! 

    Linux搭建MySQL数据库

    步骤1: 检测系统是否自带安装mysql - yum list installed | grep mysql

    步骤2: 删除系统自带的mysql及其依赖(防止后面安装发生冲突)

    • yum -y remove mysql-libs.x86_64  
    1、下载MySQL数据库
    下载Linux 版本的 MySQL https://dev.mysql.com/downloads/mysql/
    注意:这里安装方式非常多,为什么选择tar.gz包

    将下载好的MySQL8的压缩包上传到Linux服务器:

    将MySQL8压缩包移动到/usr/local/MySoftWare目录下:

    解压MySQL8压缩包:拆包指定文件到指定位置:tar  -xvf  xx.tar -C /文件路径

    解压完成后,发现全是.rpm结尾的:

    这可不好搞了,及时止损,批量删除.rpm结尾的文件:rm -r *.rpm:

    检查是否删除:  

    去官网重新下载以.tar.gz结尾的压缩包: 

    将新下载好的MySQL8上传到Linux服务器,并将MySQL8压缩包移动到/usr/local/MySoftWare目录下:

    解压MySQL8压缩包:解压指定文件到指定位置:tar   -zxxvf    /xx.tar.gz   -C   /路径

    看看解压完成后的MySQL: 

    进入到MySQL文件夹里面看看: 

    创建存储数据的文件夹data: 

    由于我们默认的用户和用户组很乱,因此我们需要创建mysql用户和用户组(PS:这是一个规范)
    • 创建用户组:groupadd mysql
    • 创建用户
    ‐r:创建系统用户(系统用户是指不会在/home 创建用户目录)
    ‐g:指定用户组

    更改MySQL文件夹用户和组用户都为mysql 

    • chown ‐R mysql:mysql /usr/local/MySoftWare/mysql....

    为了确保bin目录下的每一个命令都能够得到执行,因为要给每一个命令都要加上x权限: 

    • chomd -R 755  /usr/local/MySoftWare/mysql... 

    步骤3: 给CentOS添加rpm源,并且选择较新的源,RPM软件包管理器缩写

    • wget --no-check-certificate dev.mysql.com/get/mysql-community-release-el6-5.noarch.rpm

    步骤4: 安装第一步下载的rpm文件  

    • yum install mysql-community-release-el6-5.noarch.rpm
    • 此处需要输入"y"

    yum repolist enabled | grep mysql 列出你所有的yum repo文件

    步骤5: 使用yum安装mysql
    • yum install mysql-community-server
    • 一共输入2次"y"

    步骤6: 启动mysql服务
    • service mysqld start

  • 相关阅读:
    pensieve运行的经验
    保障人脸安全!顶象发布《人脸识别安全白皮书》
    太赞了!这个神器,让医院的效率翻了10倍!
    什么是Redis脑裂,如何解决呢
    java中AES工具类对称加密
    大端字节和小端字节
    Flink将数据写入MySQL(JDBC)
    Day32——122.买卖股票的最佳时机II 55. 跳跃游戏 45.跳跃游戏II +第二天复习
    英语六级做题经验总结
    2022-6-29 最大二叉树,根据前序和后序遍历构造二叉树,将子数组重新排序得到同一个二叉查找树的方案数
  • 原文地址:https://blog.csdn.net/weixin_53622554/article/details/132793849