linux学习笔记_linux学习笔记下载 - CSDN
精华内容
参与话题
  • Linux学习笔记(详细)

    千次阅读 多人点赞 2019-06-28 15:03:57
    所有的Linux系统都会内建vi文本编辑器。 vim具有程序编辑的能力,可以看做是vi的增强版本,可以主动的以字体颜色辨别语法的正确性,方便程序设计。代码补完、编译及错误跳转等方便编程的功能特别丰富,在程序员中被...

    1、vi 和 vim编辑器

    1.1、简介

    所有的Linux系统都会内建vi文本编辑器。

    vim具有程序编辑的能力,可以看做是vi的增强版本,可以主动的以字体颜色辨别语法的正确性,方便程序设计。代码补完、编译及错误跳转等方便编程的功能特别丰富,在程序员中被广泛使用。

    1.2、vi和vim常用的三种模式

    1560765242696

    1.2.1、正常模式

    以vim打开一个档案就直接进入一般模式了(这是默认的模式)。在这个模式种,你可以使用【上下左右】按键移动光标,你可以使用【删除字符】或【删除整行】来处理档案内容,也可以使用【复制、贴上】来处理你的文件数据。(在正常模式下,我们可以使用快捷键。

    1.2.2、插入模式/编辑模式

    在这个模式下,程序员可以输入内容。

    按下【i,I,o,O,a,A,r,R】等任何一个字母之后才会进入编辑模式,一般来说按i即可。

    1.2.3、命令行模式

    在这个模式种,可以提供你相关指令,完成读取、存盘、替换、离开vim、显示行号等的动作则是在此模式中达成的。

    1.2.4、在vi和vim模式下的命令

    i		#进入输入模式
    a		#进入输入模式 光标前进一位
    ESC		#退出输入模式
    wq		#保存并退出
    q		#退出
    q!		#强制退出
    

    1.3、vi和vim快捷键

    1.3.1、复制

    #复制
    yy(正常模式)			#拷贝当前行   
    p(正常模式)			#粘贴
    5yy(正常模式)			#拷贝当前行向下5行
    

    1.3.2、删除

    #删除
    dd(正常模式)			#删除一行
    5dd(正常模式)			#删除当前行向下的5行
    

    1.3.3、查找

    #查找
    /hello + 回车(正常模式)   #查找关键字hello
    n(正常模式)			#查找下一个
    

    1.3.4、行号

    #文件的行号
    :set nu(命令模式)		#设置行号
    :set nonu(命令模式)	#取消行号
    

    1.3.5、行首/行末

    #跳转到最末行
    G(正常模式)
    #跳转到最首行
    gg(正常模式)
    

    1.3.6、撤销

    #撤销
    u(正常模式)
    

    1.3.7、将光标移到第n行

    #将光标移到第10行
    #1、显示行号   :set nu  (命令模式)
    #2、输入10	(正常模式)
    #3、输入shift+g	(正常模式)
    

    在这里插入图片描述

    2、实用指令

    pwd			#查看当前所在目录
    

    2.1、关机&重启

    shutdown -h now				#立刻进行关机
    shutdown -h 1				#"hello,1分钟后会关机了"
    shutdown -r now				#现在重新启动计算机
    halt						#关机,作用和上面一样
    reboot						#现在重新启动计算机
    sync						#把内存的数据同步到磁盘(把没保存的东西保存,关机之前使用这个命令)
    

    2.2、用户的注销

    #注销   此指令在图形运行级别无效  此命令在普通用户下无效
    logout
    
    exit    #用户退出登录
    Ctrl + D  #用户退出登录
    
    

    2.3、用户管理

    在这里插入图片描述

    说明:

    1、Linux系统是一个多用户多任务的操作系统,任何一个要使用系统资源的用户,都必须首先向系统管理员申请一个账号,然后以这个账号的身份进入系统。

    2、Linux的用户至少要属于一个用户组。

    2.3.1、添加用户

    useradd [选项] 用户名    #[选择]是参数
    
    useradd -d 新的用户名     #给新创建的用户指定家目录  ConterOS
    useradd -m 新的用户名	 #给新创建的用户指定家目录  Unbutu
    
    
    #比如:
    useradd -m yangxinhu	#创建了一个用户   并且home下会自动生成一个yangxinhu的目录
    

    当创建用户成功后,会自动的创建和用户同名的家目录

    2.3.2、删除用户

    userdel 用户名   #删除用户  但是保存用户家目录
    userdel -r 用户名	#删除用户  同时删除用户家目录
    

    删除用户时,一般不将用户家目录删除

    2.3.3、设置密码

    passwd 用户名
    

    2.3.4、查看用户

    w     #查看用户列表
    
    id 用户名	#查看指定用户信息
    
    whoami		#查看当前用户名
    
    who am i	#查看当前登录用户名
    

    2.3.5、切换用户

    su - 用户名
    

    2.4、用户组

    介绍:类似于角色,系统可以对有共性的多个用户进行统一的管理。

    2.4.1、新增组

    groupadd 组名
    
    useradd -g 用户组 用户名   #增加一个用户的时候直接将他指定到一个组
    

    2.4.2、删除组

    groupdel 组名
    

    2.4.3、修改用户的组

    usermod -g 用户组 用户名
    

    2.4.4、用户和组的相关文件

    2.4.4.1、用户配置文件(用户信息)/etc/passwd

    用户(user)的配置文件,记录用户的各种信息

    每行的含义:用户名:口令:用户标识号:组标识号:注释性描述:主目录:登录Shell

    2.4.4.2、组配置文件(组信息)/etc/group

    组(group)的配置文件,记录Linux包含的组的信息

    每行含义:组名:口令:组标识号:组内用户列表

    2.4.4.3、口令配置文件(密码和登录信息,是加密)/etc/shadow

    口令的配置文件

    每行的含义:登录名:加密口令:最后一次修改时间:最小时间间隔:最大时间间隔:警告时间:不活动时间:失效时间:标志

    2.5、指定运行级别

    在这里插入图片描述

    运行级别说明:

    0:关机

    1:单用户【找回丢失密码】

    2:多用户状态无网络服务

    3:多用户状态有网络服务

    4:系统未使用保留给用户

    5:图形界面

    6:系统重启

    常用运行级别是3和5,要修改默认的运行级别可改文件/etc/inittab的id:5:initdefault:这一行中的数字

    命令:

    init[0123456]   #切换到制定运行级别的指令  如:切换到5   init 5
    

    2.6、进入单用户找回密码

    注意:只有在装有Linux系统的主机上操作,才可以进入单用户修改密码(云服务器另有提供方式)。

    2.6.1、启动Ubuntu18操作系统并长按【Shift】键进入选项,选择 Advanced options for Ubuntu 这一项 按回车【Enter】键

    注意:这个界面是可能出现的,如果没有出现,直接跳过这一步。

    在这里插入图片描述

    2.6.2、选中Ubuntu,with Linux xxxx-generic(recovery mode)按【E】键,不要按回车

    在这里插入图片描述

    2.6.3、使用上下左右键,找到recovery nomodeset,并将其删除

    在这里插入图片描述

    2.6.4、然后在这一行的最后添加:

    quiet splash rw init=/bin/bash
    

    在这里插入图片描述

    2.6.5、按ctrl+x或F10启动系统就可以进入single模式而不需要密码了。

    2.7、帮助指令

    当我们对某个指令不熟悉时,我们可以使用Linux提供的帮助指令来了解这个指令的使用方法。

    2.7.1、man

    man [命令或配置文件]   #获得帮助信息
    
    #案例:查看ls命令的帮助信息
    man ls
    

    2.7.2、help

    #实例:查看cd的用法
    help cd   #获得shell内置命令的帮助信息
    

    2.8、文件目录类

    2.8.1、pwd

    pwd		#显示当前工作目录的绝对路径
    

    2.8.2、ls

    ls [选择] [目录或是文件]	#显示当前目录下的目录和文件
    #-a 显示当前目录所有的文件和目录,包括影藏的
    #-l 以列表的方式显示信息
    #-h 显示更人性化
    

    2.8.3、cd

    cd [参数]   #切换到指定目录
    cd ~ 或者 cd   #回到自己的家目录
    cd ..   #回到上一级目录
    

    2.8.4、mkdir

    mkdir [选项] 要创建的目录   #用于创建目录
    # -p 创建多级目录
    
    rmdir 目录  #删除指定目录  这个命令只能删除空的目录
    rm -rf 目录  #删除指定目录包括目录下的所有文件和目录
    

    2.8.5、touch

    touch 文件名称  #创建一个空文件
    

    2.8.6、cp

    cp [选项] source dest  #拷贝  source是源文件  dest是目标路径
    #-r 递归复制整个文件夹
    #\cp -r sorce dest   强制覆盖,不要提示我
    

    2.8.7、rm

    rm  #移除
    #-r 递归删除整个文件夹
    #-f 强制删除不提示
    

    2.8.8、mv

    mv #移动文件与目录或者是重命名
    #mv oldNameFile newNameFile (重命名)
    #mv /temp/movefile  /targetFolder  (移动)
    

    2.8.9、cat

    cat [选项] 文件 #查看文件内容
    #-n  显示行号
    

    2.8.10、more

    more 文件   #查看文件内容
    

    2.8.11、> & >>

    >   #输出重定向  (覆盖写)
    >> 	#追加
    
    ls -l>文件    #列表的内容写入文件a.txt中(覆盖写)
    ls -al>>文件	#列表的内容追加到文件aa.txt的末尾
    cat 文件1>文件2		#将文件1的内容覆盖到文件2  cat /etc/profile > c.txt
    echo "内容">>文件  	#将内容写入文件中 
    
    #使用
    #1、将/home目录下的文件列表写入到/home/1.txt中
    ls -al>>/home/1.txt
    #2、将当前日历信息追加到/home/mycal文件中
    cal >> /home/mycal
    

    2.8.12、echo

    echo [选择] [输出内容]  #输出内容到控制台
    #经常使用echo指令输出环境变量   echo $PATH
    

    2.8.13、head

    head   #显示文件的开头部分内容,默认情况下head指令显示文件的前10行内容
    head 文件   #查看文件头10行内容
    head -n 5 文件   #查看文件头5行内容,5可以是任意行数
    

    2.8.14、tail

    tail  #显示文件中尾部的内容,默认情况下tail指令显示文件的后10行内容
    tail 文件   #查看文件后10行内容
    tail -n 5 文件   #查看文件后5行内容,5可以是任意行数
    tail -f 文件		#实时追踪该文档的所有更新,工作中经常使用,如实时监控日志文件
    

    2.8.15、ln

    #软链接指令  类似于windows里的快捷方式,主要存放了链接其他文件的路径
    ln -s [源文件或目录] [软链接名]    #给源文件创建一个软链接(相当于给源文件创建了一个快捷方式)
    rm -rf [软链接名]   #删除软链接  在删除软链接目录时,后面不要带/,否则提示资源忙
    

    2.8.16、history

    history   #查看已经执行过的历史命令,也可以执行历史指令
    history 10   #查看最近使用的10个命令  10这个数字可以改变
    !指令编号    #执行第多少条指令   !178 执行编号为178的指令
    

    2.9、时间日期类

    2.9.1、date

    date		#显示当前时间
    date +%Y 	#显示当前年份
    date +%m		#显示当前月份
    date +%d		#显示当前是哪一天
    date "+%Y-%m-%d %H:%M:%S"	#显示年月日时分秒
    date -s 字符串时间  #设置系统当前时间  date -s "2019-06-19 10:03:00"
    

    2.9.2、cal

    cal		#查看当前日历
    cal [选项]   #显示选择的年份的所有日历  cal 2019
    

    2.10、搜索查找类

    2.10.1、find

    #find指令  将从指定目录向下递归的遍历其各个子目录,将满足条件的文件或者目录显示在终端
    find [搜索范围] [选项]
    #选项说明
    #-name <查询方式>   按照指定的文件名查找模式查找文件
    #-user <用户名>		查找属于指定用户名所有文件
    #-size <文件大小>   按照指定的文件大小查找文件
    
    #按文件名,根据名称查找/home目录下的hello.txt文件
    find /home -name hello.txt
    #按拥有者,查找/opt目录下,用户名称为root的文件
    find /opt -user root
    #查找整个linux系统下大于20M的文件(+n 大于    -n 小于    n 等于)
    find / -size +20M
    #查询根目录下,所有后缀为.txt的文件
    find / -name *.txt
    

    2.10.2、locate

    #locate指令  可以快速定位文件路径。locate指令利用事先建立的系统中所有文件名称及路径的locate数据库实现快速定位给定的文件。locate指令无需遍历整个文件系统,查询速度较快。为了保证查询结果的准确度,管理员必须顶起更新locate时刻。
    locate 搜索文件
    #由于locate指令基于数据库进行查询,所以第一次运行前。必须使用updatedb指令创建locate数据库
    
    #使用locate指令快速定位hello.txt文件所在目录
    updatedb
    locate hello.txt
    

    2.10.3、grep & 管道符号 |

    #grep过滤查找
    #管道符 "|" ,表示将前一个命令的处理结果,输出传递给后面的命令处理。
    
    grep [选项] 查找内容 源文件
    
    #选项
    # -n		显示匹配行及行号
    # -i		忽略字母大小写
    
    #应用实例 : 请在hello.txt文件中,查找 "yes" 所在行,并且显示行号
    cat hello.txt | grep -ni yes
    #cat hello.txt  将hello.txt的内容浏览出来
    # | 是将cat浏览出来的内容交给后面的命令处理
    #grep yes  是将 | 交过来的内容进行过滤查找
    

    2.11、压缩和解压缩类

    2.11.1、gzip & gunzip

    #gzip用于压缩
    #gunzip用于解压
    
    gzip 文件				#压缩文件,只能将文件压缩为 *.gz 文件
    gunzip 文件.gz		#解压缩文件命令
    

    2.11.2、zip & unzip

    #zip用于压缩
    #unzip用于解压
    #在项目打包发布中很有用
    
    zip [选项] xxx.zip 将要压缩的内容	#压缩文件和目录的命令
    unzip [选项] xxx.zip				#解压缩文件
    
    #zip常用选项:-r  递归压缩,即压缩目录
    #unzip常用选项:-d <目录>   指定解压后文件的存放目录
    

    2.11.3、tar

    #打包指令  最后打包后的文件是.tar.gz的文件
    
    tar [选择] xxx.tar.gz 打包的内容	#打包目录,压缩后的文件格式是.tar.gz
    
    #常用选项
    #-c 	产生.tar打包文件
    #-v 	显示详细信息
    #-f		指定压缩后的文件名
    #-z		打包同时压缩
    #-x		解包.tar文件
    
    #案例
    #1、压缩多个文件,将/home/a1.txt和/home/a2.txt压缩成a.tar.gz
    tar -zcvf /home/a.tar.gz /home/a1.txt /home/a2.txt
    #2、将/home的文件夹压缩成myhome.tar.gz
    tar -zcvf myhome.tar.gz /home/
    #3、将a.tar.gz解压到当前目录下
    tar -zxvf a.tar.gz
    #4、将myhome.tar.gz解压到/opt目录下(指定的目录必须是存在的)
    tar -zxvf myhome.tar.gz -C /opt/
    

    3、组管理和权限管理(难点、重点)

    在Linux中的每个用户必须属于一个组,不能独立于组外。

    在linux中每个文件有所有者、所在组、其他组的概念。

    在这里插入图片描述

    3.1、文件/目录所有者

    一般为文件的创建者,谁创建了这个文件,就自然的成为这个文件的所有者。

    3.1.1、查看文件的所有者

    ls -ahl
    #实例:创建一个组police,在创建一个用户tom,然后使用tom来创建一个文件,看看情况如何
    #-----root用户下
    groupadd police
    useradd -g police tom
    #------切换到tom用户  创建ok.txt
    touch ok.txt
    #查看所有者
    ls -ahl
    

    在这里插入图片描述

    文件所有者图示

    在这里插入图片描述

    ok.txt的所有者是tom,tom在police组中,ok.txt的所在组是police

    一般文件的所在组,是所有者所在的组

    3.1.2、修改文件的所有者

    chown (change owner改变所有者)

    chown 用户名 文件名
    
    chown -R 用户名 目录名
    #将目录下的所有目录文件的所有者以递归的方式修改
    #详情请参见3.7
    
    
    #案例:使用root创建一个文件apple.txt,然后将其修改成tom
    #------使用root用户  创建apple.txt
    touch /home/apple.txt
    #查看所有者  apple.txt是属于root的
    ls -ahl
    

    在这里插入图片描述

    #还是在root用户下操作   修改文件的所有者
    chown tom /home/apple.txt
    #再次查看apple.txt的所有者
    ls -ahl
    

    在这里插入图片描述

    修改文件所有者图示:

    在这里插入图片描述

    文件所有者所在的组,不一定是文件所在组。

    3.2、文件/目录所在组

    3.2.1、查看文件/目录所在组

    ls -ahl
    #前面已经用到过了
    

    3.2.2、修改文件所在组

    chgrp(change group选择组)

    chgrp 组名 文件名
    
    chgrp -R 组名 目录名 
    #将目录下的所有目录文件的所在组使用递归的方式修改
    #详细请参见3.7
    
    #实例:使用root用户创建文件orange.txt,看看当前这个文件属于哪个组,然后将这个文件所在组,修改到police组。
    touch /home/orange.txt
    ls -ahl
    

    在这里插入图片描述

    chgrp police /home/orange.txt
    ls -ahl
    

    在这里插入图片描述

    3.3、其他组

    除文件的所有者和所在组的用户外,系统的其他用户都是文件的其他组。

    3.4、改变用户所在组

    在添加用户时,可以指定将该用户添加到哪个组中,同样的用root的管理权限可以改变某个用户所在的组。

    #改变用户所在组
    usermod -g 组名 用户名	#改变该用户所在的组
    usermod -d 目录名 用户名 #改变该用户登录的初始目录
    
    #实例:创建一个土匪组(bandit),将tom这个用户从原来所在的police组,修改到bandit(土匪)组。
    groupadd bandit
    usermod -g bandit tom
    id tom  #查看用户
    

    在这里插入图片描述

    3.5、权限的基本介绍

    进入/home目录 使用命令查看文件

    ls -l
    

    在这里插入图片描述

    以其中第一个apple.txt为例来解读:

    -   rw-  r--  r--  1 tom  root  0  Jun 20 00:02  apple.txt
    1    2    3    4   5  6    7    8       9          10
    #1  文件的类型
    #[-:普通文件]
    #[d:目录]
    #[l:软链接]
    #[c:字符设备(键盘,鼠标)]
    #[b:快文件,硬盘]
    
    #2  表示文件/目录所有者权限
    #3   文件/目录所在组的用户的权限
    #4   文件/目录其它组的用户的权限
    #-----[r:可读]
    #-----[w:可写]
    #-----[x:]
    #-----[-:没有权限]
    
    #5  
    #如果是文件,表示硬链接的数
    #如果是目录,表示目录的子目录的个数
    
    #6  文件/目录所在用户
    #7  文件/用户所在组
    #8  文件的大小,单位:字节,,,如果是目录,显示4096
    #9  文件/目录最后的修改时间
    #10 文件/目录名
    

    在这里插入图片描述

    3.6、rwx权限详解

    3.6.1、rwx作用在文件上

    [r] 代表可读(read):可以读取、查看

    [w]代表可写(write):可以修改,但是不代表可以删除该文件,删除一个文件的前提条件是对该文件所在的目录有写权限,才能删除该文件。

    [x]代表可执行(execute):可以被执行

    3.6.2、rwx作用到目录上

    [r]代表可读(read):可以读取,ls查看目录内容

    [w]代表可写(write):可以修改,目录创建+删除+重命名目录

    [x]代表可执行(execute):可以进入该目录

    3.7、权限的管理

    3.7.1、修改权限

    通过chmod指令,可以修改文件或者目录的权限。

    3.7.1.1、使用+、-、=变更权限

    #u:所有者(user)
    #g:所有组(group)
    #o:其他人(other)
    #a:所有人(all)(u、g、o的总和)
    
    chmod u=rwx,g=rx,o=x 文件目录名
    #表示给所有者读、写、执行权限 ,给所有组读和执行权限,给其他人执行权限
    
    chmod o+w 文件目录名
    #表示给其他人添加写的权限
    
    chmod a-x 文件目录名
    #表示给所有人去除执行的权限
    
    #案例
    #1、给abc文件的所有者读写执行的权限,给所有组读执行权限,给其他组读执行权限
    chmod u=rwx,g=rx,o=rx abc
    #2、给abc文件的所有者除去执行的权限,增加所有组写的权限
    chmod u-x,g+w abc
    #3、给abc文件的所有用户添加读的权限
    chmod a+r abc
    

    3.7.1.2、使用数字变更权限

    #规则 
    r=4   #二进制 100
    w=2   #二进制 010
    x=1	  #二进制 001
    rwx=4+2+1=7 
    
    chmod u=rwx,g=rx,o=x 文件目录名
    #相当于
    chmod 751 文件目录名
    
    #案例:将/home/abc.txt文件的权限修改成rwxr-xr-x,使用数字的方式实现
    chmod 755 /home/abc.txt
    

    3.7.2、修改文件的所有者

    chown newowner file    #改变文件的所有者
    chown newowner:newgroup file #改变用户的所有者和所有组
    -R  #如果是目录  则使其下所有子文件或目录递归生效
    
    #案例
    #1、请将/home/abc.txt文件的所有者修改成tom
    chown tom abc.txt
    #2、请将/home/kkk目录下所有的文件和目录的所有者都修改成tom
    chown -R tom kkk/
    

    3.7.3、修改文件所在的组

    chgrp newgroup file #改变文件的所有组
    
    #案例
    #1、将/home/abc.txt文件的所在组修改成bandit(土匪)
    chgrp bandit /home/abc.txt
    #2、将/home/kkk 目录下所有的文件和目录的所在组都修改成bandit(土匪)
    chgrp -R bandit /home/kkk
    

    3.7.4、最佳实践-警察和土匪游戏

    police , bandit

    jack,jerry:警察

    xh , xq:土匪

    #1、创建组
    groupadd police
    groupadd bandit
    
    #2、创建警察和土匪
    useradd -g police -m jack
    useradd -g police -m jerry
    useradd -g bandit -m xh
    useradd -g bandit -m xq
    #-----给用户设置密码
    passwd 用户名
    
    #3、jack创建一个文件,自己可以读写,本组人可以读,其它组没有任何权限
    #---切换到jack用户
    touch jack.txt
    chmod o-r jack.txt 
    #或
    chmod 640 jack.txt
    
    #4、jack修改改文件,让其他组人可以读,本组人可以读写
    chmod o=r,g=rw jack.txt
    #或
    chmod 664 jack.txt
    
    #5、xh投靠 警察,看看是否可以读写
    #----切换到root用户   改变xh的组
    usermod -g police xh
    

    4、crond 任务调度

    4.1、概念

    任务调度:是指系统在某个时间执行的特定的命令或程序。

    任务调度分类:1、系统工作:有些重要的工作必须周而复始的执行。如病毒扫描等。2、个别用户工作:个别用户可能希望执行某些程序,比如对mysql数据库的备份。

    在这里插入图片描述

    4.2、指令

    crontab [选项]
    #-e  编辑crontab定时任务
    #-l  查询crontab任务
    #-r  删除当前用户所有的crontab任务
    

    4.2.1、创建定时任务

    crontab -e  #然后进行编辑
    

    4.2.2、查看定时任务

    crontab -l
    

    4.2.3、删除所有定时任务

    crontab -r
    

    4.2.4、重启定时任务

    service crond restart [重启任务调度]
    

    4.3、快速入门

    4.2.1、任务要求

    设置任务调度文件:/etc/crontab

    设置个人任务调度。执行crontab -e 命令

    接着输入任务到调度文件

    如:

    */1****ls -l /etc/>/tmp/to.txt
    #意思是说每小时的每分钟执行ls -l /etc/ > /tmp/to.txt命令
    

    4.2.2、步骤如下(Ubuntu18)

    crontab -e
    */1****ls -l /etc/>/tmp/to.txt
    

    在这里插入图片描述

    按Ctry + X 退出 ,按 Y 确定退出 ,最后按回车

    在这里插入图片描述

    出现这一句,说明任务调度成功。

    4.2.3、5个占位符说明

    项目 含义 范围
    第一个 * 一小时当中的第几分钟 0-59
    第二个 * 一天当中的第几小时 0-23
    第三个 * 一个月当中的第几天 1-31
    第四个 * 一年当中的第几月 1-12
    第五个 * 一周当中的星期几 0-7(0和7都代表星期日)

    4.2.4、特殊符号说明

    特殊符号 含义
    * 代表任何时间。比如第一个"*"就代表一小时中每分钟都执行一次的意思。
    , 代表不连续的时间。比如"0 8,12,16 * * * * 命令",就代表在每天的8点0分、12点0分、16点0分都执行一次命令
    - 代表连续的时间范围。比如"0 5 * * 1-6 命令",代表在周一到周六的凌晨5点0分执行命令
    */n 代表每隔多久执行一次。比如"*/10 * * * * 命令",代表每个10分钟就执行一次命令

    4.2.5、特定时间执行任务案例

    时间 含义
    45 22 * * * 命令 在22点45分执行命令
    01 7 * * 1 命令 每周1的17点0分执行命令
    0 5 1,15 * * 命令 每月1号和15号的凌晨5点0分执行命令
    40 4 * * 1-5 命令 每周一到周五的凌晨4点40分执行命令
    */10 4 * * * 命令 每天的凌晨4点,每隔10分钟执行一次命令
    0 0 1,15 * 1 命令 每月1号和15号,每周1的0点0分都会执行命令。
    注意:星期几和几号最好不要同时出现,
    因为他们定义的都是天。非常容易让管理员混乱。

    4.4、应用实例

    4.4.1、案例一

    每隔1分钟,就将当前的日期信息,追加到/home/mydate文件中

    4.4.1.1、先编写一个文件 mytask1.sh

    date >> /home/mydate
    ls -l
    

    4.4.1.2、给mytask1.sh一个可执行权限

    chmod u+x mytask1.sh
    

    4.4.1.3、crontab -e

    4.4.1.4、调用文件

    */1 * * * * /home/mytask1.sh
    

    4.4.2、案例二

    每隔1分钟,将当前日期和日历都追加到/home/mycal文件中

    4.4.2.1、先编写一个文件 mytask2.sh

    date >> /home/mycal
    cal >> /home/mycal
    

    4.4.2.2、给mytask2.sh一个可执行权限

    chmod u=rwx mytask2.sh
    

    4.4.2.3、crontab -e

    4.4.2.4、调用文件

    */1 * * * * /home/mytask2.sh
    

    4.4.3、案例三

    每天凌晨2:00将mysql数据库testdb,备份到文件/home/mydb.bak中。

    4.4.3.1、先编写一个文件 /home/mytask3.sh

    /usr/local/mysql/bin/mysqldump -u root -p a testdb > /home/mydb.bak
    

    4.4.3.2、给mytask3.sh一个可以执行权限

    chmod 744 /home/mytask3.sh
    

    4.4.3.3、crontab -e

    4.4.3.4、调用文件

    */1 * * * * /home/mytask3.sh
    

    5、Linux磁盘分区、挂载

    5.1、分区基础知识

    5.1.1、分区的方式

    5.1.1.1、mbr分区

    • 最多支持四个主分区

    • 系统只能安装在主分区

    • 扩展分区要占一个主分区

    • MBR最大只支持2TB,但拥有最好的兼容性

    5.1.1.2、gpt分区

    • 支持无限多个主分区(但操作系统可能限制,比如windows下最多128个分区)

    • 最大支持18EB的容量(1EB=1024PB , 1PB=1024TB)

    • windows7 64位以后支持gpt

    在这里插入图片描述

    5.2、Linux分区

    lsblk -f  #ls block    查看系统的分区和挂载的情况。
    

    在这里插入图片描述

    5.2.1、原理介绍

    • 对于Linux来说无论有几个分区,分给哪一目录使用,它归根结底就只有一个根目录,一个独立且唯一的文件结构,Linux中每个分区都是用来组成整个文件系统的一部分。
    • Linux采用了一种叫“载入”的处理方法,它的整个文件系统中包含了一整套的文件和目录,且将一个分区和一个目录联系起来。这时要载入的一个分区将使它的存储空间在一个目录下获得。
    • 示意图
      在这里插入图片描述

    5.2.2、硬盘说明

    • Linux硬盘分为IDE硬盘和SCSI硬盘,目前基本上是SCSI硬盘
    • 对于IDE硬盘,驱动器标识符为“hdx”,其中“hd”表示分区所在设备的类型,这里是指IDE硬盘了。“x”为潘浩(a为基本盘,b为基本从属盘,c为辅助主盘,d为辅助从属盘),“”代表分区,前四个分区用数字1到4表示,它们是主分区或扩展分区,从5开始就是逻辑分区。例:hda3表示为第一个IDE硬盘上的第三个主分区或扩展分区,hdb2表示为第二个IDE硬盘上的第二个主分区或扩展分区。
    • 对于SCSI硬盘则标识为“sdx~”,SCSI硬盘是用“sd”来表示分区所在设备的类型的,其余则和IDE硬盘的表示方法一样。

    5.3、挂载的经典案例

    1561099968374

    5.3.1、需求

    给我们的Linux系统增加一个新的硬盘,并且挂载到/home/newdisk

    5.3.2、实现

    • 1、虚拟机添加硬盘
    • 2、分区
    • 3、格式化
    • 4、挂载
    • 5、设置可以自动挂载

    5.3.2.1、虚拟机添加硬盘

    在【虚拟机】菜单中,选择【设置】,然后设备列表里添加硬盘,然后一路【下一步】,中间只有选择磁盘大小的地方需要修改,直到完成。然后重启系统(才能识别)!

    5.3.2.2、分区

    fdisk /dev/sdb
    m
    n
    p
    1
    Enter
    Enter
    w
    
    #m  显示命令列表
    #p  显示磁盘分区  同  fdisk -l
    #n  新增分区
    #d  删除分区
    #w  写入并退出
    

    5.3.2.3、格式化

    mkfs -t ext4 /dev/sdb1    #ext4 是分区类型
    

    5.3.2.4、挂载

    先创建目录

    mkdir /home/newdisk
    

    挂载

    mount /dev/sdb1 /home/newdisk
    
    #mount 设备名称 挂载目录 -------------挂载
    #umount 设备名称或者挂载目录 ----------断开挂载
    

    在这里插入图片描述

    当能看到这个目录时,就意味着挂载成功了,但是如果重新启动操作系统,那么这个挂载会消失

    5.3.2.5、设置可以自动挂载

    设置永久挂载,当重启系统时,仍然可以挂载到 /home/newdisk

    vim /etc/fstab
    

    在这里插入图片描述

    这个文件中记录了分区和挂载点的情况。

    添加:

    /dev/sdb1       /home/newdisk       ext4    defaults   0 0
    

    在这里插入图片描述

    启动自动挂载:

    mount -a   # mount auto
    

    重启操作系统

    reboot
    

    发现挂载关系自动成立。

    5.4、磁盘情况查询

    5.4.1、查询系统整体磁盘使用情况

    df -h
    df -l
    
    #-h 是human  适合人观察的方式展现出来
    

    5.4.2、查询指定目录的磁盘占用情况

    du -h /目录
    #查询指定目录的磁盘占用情况,默认为当前目录
    # -s 指定目录占用大小汇总
    # -h 带计量单位
    # -a 含文件
    # --max-depth=1 子目录深度
    # -c 列出明细的同时,增加汇总值
    
    #实例:查询/opt目录的磁盘占用情况,深度为1
    du -ach --max-depth=1 /opt
    

    5.4.3、磁盘情况-工作实用指令

    5.4.3.1、统计/home文件夹下文件的个数

    ls -l /home | grep "^-" | wc -l   # "^-"  以-开头的是文件
    

    5.4.3.2、统计/home文件夹下目录的个数

    ls -l /home | grep "^d" | wc -l   # "^d"  以d开头的是目录
    

    5.4.3.3、统计/home文件夹下文件的个数,包括子文件夹里

    ls -lR /home | grep "^-" | wc -l   # "^-"  以-开头的是文件  -R 递归
    

    5.4.3.4、统计/home文件夹下目录的个数,包括子文件夹里

    ls -lR /home | grep "^d" | wc -l   # "^d"  以d开头的是目录
    

    5.4.3.5、以树状显示目录结构

    tree /home
    

    6、网络配置

    6.1、Linux网络配置原理图

    在这里插入图片描述

    6.2、网络IP和网关

    6.2.1、查看虚拟网络编辑器

    在这里插入图片描述

    6.2.2、修改IP地址(修改虚拟网卡的IP)

    在这里插入图片描述

    6.2.3、查看网关

    在这里插入图片描述

    6.2.4、查看windows环境中VMnet8网络配置(ipconfig指令)

    也可以通过界面查找

    在这里插入图片描述

    6.3、Linux网络环境配置

    6.3.1、指定固定IP

    • 说明:直接修改配置文件来指定IP,并可以连接到外网(程序员推荐)

    • 编辑:

      #vim /etc/sysconfig/network-scripts/ifcfg-eth0   #ConOS
      vim /etc/network/interfaces    #Ubuntu
      
    • 要求:将IP地址配置成静态的,ip地址为192.168.184.130

    vim /etc/network/interfaces
    
    #静态分配的配置方法
    auto eth0
    iface eth0 inet static
    address 192.168.0.1
    netmask 255.255.255.0
    gateway 192.168.0.1
    #保存退出
    
    #重启网络服务
    service network restart
    

    这地方有问题 以后还要自己研究一下-----------------------------------------------------------------

    7、进程管理

    7.1、基本介绍

    • 在Linux中,每个执行的程序(代码)都称为一个进程。每一个进程都分配一个ID号。
    • 每一个进程,都会对应一个父进程,而这个父进程可以复制多个子进程。例如www服务器
    • 每个进程都可能以两种方式存在的。前台后台(守护进程),所谓前台进程就是用户目前的屏幕上可以进行操作的。后台进程则是实际在操作,但由于屏幕上无法看到的进程,通常使用后台方式执行。
    • 一般系统的服务都是以后台进程的方式存在,而且都会常驻在系统中。知道关机才能结束。

    7.2、显示系统执行的进程

    7.2.1、查看进程的相关指令

    ps    #查看目前系统中,有哪些正在执行的进程,以及这些进程执行的情况,可以不加任何参数
    ps -a   #显示当前终端的所有进程信息
    ps -u   #以用户的格式显示进程信息
    ps -x   #显示后台进程运行的参数
    ps -aux #查看详细信息  太多可以使用more分页查看  ps -aux | more
    ps -aux | grep xxxx   #使用grep 过滤查找   System V展示风格
    

    在这里插入图片描述

    • 指令说明
    参数 说明
    USER 用户名称
    PID 进程号
    %CPU 进程占用CPU百分比
    %MEM 进程占用物理内存百分比
    VSZ 进程占用的虚拟内存大小(单位:kb)
    RSS 进程占用的物理内存大小(单位:kb)
    TT 终端名称,缩写
    STAT 进程状态,其中S-睡眠,
    S-表示该进程是绘画的先导进程,
    N-表示进程拥有比普通优先级更低的优先级,
    R-正在运行,
    D-短期等待,
    Z-僵死进程,
    T-被跟踪或者被停止等待
    STARTED 进程的启动时间
    TIME CPU时间,即进程使用CPU的总时间
    COMMAND 启动进程所用的命令和参数,如果过长会被截断显示

    7.2.2、查看父进程的相关指令

    ps -ef #查看父进程
    ps -ef | more  #分页查看
    #-e 显示所有进程
    #-f 全格式
    
    ps -ef | grep xxx   #是BSD风格
    
    • 指令说明

      参数 说明
      UID 用户ID
      PID 进程ID
      PPID 父进程ID
      C CPU用于计算执行优先级的因子。数值越大,表名进程是CPU密集型运算,执行优先级会降低;数值越小,表名进程是I/O密集型运算,执行优先级会提高
      STIME 进程启动的时间
      TTY 完成的终端名称
      TIME CPU时间
      CMD 启动进程所用的命令和参数

    7.3、终止进程kill和killall

    • 介绍:若是某个进程执行一般需要停止时,或是已消耗了很大的系统资源时,此时可以考虑停止该进程。使用kill命令来完成此项任务。

      kill [选项] 进程号     #通过进程号杀死进程
      killall 进程名称       #通过进程名称杀死进程,也支持通配符,这在系统因负载过大而变得很慢时很有用
      #常用选项 -9 表示强迫进程立即停止
      

    7.4、进程的监控

    top [选项]
    #-d 秒数   指定top命令每隔几秒更新。默认是3秒在top命令的交互模式当中可以执行的命令
    #-i       使top不显示任何闲置或者僵死的进程。
    #-p	      通过指定监控进程ID来仅仅监控某个进程的状态
    #交互操作:
    #u 回车,再输入用户名-----------------专门监控某个用户
    #k 回车,再输入要结束的进程ID号--------终止指定的进程
    #P  以CPU使用率排序,默认就是此项
    #M  以内存的使用率排序
    #N  以PID排序
    #q  退出top
    
    
    netstat [选项]  #查看网络情况
    #-an   按一定顺序排列输出
    #-p    显示哪个进程在调用
    netstat -anp | more   #查看所有的网络服务
    

    在这里插入图片描述

    8、服务(Service)管理

    8.1、介绍

    服务(Service)本质就是进程,但是是运行在后台的,通常都会监听某个端口,等待其他程序的请求,比如(mysql,sshd防火墙等),因此我们又称为守护进程,是Linux中非常重要的知识点。【原理图】

    在这里插入图片描述

    8.2、service管理指令

    #service 服务名 [start | stop | restart | reload | status]
    systemctl 服务名 [start | stop | restart | reload | status]
    
    #实例1:查看当前防火墙的情况,关闭防火墙和重启防火墙
    service iptables status  #ContOS
    service iptables restart #ContOS
    
    
    这地方还是有问题  稍后自行研究.............................
    

    8.3、查看linux提供的服务

    ls -l /etc/init.d
    

    8.4、给服务的各个运行级别设置自 启动/关闭

    chkconfig
    
    chkconfig --list | grep xxx   #查看服务  ContOS
    chkconfig 服务名 --list
    chkconfig --level 5 服务名 on/off
    
    

    9、Shell编程

    9.1、为什么要学习Shell编程

    • Linux运维工程师在进行服务器集群管理时,需要编写Shell程序来进行服务器管理
    • 对于JavaEE和python程序员来说,工作的需要,你的老大会要求你编写一些Shell脚本进行程序或者是服务器的维护,比如编写一个定时备份数据库的脚本。
    • 对于大数据程序员来说,需要编写Shell程序来管理集群。

    9.2、Shell是什么

    Shell是一个命令行解释器, 它为用户提供了一个向Linux内核发送请求以便运行程序的界面系统级程序,用户可以用Shell来启动、挂起、停止甚至是编写一些程序。

    在这里插入图片描述

    9.3、Shell脚本的执行方式(fast start)

    • 多行注释

      :<<!  .....    !
      
    • 脚本以 #!/bin/bash 开头(指定用什么进行解析)

    • 脚本的编写:

      vim hello.sh  #创建一个shell脚本   脚本的后缀是什么都可以,没有也行,一般为.sh
      #编辑
      #!/bin/bash           #指定使用bash解析
      echo "hello world!"   #输出hello world
      
      #保存并退出
      
    • 脚本的执行

      • 第一种方式:

        sh hello.sh
        sh ./hello.sh
        sh /home/hello.sh
        
      • 第二种方式:

        先给hello.sh脚本加可执行权限,然后再直接执行

        chmod u+x hello.sh
        ./hello.sh   #相对路径
        #或 
        /home/hello.sh  #绝对路径
        

    9.4、Shell变量

    9.4.1、Shell的变量的介绍

    • Linux Shell 中的变量分为,系统变量用户自定义变量

    • 系统变量:HOMEHOME 、PWD、SHELLSHELL、USER等等

      比如:echo $HOME 等用法

    • 显示当前shell中所有的变量: set

    9.4.2、shell变量的定义

    9.4.2.1、规则

    变量=#定义变量  注意:中间不能用空格隔开
    unset 变量       #撤销变量
    readonly 变量    #声明静态变量  注意:静态变量不能unset
    
    • 变量名称可以由字母、数字和下划线组成,但是不能以数字开头。
    • 等号两侧不能有空格
    • 变量名称一般习惯为大写

    9.4.2.2、普通变量

    ##定义变量
    #!/bin/bash
    a=11						#定义变量a
    echo "a = $a"				#输出a
    
    unset a						#撤销变量a
    echo "unset a = $a"			#输出a
    
    

    结果:

    在这里插入图片描述

    9.4.2.3、静态变量

    ##声明静态变量
    #!/bin/bash
    readonly A=12
    echo "readonly A = $A"
    
    unset A
    echo "readonly A2 = $A"
    

    结果:

    在这里插入图片描述

    9.4.2.4、将命令的返回值赋值给变量(重点)

    A=`ls -la`    #反引号,运行里面的命令,并把结果返回给变量A
    A=$(ls -la)   #等价于反引号
    
    ###实例
    #!/bin/bash
    A=`date`
    echo "A = $A"
    
    echo "----------------"
    
    B=$(date)
    echo "B = $B"
    

    结果:

    在这里插入图片描述

    9.4.3、设置环境变量

    export 变量名=变量值     #将shell变量输出为环境变量
    source 配置文件         #让修改后的配置信息立即生效
    echo $变量名			 #查询环境变量的值
    
    ###实例
    #1、在/home/shell/tomcat.sh文件中定义TOMCAT_HOME环境变量
    #!/bin/bash
    export TOMCAT_HOME="hello,my name is tomcat!"
    
    #2、查看环境变量TOMCAT_HOME的值
    source /home/shell/tomcat.sh
    echo $TOMCAT_HOME
    
    #3、在另外一个shell程序(/home/shell/usetomcat.sh)中使用TOMCAT_HOME
    #!/bin/bash
    A=$TOMCAT_HOME
    echo "A = $A"
    
    

    9.4.4、位置参数变量

    9.4.4.1、介绍

    当我们执行一个shell脚本时,如果希望获取到命令行的参数信息,就可以使用到位置参数变量

    比如:

    ./myshell.sh 100 200  
    #这个就是一个执行shell的命令行,可以在myshell脚本中获取到参数信息,类似于python的cmd传参
    

    9.4.4.2、基本语法

    $n  #n为数字,$0代表命令本身,$1-$9代表第一到第九个参数,十以上的参数需要用大括号包含,如{10}
    $*  #这个变量代表命令行中所有的参数,$*把所有的参数看成一个整体
    $@  #这个变量也代表命令行中所有的参数,不过$@把每个参数区分对待
    $#  #这个变量代表命令行中所有参数的个数
    
    #实例:写一个脚本  打印出传递进去的11个参数及详细
    #!/bin/bash
    echo "param[0] ----  $0"
    echo "param[1] ----  $1"
    echo "param[2] ----  $2"
    echo "param[3] ----  $3"
    echo "param[4] ----  $4"
    echo "param[5] ----  $5"
    echo "param[6] ----  $6"
    echo "param[7] ----  $7"
    echo "param[8] ----  $8"
    echo "param[9] ----  $9"
    echo "param[10] ----  ${10}"
    echo "param[11] ----  ${11}"
    
    echo "param count is $#"
    echo "param  -----------  $@"
    echo "param  ===========  $*"
    

    结果:

    在这里插入图片描述

    9.4.5、预定义变量

    • 就是shell设计者实现一键定义好的变量,可以直接在shell脚本中使用

    • $$   #当前进程的进程号(PID)
      $!   #当前运行的最后一个进程的进程号(PID)
      $?   #最后一次执行的命令的返回状态。如果这个变量的值为0,证明上一个命令正确执行;如果这个变量的值为非0(具体是哪个数,由命令自己来决定),则证明上一个命令执行不正确了。
      
    • 应用实例:在一个shell脚本中简单使用一下预定义变量

      #!/bin/bash
      echo "当前进程的进程号 = $$"
      #后台的方式运行tomcat.sh
      ./tomcat.sh &   #后台运行
      
      echo "当前运行的最后一个进程的进程号 = $!"
      echo "最后一次执行的命令的返回状态 = $?"
      

      结果:

    在这里插入图片描述

    9.5、运算符

    $((运算式))
    #或
    $[运算式]
    
    expr m + n   #加
    expr m - n	 #减
    expr \*		 #乘
    expr /		 #除
    expr %		 #取余
    

    案例1:

    #!/bin/bash
    M=100
    N=5
    
    echo "M + N = $((M + N))"
    
    echo "M - N = $[M - N]"
    MN1=`expr $M \* $N`
    echo "M * N = $MN1"
    
    C=`expr $M / $N`
    echo "M / N = $C"
    
    D=`expr $M % $N`
    echo "M % N = $D"
    
    

    结果:

    在这里插入图片描述

    案例二:求出命令行输入两个参数的和

    #!/bin/bash
    A=$1
    B=$2
    SUM=$[A+B]
    echo "sum = $SUM"
    

    结果:

    在这里插入图片描述

    9.6、条件判断

    [ condition ]    #非空返回true   可使用$?严重(0位true,>1为false)   注意:condition前后要有空格
    

    常用判断条件

    • 两个整数的比较
    符号 说明
    = 字符串比较
    -lt 小于
    -le 小于等于
    -eq 等于
    -gt 大于
    -ge 大于等于
    -ne 不等于
    • 按照文件权限进行判断
    符号 说明
    -r 有读的权限
    -w 有写的权限
    -x 有执行的权限
    • 按照文件类型进行判断
    符号 说明
    -f 文件存在并且是一个常规的文件
    -e 文件存在
    -d 文件存在并是一个目录
    ##判断 "ok"和"ok"是否相等
    #!/bin/bash
    if [ "ok" = "ok" ]
    then
            echo "equal"
    fi
    
    ##23是否大于22
    if [ 23 -gt 22 ]
    then
            echo "大于"
    fi
    
    ##判断文件是否存在
    if [ -e /home/shell/aaa.txt ]
    then
    		echo "存在"
    fi
    

    9.7、流程控制

    9.7.1、if

    if [ 条件判断式 ];then
        程序
    fi
    
    ###或者
    
    if [ 条件判断式 ]
    then
        程序
    elif [ 条件判断式 ]
    then
        程序
    fi
    
    
    #编写sh脚本  输入参数,参数>=60,打印"及格了",参数<60,打印"不及格"
    #!/bin/bash
    if [ $1 -ge 60 ]
    then
            echo "及格了"
    elif [ $1 -lt 60 ]
    then
            echo "不及格"
    fi
    

    9.7.2、case

    case $变量名 in
    "值1")
    程序1
    ;;
    "值2")
    程序2
    ;;
    ..........
    "值n")
    程序n
    ;;
    *)
    如果变量的值都不是以上的值,则执行此程序
    ;;
    esac
    
    #实例
    
    #!/bin/bash
    case $1 in
            1)
                    echo "一"
                    ;;
            2)      
                    echo "二"
                    ;;
            3)      
                    echo "三"
                    ;;
            *)      
                    echo "其他"
                    ;;
    esac 
    

    9.7.3、for循环

    #语法一
    for 变量 in 值1 值2 ... 值n
    do
     程序
    done
    
    #实例:打印命令行输入的参数  $* $@
    #!/bin/bash
    for i in "$*"
    do
    		echo "the num is $i"
    done
    
    echo "-------------------------"
    
    for j in "$@"
    do
    		echo "the num is $j"
    done
    
    #语法二
    for((初始值;循环控制条件;变量变化))
    do
    	程序
    done
    
    #实例:从1加到100并输出结果
    #!/bin/bash
    SUM=0
    for((i=1;i<=100;i++))
    do
    	SUM=$[$SUM+$i]
    done
    echo "最终结果是:$SUM"
    

    9.7.4、while循环

    while [ 条件判断式 ]
    do
    	程序
    done
    
    #案例:从命令行输入一个n,统计从1+...+n的值是多少
    #!/bin/bash
    SUM=0
    i=0
    while [ $i -le $1 ]
    do
    		SUM=$[$SUM+$i]
    		i=$[$i+1]
    done
    echo "sum = $SUM"
    

    9.8、read读取控制台输入

    read 选项 参数
    #-p 指定读取值时的提示符(阻塞)
    #-t 指定读取值时等待的时间(秒),如果没有在指定的时间内输入,就不再等待了
    
    #案例1:读取控制台输入一个num值
    #!/bin/bash
    read -p "请输入一个数:" NUM1
    echo "你输入的值是:$NUM1"
    
    #案例2:读取控制台输入一个num值,在10秒内输入。
    #!/bin/bash
    read -t 10 -p "请输入一个数:" NUM1
    echo "你输入的值是:$NUM1"
    
    

    9.9、函数

    9.9.1、系统函数

    basename [pathname] [suffix]  #返回完整路径最后/的部分,常用于获取文件名
    #basename命令会删掉所有的前缀包括最后一个("/")字符,然后将字符串显示出来
    
    #案例:请返回/home/shell/hello.sh的"hello.sh"部分
    basename /home/shell/hello.sh
    #shell脚本中:  echo `basename /home/shell/hello.sh`
    
    #案例:请返回/home/shell/hello.sh的"hello"部分
    basename /home/shell/hello.sh .sh
    #shell脚本中:  echo `basename /home/shell/hello.sh .sh`
    
    dirname 文件绝对路径 
    #返回完整路径最后/的前面的部分,常用于返回路径部分
    #从给定的包含绝对路径的文件名中去除文件名(非目录的部分),然后返回剩下的路径(目录的部分)
    
    #实例:请返回/home/shell/hello.sh的/home/shell
    dirname /home/shell/hello.sh
    #shell脚本中:  echo `dirname /home/shell/hello.sh`
    

    9.9.2、自定义函数

    function funname()
    {
        Action;
        [return int;]
    }
    
    #应用实例:编写一个函数,计算两个参数的和,getSum
    function getSum()
    {
        SUM=$[$n1+$n2]
        echo "和是:$SUM"
    }
    read -p "请输入第一个数 n1:" n1
    read -p "请输入第二个数 n2:" n2
    
    getSum $n1 $n2
    

    9.10、Shell编程综合案例

    9.10.1、需求:

    • 每天凌晨2:10备份数据库 kugou 到 /home/mysql/data/db
    • 备份开始和备份结束能够给出相应的提示信息
    • 备份后的文件要求以备份时间为文件名,并打包成.tar.gz的形式,比如:2019-6-15_222222.tar.gz
    • 在备份的同时,检查是否有10天前备份的数据库文件,如果有就将其删除。

    9.10.2、实现

    9.10.2.1、写脚本

    /home/shell/testmysql.sh

    #!/bin/bash
    #完成数据库的定时备份
    
    echo "=========开始备份=========="
    
    #备份的路径
    BACKUP=/home/mysql/data/db          
    echo "备份的路径:${BACKUP}"
    
    #获取到当前的时间
    DATETIME=$(date +%Y-%m-%d_%H%M%S)  
    echo "当前时间:${DATETIME}"
    
    #主机
    HOST=localhost
    echo "主机:${HOST}"
    
    #用户名
    DB_USER=yxh_mysql
    echo "用户名:${DB_USER}"
    
    #密码
    DB_PWD=a
    echo "密码:${DB_PWD}"
    
    #备份数据库名
    DATABASE=shelltest
    echo "备份数的据库名:${DATABASE}"
    
    #创建备份路径
    #如果备份路径存在,就使用,否则就创建
    [ ! -d "$BACKUP/$DATETIME" ] && mkdir -p "$BACKUP/$DATETIME"
    
    #执行mysql的备份数据库命令
    mysqldump -u${DB_USER} -p$DB_PWD --host=$HOST $DATABASE | gzip > $BACKUP/$DATETIME/$DATETIME.sql.gz
    
    #打包备份文件
    cd ${BACKUP}
    tar -zcvf $DATETIME.tar.gz $DATETIME
    
    #删除临时目录
    rm -rf $BACKUP/$DATETIME
    
    #删除10天前的备份文件
    find $BACKUP -mtime +10 -name "*.tar.gz" -exec rm -rf {} \;
    
    echo "=========备份完成========"
    
    

    9.10.2.2、定时

    crontab -e
    
    10 2 * * * /home/shell/testmysql.sh
    
    展开全文
  • 说来惭愧,入行以来,对于Linux的基本操作是知之甚少,抽空学习了下基本的一些概念和指令。废话不多说,记录下在慕课网学习的一些总结。Linux达人养成计划 第3章 命令基本格式及文件处理命令 Linux命令格式 ...

    最近一段时间负责的系统频频出现各种诡异的问题,也给了自己一个偷懒的借口没有更新博客。说来惭愧,入行以来,对于Linux的基本操作是知之甚少,抽空学习了下基本的一些概念和指令。废话不多说,记录下在慕课网学习的一些总结。Linux达人养成计划

    第3章 命令基本格式及文件处理命令

    Linux命令格式

    [root@VM_0_17_centos ~]#

    root 代表当前登录用户(Linux当中管理员账号是root)

    @ 无意义

    VM_0_17_centos 主机名

    ~ 当前目录 (~也表示家目录)

    # 表示超级用户(普通用户提示符是”$”)

    Linux命令格式

    命令 [选项] [参数]
    注意:个别命令使用不遵循此格式,当有多个选项时,可以写在一起,简化选项与完整选项 -a 等于 –all

    ls [选项] [文件或目录]

    -a 显示所有文件,包括隐藏文件
    -l 显示详细信息
    -d 查看目录属性
    -h 人性化显示文件大小
    -i 显示inode

    -rw-r--r-- 1 root root 605 Mar 18 20:28 .jp1.tar.gz

    -rw-r--r--
    - 文件类型(- 文件 d 目录 l 软链接文件)
    root u所有者 权限为rw-
    root g所属组 权限为 r--
    o其他人 权限为 r--
    r读 w写 x执行

    1 引用计数,代表这个文件被调用的次数
    605 文件大小 Bit
    Mar 18 20:28 最后修改时间
    . 隐藏文件
    jp1.tar.gz 文件名

    pwd 显示当前目录

    Linux目录处理命令

    mkdir -p [目录名]

    -p 递归创建

    cd [目录]

    cd ~ 进入家目录
    cd 进入家目录
    cd - 返回上次的目录
    cd .. 进入上一级目录
    cd . 进入当前目录

    rmdir [目录]

    删除空白目录,若包含文件则不能删除

    rm -rf [目录]

    强制删除

    cp [选项] [原文件或目录] [目标目录]

    选项
    -r 复制目录
    -p 连带文件属性复制
    -d 若原文件是链接文件,则复制链接属性
    -a 相当于都复制 同-pdr

    mv [原文件或目录] [目标目录]

    用于改名或剪切

    Linux常见目录作用

    /bin 用于保存命令的目录
    /sbin 用于保存命令的目录(只有root能用)
    /usr/bin 用于保存命令的目录
    /usr/sbin 用于保存命令的目录(只有root能用)
    /boot启动目录,系统启动的文件都放这里,一般不动该目录
    /dev 该目录下存放的都是设备相关的文件,一般也不要去动
    /etc 主要存放配置文件的目录
    /home 是普通用户目录 (普通用户对应目录下可以随便放文件)
    /root 是超级用户目录(root用户对应目录下可以随便放文件)
    /lib 存放linux系统函数库

    /mnt 空目录,用于挂在外接存储设备
    /media 空目录,用于挂在外接存储设备(在原来的linux系统中没有)
    /misc 空目录,用于挂在外接存储设备(在原来的linux系统中没有)
    /proc 是内存过载点;这两个目录的内容直接写在内存,因此不能直接操作
    /sys 是内存过载点;这两个目录的内容直接写在内存,因此不能直接操作
    /temp 临时目录(随便放文件)
    /usr 系统软件资源目录
    /var 系统相关文档内容

    Linux链接命令

    ln -s [原文件] [目标文件]

    生成链接文件
    -s 创建软链接(目录要写绝对路径)

    搜索文件步骤

    Created with Raphaël 2.1.2用户用户索引表索引表文件分区文件分区1、搜索索引表2、根据索引表索引3、文件返回

    硬链接可以看成是一个教室的两个门,对应到的目标文件都是同一个;
    不能跨分区;
    不能针对目录;
    修改任意文件,原文件都改变

    软链接相当于一个快捷方式

    特征:
    1、类似Windows快捷方式;
    2、软链接拥有自己的I节点和Block块,但是数据块中只保存原文件的文件名和I节点号,并没有实际的文件数据;
    3、lrwxrwxrwx 软链接文件的权限都是rwxrwxrwx
    4、修改任意文件,另一个都改变
    5、删除原文件,软链接不能使用
    6、做软链接,修改原文件一定要写绝对路径,否则会报错;

    软链接读取文件过程:

    Created with Raphaël 2.1.2用户用户索引表索引表文件分区文件分区1、搜索软链接索引2、根据索引找到软链接对应分区文件3、真正文件的索引4、根据索引找到文件5、返回文件

    第4章 文件搜索命令

    Linux中文件搜索命令locate

    locate 文件名

    在后台数据库中按文件名搜索,搜索速度更快;
    搜索的数据库为 /var/lib/mlocate
    updatedb 该命令更新数据库(正常情况下数据库一天更新一次);
    搜索配置文件:/etc/updatedb.conf
    PRUNE_BIND_MOUNTS="yes" 开启搜索限制
    PRUNEFS= 搜索时,不搜索的文件系统
    PRUNENAMES=搜索时不搜索的文件类型
    PRUNEPATHS= 搜索时不搜索的路径

    Linux中命令搜索命令

    whereis 命令

    搜索命令所在的路径及帮助文档所在位置;
    不能操作linux自带的shell命令,如 cd
    选项:
    -b 只查找可执行文件
    -m 只查找帮助文档

    which 命令

    能查看命令的可执行文件路径以及别名
    不能操作linux自带的shell命令,如 cd

    echo $PATH

    环境变量都用:分隔
    PATH定义系统搜索命令的路径(或绝对路径执行)
    /usr/lib64/qt-3.3/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/usr/java/jdk1.7.0_75/bin:/root/.local/bin:/root/bin

    Linux中 find命令

    find [搜索范围] [搜索条件]

    find / - name install.log 从根目录开始,搜索文件名为install.log的文件;
    尽可能避免大范围搜索,会非常消耗系统资源;
    可以使用通配符:
    * 匹配任意内容
    ? 匹配任意一个字符
    [] 匹配任意一个中括号内的字符
    -iname 不区分大小写
    -user 按照所有者搜索
    -nouser 查找所有没有所有者的文件
    根据时间查找:
    -mtime +10 查找10天之前的修改文件(也可以是创建时间)
    -mtime 10 查找10天前当天的修改文件
    -mtime -10 查找10天内的修改文件
    -atime 天数 文件访问时间(天数同上)
    -ctime 天数 改变文件属性时间(天数同上)
    根据文件大小查找:
    -size +10k 查找大于10k的文件(小写k)
    -size 10M 查找等于10M的文件(大写M)
    -size -10G 查找小于10G的文件(大写G)
    -size 10 不加单位表示搜索10个扇区,一个扇区512B(不推荐使用)
    根据i节点号查询:
    ls -i 可以查看i节点
    -inum 262422 查找i节点是162422的文件
    组合查询:
    -a 逻辑与
    -o 逻辑或
    -exec/-ok 命令 {} \; 对搜索结果进行操作
    例:
    find /etc -size +20k -a -mtime -10 -exec ls -lh {} \;
    查找大于20k并且在10天之内操作过的文件,将结果展示出来;

    Linux中 grep命令

    grep [选项] 字符串 文件名

    在文件当中匹配符合条件的字符串
    选项:
    -i 忽略大小写
    -v 排除制定字符串
    与find的区别:
    find命令:在系统当中搜索符合条件的文件名,如果需要匹配,使用通配符能完全匹配;
    grep命令:在文件当中搜索符合条件的字符串,如果需要匹配,使用正则表达是进行匹配;

    第5章 帮助命令

    Linux中 帮助命令

    man 命令

    获取制定命令的帮助,如:man ls
    打开帮助文档之后,快速查找可以先输入 / 再输入要查找的内容;
    查到之后 n表示 往下查找,pshift + n 往上查找
    man -k passwd 查看所有包含该命令的帮助文档 等同于 apropos passwd 可认为在帮助文档中用字符串搜索

    man的级别
    1. 查看命令的帮助
    2. 查看可悲内核调用的函数的帮助
    3. 查看函数和函数库的帮助
    4. 查看特殊文件的帮助(主要是/dev目录下的文件)
    5. 查看配置文件的帮助
    6. 查看游戏的帮助
    7. 查看其它杂项的帮助
    8. 查看系统管理员可用命令的帮助
    9. 查看内核相关文件的帮助

    例: man passwd -5

    man -f 命令 等同于 whatis 命令

    whatis 能查看命令拥有哪个级别的帮助

    Linux中 其他帮助命令

    命令 --help

    获取选项的帮助

    help 命令

    help 专门获取内部命令,若help ls 将报错,因为ls非内部命令

    info 命令

    回车 进入子帮助页面(带有*号标记)
    u 进入上层页面
    n 进入下一个帮助小节
    p 进入上一个帮助小节
    q 退出

    第6章 压缩命令

    Linux 中的压缩命令

    常用的压缩格式

    .zip .gz .bz2
    .tar.gz .tar.bz2 实际情况下更加常用

    .zip格式压缩

    zip 压缩文件名 源文件 压缩文件

    zip -r 压缩文件名 源目录 压缩目录

    .zip格式解压

    unzip 压缩文件

    .gz格式压缩

    gzip 源文件 压缩为.gz格式的压缩文件,源文件会消失
    gzip -c 源文件 > 压缩文件 压缩为.gz格式,源文件保留
    gzip -r 目录 压缩目录小所有的子文件,但是不能压缩目录

    .gz格式解压

    gzip -d 压缩文件
    gunzip 压缩文件

    .bz2格式压缩

    bzip2 源文件 压缩为.bz2格式,不保留源文件
    bzip2 -k 源文件 压缩之后保留源文件
    注意:bzip2命令不能压缩目录

    .bz2格式解压

    bzip2 -d 压缩文件 -k 选项可保留源文件
    bunzip2 压缩文件 -k 选项可保留源文件

    打包命令tar
    tar -cvf 打包文件名 源文件

    选项:
    -c 打包
    -v 显示过程
    -f 指定打包后的文件名
    例:
    tar -cvf longzls.tar longzls

    解打包命令tar
    tar -xvf 打包文件名

    选项:
    -x 解打包
    例:
    tar -xvf longzls.tar

    .tar.gz压缩格式

    .tar.gz格式是先打包为.tar格式,再压缩为.gz格式
    压缩:
    tar -zcvf 压缩包名.tar.gz 源文件
    -zc 压缩为.tar.gz格式
    解压:
    tar -zxvf 压缩包名.tar.gz
    -zx 解压缩.tar.gz格式

    .tar.bz2压缩格式

    压缩:
    tar -jcvf 压缩包名.tar.bz2 源文件
    -jc 压缩为.tar.bz2格式
    解压:
    tar -jxvf 压缩包名.tar.bz2 源文件
    -jx 解压.tar.bz2格式

    注意:

    • 解压到指定目录需要加上 -C 指定目录
    • 多个文件压缩到一起只需要把用空格隔开多个文件即可
    • -t 选项可以只查看压缩文件而不打开

    第7章 关机与重启命令

    Linux中关机与重启命令

    shutdown [选项] 时间 &

    &表示后台执行
    选项:
    -c 取消
    -h 关机
    -r 重启
    例:
    shutdown -r 05:30 &5:30分重启

    其他关机命令(不常用也不建议用)

    halt
    poweroff
    init 0

    其他重启命令

    reboot 相对较安全
    init 6

    系统运行级别


    • 0 关机
    • 1 单用户
    • 2 不完全多用户,不含NFS服务
    • 3 完全多用户
    • 4 未分配
    • 5 图形界面
    • 6 重启

    cat /etc/inittab 查看运行级别配置文件
    id:3:initdefault 修改系统默认运行级别
    runlevel 查询系统运行级别
    logout 退出登录命令

    第8章 其他常用命令

    Linux中挂载命令

    mount 查询系统同已经挂载设备

    mount -a 依据配置文件/etc/fstab的内容自动挂载
    :因为光盘或U盘不能保证每次都能开机挂载,因此不建议自动挂载,否则可能导致系统由于找不到挂载目录而启动崩溃
    mount [-t 文件系统] [-o特殊选项] 设备文件名 挂载点
    选项:
    -t 文件系统:假如文件系统类型来指定挂载的类型,可以ext3、ext4、iso9660(光盘的文件系统)等文件系统
    -o 特殊选项:可以指定挂载的额外选线

    参数 说明
    atime/noatime 更新访问时间/不更新访问时间。访问分区文件时,是否更新文件的访问时间,默认为更新
    async/sync 异步/同步,默认为异步
    auto/noauto 自动/手动,mount -a命令执行时,是否会自动安装/etc/fstab文件内容挂载,默认为自动
    defaults 定义默认值,相当于rw,suid,dev,exec,auto,nouser,async这七个选项
    exec/noexec 执行/不执行,设定是否允许在文件系统中执行可执行文件,默认是exec允许
    remount 重新挂载已经挂载的文件系统,一般用于指定修改特殊权限
    rw/ro 读写/只读,文件系统挂载时,是否具有读写权限,默认是rw
    suid/nosuid 具有/不具有SUID权限,设定文件系统是否具有SUID和SGID的权限,默认是具有
    user/nouser 允许/不允许普通用户挂载,设定文件系统是否允许普通用户挂载,默认是不允许,只有root可以挂载分区
    usrquota 写入代表文件系统支持用户磁盘配额,默认不支持
    grpquota 写入代表文件系统支持组磁盘配额,默认不支持

    例:
    mount -o remount,noexec /home重新挂载/boot分区,并使用noexec权限,会导致/home目录下无法执行可执行文件
    mount -o remount,exec /home 改回来
    例:
    /dev/sda5 on / type ext4 (rw)
    /dev 保存所有硬件设备的目录
    sd SATA接口或scars接口
    a 表示第一块硬盘
    5表示第1逻辑分区
    /根目录
    ext4文件系统
    rw权限

    挂载光盘

    mkdir /mnt/cdrom/建立挂载点
    mount -t iso9660 /dev/cdrom /mnt/cdrom 挂载光盘
    mount /dev/sr0 /mnt/cdrom sr0是Linux指定的CD目录

    卸载命令

    unmount 设备文件名或挂载点
    例:
    umount /mnt/cdrom

    挂载U盘

    fdisk -l 查看U盘设备文件名
    mount -t vfat /dev/sdb1 /mnt/usb/ Linux默认不支持NTFS文件系统,此处的vfat指的是Windows中的fat32

    /proc
    /sys

    都是内存目录,系统会自动挂载,使用者不要去操作它
    我们一般能用到的是 根分区//boot, /home

    Linux中用户登录查看命令

    查看登录用户信息
    w 用户名

    命令输出:
    USER :登录的用户名
    TTY :登录终端
    FROM :从哪个IP地址登录
    LOGIN@ : 登录时间
    IDLE :用户闲置时间
    `JCPU: 指的是和该终端连接的所有进程占用的时间。这个时间里并不包括过去的后台作业时间,但却包括当前正在运行的后台作业所占用的时间;
    PCPU :是指当前进程所占用的时间
    WHAT : 当前正在运行的命令

    who 用户名

    命令输出 :
    用户名
    登录终端
    登录时间(登录来源IP地址)

    查询当前登录和过去登录的用户信息
    last

    last 命令默认是读取/var/log/wtmp文件数据
    命令输出:
    用户名
    登录终端
    登录IP
    登录时间
    退出时间(在线时间)

    查看所有用户的最后一次登录时间
    lastlog

    lastlog 命令默认是读取/var/log/lastlog文件内容
    命令输出:
    用户名
    登录终端
    登录IP
    最后一次登录时间

    第9章 Shell基础

    shell概述

    什么是shell

    shell是一个命令行解释器,它为用户提供了一个向Linux内核发送请求以便运行程序的界面系统级程序,用户可以用shell来启动,挂起,停止甚至是编写一些程序;
    shell还是一个功能强大的编程语言,易编写,易调试,灵活性较强。shell是解释执行的脚本语言,在shell中可以直接调用Linux系统命令.

    shell分类

    Bourne:sh、ksh、Bash、psh、zsh
    C:csh、tcsh
    两种语法彼此不兼容
    echo $SHELL 查看当前shell
    当前linux中的标准shell是bash

    vi /etc/shells

    查看支持的shell类型

    脚本执行方式

    echo输出命令
    echo [选项] [输出内容]

    选项:
    -e 支持反斜线控制的字符转换

    控制字符 作 用
    \a 输出警告音
    \b 退格键,也就是向左删除键
    \n 换行符
    \r 回车键
    \t 制表符,也就是Tab键
    \v 垂直制表符
    \0nnn 按照八进制ASCII码表输出字符。其中0为数字零,nnn是三位八进制数
    \xhh 按照十六进制ASCII码表输出字符。其中hh是两位十六进制数

    常规用法 : echo -e \ "\x68"
    输出颜色
    echo -e "\e[1;31m 家人就要加凤姐 \e[0m"

    30m=黑色,31m=红色,32m=绿色,33m=黄色
    34m=蓝色,35m=洋红,36m=青色,37m=白色

    第一个脚本
    vi helloworld.sh

    #!/bin/bash
    echo -e "\e[1;34m hello world! \e[0m"

    脚本执行

    赋予执行权限,直接运行
    chmod 755 helloworld.sh
    ./helloworld.sh
    通过Bash调用执行脚本
    bash helloworld.sh

    别名与快捷键

    别名永久生效与删除别名
    vi ~/.bashrc写入环境变量配置文件
    source 环境变量文件 环境变量直接生效

    alias 查看系统中所有的命令别名
    alias 别名= '原命令' 设定命令别名
    unalias 别名 删除别名

    命令生效顺序
    1. 执行用绝对路径或相对路径执行的命令
    2. 执行别名
    3. 执行Bash的内部命令
    4. 执行按照$PATH环境变量定义的目录查找顺序找到第一个命令

    常用快捷键

    ctrl+c 强制终止当前命令
    ctrl+l 清屏 同命令clear
    ctrl+a 光标移动到命令行首
    ctrl+e 光标移动到命令行尾
    ctrl+u 从光标所在位置删除到首行
    ctrl+z 把命令放入后台
    ctrl+r 在历史命令中搜索 上下滚动

    历史命令

    历史命令
    history [选项] [历史命令保存文件]

    选项:
    -c 清空历史命令
    -w 把缓存中的历史命令写入历史命令保存文件 ~/.bash_history
    /etc/profile HISTSIZE属性可设置保存历史命令条数,默认1000条

    历史命令的调用

    ↑↓ 调用以前的历史命令
    !n 重复执行第n条历史命令
    !! 重复执行上一条命令
    !字串 重复执行最后一条以该字串开头的命令

    输出重定向

    标准输入输出

    设备 设备文件名 文件描述符 类型
    键盘 /dev/stdin 0 标准输入
    显示器 /dev/sdtout 1 标准输出
    显示器 /dev/sdterr 2 标准错误输出

    输出重定向

    类型 符号 作用
    标准输出重定向 命令>文件 以覆盖的方式,把命令的正确输出到制定的文件或设备当中
    标准输出重定向 命令>>文件 以追加的方式,把命令的正确输出到制定的文件或设备当中
    标准错误输出重定向 命令2>文件 以覆盖的方式,把命令的错误输出到制定的文件或设备当中
    标准错误输出重定向 命令2>>文件 以追加的方式,把命令的错误输出到制定的文件或设备当中

    正确输出和错误输出同时保存

    符号 作用
    命令>文件 2>&1 以覆盖的方式,把正确输出和错误输出都保存到一个文件当中
    命令>>文件 2>&1 以追加的方式,把正确输出和错误输出都保存到一个文件当中
    命令 &> 文件 以覆盖的方式,把正确输出和错误输出都保存在同一个文件当中
    命令 &>> 文件 以追加的方式,把正确输出和错误输出都保存在同一个文件当中
    命令>>文件1 2>>文件2 把正确的输出追加到文件1中,吧错误的输出追加到文件2中

    ls &>/dev/null把输出结果直接丢了
    输入重定向
    wc 直接输入字符 ctrl + d 停止输入
    wc [选项][文件名]

    -c 统计字节数
    -w 共计单词书
    -l 统计行数

    管道符

    多命令顺序执行

    多命令执行符 格式 作用
    ; 命令1;命令2 多个命令顺序执行,命令之间没有任何逻辑联系
    && 命令1&&命令2 逻辑与。当命令1正确执行,则命令2才会执行;当命令1执行不正确,则命令2不会执行
    || 命令1||命令2 逻辑或。当命令1执行不正确,则命令2才会执行;当命令1正确执行,则命令2不会执行

    管道符
    命令1 | 命令2

    命令1的整除输出作为命令2的操作对象
    more 分页显示
    ls -l /etc | more
    查询结果翻页:
    空格表示向下翻一页
    回车表示向下滚动一行
    /字符串表示查询字符串
    q离开more界面

    通配符

    通配符 作用
    ? 匹配一个任意字符
    * 匹配0个或人一多个任意字符,也就是可以匹配任何内容
    [] 匹配括号中任意一个字符。例如:[abc]代表一定匹配a,b,c中的一个字符
    [-] 匹配中括号中任意一个字符,-代表一个范围。例如:[a-z]代表匹配一个小写字母。
    [^] 逻辑非,表示匹配不是中括号内的一个字符。例如:[^0-9] 代表匹配一个不是数字的字符

    Bash中其他特殊符号

    符号 作用
    单引号。在单引号中所有的特殊符号,如“$”和 “`”(反引号)没有特殊含义
    “” 双引号。在双引号中特殊符号都没有特殊含义,但是 “$”、“`”和“\”是例外,拥有“调用变量的值”、“引用命令”和“转义符”的特殊含义
    ` 反引号。反引号括起来的内容是系统命令,在Bash中会先执行它。和$()作用一样,不过推荐使用$(),因为反引号非常容易看错。
    $() 和反引号作用一样,用来引用系统命令。
    # 在Shell脚本中,#开头的行代表注释
    $ 用户调用变量的值,如果需要调用变量name的值时,需要用$named 的方式得到变量的值。
    \ 转义符,跟在\之后的特殊符号将失去特殊含义,变为普通字符。如\$将输出“$”符号,而不当做是变量引用。

    真的应该是一条幸福的分割线。吐槽一下,写这个东西花的时间比学习的时间还要久,不过这样过后也回顾了一遍基础知识,一字一句呕心沥血打出来的,希望能帮到一些人。另外,此次笔记也加深了对markdown语法的了解,以后要多加勤快才是了。

    展开全文
  • 最全Linux学习笔记

    2020-03-31 11:40:48
    Linux学习笔记 Linux运维的岗位: 运维开发 应用运维 系统运维工程师 :最顶级的 云计算运维 大数据运维 Linux系统运维 学习路径: 系统管理 服务管理 脚本开发 系统扩展 常见站点系统架构演变 单机: Http ...

    Linux学习笔记

    Linux运维的岗位:

    • 运维开发
    • 应用运维
    • 系统运维工程师 :最顶级的
    • 云计算运维
    • 大数据运维
    • Linux系统运维

    学习路径:

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LehZQMC9-1585625846977)(C:\Users\15209\Pictures\博客\images\linux001.jpg)]

    • 系统管理
    • 服务管理
    • 脚本开发
    • 系统扩展

    常见站点系统架构演变

    单机:

    • Http

    • PHP module

      • php app
    • mysql

    • http

    • tomcat

      • jsp app
    • Mysql

    多机:

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xO3X4pkS-1585625846980)(C:\Users\15209\Pictures\博客\images\linux002.jpg)]
    缓存:

    ->page cache -> httpd->php app-> mysql

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-oYHSByal-1585625846980)(C:\Users\15209\Pictures\博客\images\linux003.jpg)]

    VNC :Virtual Network Computing 协议 :

    • 实现虚拟网络计算
    • 桌面共享
    • TigerVNC,RealVNC
    • C/S架构
    • vncviewer:client
    • vncserver:server
    • ftp://172.16.0.1/pub :统一资源定位符
    • ip_forward是开放的 server:172.16.0.1 192.168.0.254 192.168.1.254

    ftp服务:ftp://172.16.0.1

    http服务: http://172.16.01

    dhcp服务:172.16.250.X

    知识—>技能 :需要经过不断的练习

    结果导向:只认功劳不认苦劳

    主动学习:

    • 动手实践 40%
    • 讲给别人听 :70%
    • 写博客
      • what why when where who
      • how

    被动学习:

    • 听课 :10%
    • 笔记 :20%

    Linux 运维课程体系:

    • Linux入门
      • 操作系统基础概念
      • 系统管理的基本工具(文件管理,安装包管理)
      • linux服务及安全管理 :基本功,每个地方都用得到
        • Httdp lamp lnmp
        • Cache memcached varnish
        • DB:mysql (mariadb)
      • Linux集群
        • LB Cluster Ngnix LVS
        • HA Cluster Keepalived
      • Linux Ops:
        • ansible
      • Linux监控工具
        • Monitoring:zabbix
      • Shell编程
      • Http:
        • tomcat lnmt ,lamt session cluster
        • 分布式存储系统:
          • MogileFS,GlusterFS
        • Mysql:
          • HA Cluster
          • MHA机制
          • 备份恢复
          • MYSQL Replication
          • Read-Writer splitting
        • HA Cluster :Corosync+pacemaker, p cs/crmsh
        • LB Cluster: haproxy
        • NoSQL : redis ,mongadb,HBase
      • 运维工具:
        • puppet (自动化运维工具) saltstack,cobbler
      • 虚拟化:
        • linux操作系统原理:虚拟化技术原理
        • kvm虚拟化引用详解:xen虚拟化
        • 虚拟化网络:SDN 交换机,路由器,二层交易,三层交易
        • OpenStack:云栈,能管理物理机还能和Docker结合
      • Docker:容器云
      • ELK Stack :ElasticSearch (搜索引擎),Logstash(日志搜集),Kibana
      • 大数据 :研发很热,Hadoop v2,构建分布式集群,并行存储及分析平台
        • HBASE Hive
        • Storm ,Spark
      • 系统优化:二次优化
      • Python编程:
        • python开发工程师的目标
        • 案列
        • 每天一千行代码
    • RedHat:
      • RHCSA
      • RHCE
      • RHCA (架构师)

    IT技术领域:

    • 研发
      • 硬件研发
      • 软件研发
    • 应用
      • Linux运维:Iinux生态圈中的各应用程序的应用
      • Shell脚本编程: 让应用自动化完成
      • Python:专业编程语言
        • ansible,openstack
      • DevOps:
        • development
        • Operation

    计算机与操作系统:

    ​ ENIARC:

    • CPU:运算器,控制器,寄存器,缓存

    • 存储器:内存,RAM(Ramdon Access Memory)

    • INput Output

      程序:指令+数据

    • 算法+数据结构

    OS的接口有俩种:

    • GUI :Graphic User Interface
    • CLI : Command Line Interface
      • bash
      • zsh
      • sh
      • csh
      • tesh

    操作系统的功能:

    • 驱动程序
    • 进程管理
    • 安全
    • 网络功能
    • 内存管理
    • 文件系统

    API: Aplication Programer Interface

    ​ 程序员面对的编程接口

    POSIX:Portable Operation System

    ABI :Application Binary Interfa

    ​ 程序应用者面对运行程序的接口

    GUN:

    ​ 源码:编译成为二进制格式

    ​ gcc ,glibc,vi ,linux

    ​ Linux是由各发行商将源码编译成的

    ​ 发行版:数百种

    ​ Debian:Ubuntu(mint),knopix,(使用于技术更高的)

    ​ Slackware: SuSe,OpenSUSE

    ​ RedHat :RedHat9.0:

    ​ RedHat EnterPrise Linux:RHEL :18个月发行一次 (CentOS)

    ​ Fedora Core:6个月一个版本

    ​ Gentoo:(后起的)

    ​ ArchLinux:

    软件程序:版本号

    major.minor.release

    • linux:0.99,2.2,2.4
    • www.kernel.org

    Linux :

    ​ GUN:发行版也有自己的版本号

    Linux基础:

    CPU架构

    • X86
    • X64(amd64)
    • m68000,m68k
    • arm系列(手持移动终端最常见的CPU)
    • ultrsparc solaris
    • power:性能极强,功耗和体积很大
      • 复杂指令集(Intel)
      • 精简指令集(power)
    • powerpc,ppc(简装版power),苹果工作站
    • HP :alpha hp-ux

    汇编语言:portable极差

    汇编器:支持交叉编译,cross compile

    代码在各个平台编译,才能适用各种平台

    • 开源:提供源代码
    • 闭源:只提供二进制程序

    Stallman:GUN

    • 开源协定:
      • GPL:General Public License
      • 任何一款软件只要遵循GPL协议,版权就归GPL,任务其他人只要内置GPL代码就得遵守GPL协定。
        • ​ copyleft
      • LGPL协议:更少要求的GPL协定
        • 基于库接口调用可以不开源
        • FSF :Free
      • GPL2 GPL3 :BSD
      • Apache:
        • ASF:Apache Software Foundation
      • 双线授权:
        • community:遵循开源协定
        • 商业授权版本 (Enterprise):提供额外的服务和功能(企业版)
    • 程序管理
      • 程序组成部分
        • 二进制文件
        • 配置文件(bin)
        • 库文件(lib)
        • 帮助文件
      • 程序包管理器
        • x:程序的组成文件打包成一个或有限几个文件:安装操作 卸载操作 查询
        • Debian :dpkg(deb) apt-get
        • RedHat: rpm yum -->dnf
        • S.uS.E :rpm , zypper
        • ArchLinux:port
        • Gentos :边安装边编译(很难玩,要求很高)
        • LFS: linux From Scratch
      • 安装Linux:
        • 虚拟机:linux
          • 计算机:CPU,内存,IO(可以复用 -》时序复用,空分复用) 操作系统就是一个虚拟机,将硬件虚拟出来,通过时分复用空分复用。
          • 专业的虚拟化软件程序
            • VMware
            • virtualbox(Oracle)
        • Centos的镜像站点:
          • http://mirrors.aliyun.com
          • http://mirrors.163.com
          • http://mirrors.sohu.com
          • 开始学的时候最好选择everything版本

    ISO镜像:

    • 硬盘分区:留出一些空间
    • 用户界面:
      • GUI
        • GNome
        • KDE
      • CLI
        • bash
        • zsh
        • sh
      • ~]# ss -tnl :查看系统监听与tcp协议的22端口
      • ~]# ifconfig 或者 ip addr list
        • eth0:网卡名
      • iptables -L -n :查看防火墙
      • CentOS7:(关闭防火墙)
        • systemctl stop firewalld .service :关闭防火墙,只当时有效
        • systemctl disable firewalld.service
      • CentOS6:
        • service.iptables stop
        • chkconfig iptables off
    • echo $SHELL :查看shell类型

    终端设备:

    • 多任务
    • 多用户 (时序复用,同时使用)
      • 用户接口程序(进程)
      • 键盘+显示器==terminal
    • 物理终端(控制台):console
    • 虚拟终端:Ctrl+Alt+F[1-6] tty
    • 图形终端: Ctrl+Alt+F7
    • 串行终端:如果不需要图形化界面,就不需要显卡 ttyS
    • 伪终端:桌面上打开的控制台窗口 :pty

    Linux的哲学思想之一:一切皆文件

    • 表现之一:硬件设备也表示文文件
      • 物理终端: /dev/console
      • 虚拟终端: /dev/tty# [1,6]
      • 串行终端:/dev/ttyS#
      • 伪终端(远程连接窗口): /dev/pts/# #都代表数字
    • 在启动设备之后,在其上关联一个用户程序,即可实现与用户的交互
    • 查看终端设备:~]#tty

    启动GUI

    • 在虚拟终端接口运行命令:startx &

    接口:

    • CLI接口(命令行接口)
      • [root@csm ~]# command (前面是命令提示符)
      • 只能运行不依赖图形功能的程序
      • ~:代码用户当前所在的目录
      • root:代表用户
      • csm:主机名
      • ~]$ :普通用户
      • ~]# :管理员账号
    • 几个基础指令:
      • tty:查看当前终端设备
      • ifconfig :或 ip addr list
      • echo :回显
    • 关机指令:
      • Centos : systemctl poweroff systemctl reboot
      • *:
        • poweroff
        • reboot
        • halt

    Linux的哲学思想:

    • 一切皆文件
      • 所有的系统资源,包括硬件设备,甚至通信接口等
      • open(),read(),close(),delete()
    • 由众多功能单一的程序组成
      • 一个程序只做件事,并且做好
      • 组合小程序完成复杂任务
    • 尽量避免和用户交互
      • 目标:易于以编程的方式实现自动化任务
    • 使用文本文件保存配置信息
      • 因为文本是最底层的

    文件是什么?文件如何有效的组织起来?

    分层级,自顶向下查找。

    文件系统:

    • 层级结构 有索引
      • 所有的文件都从属于/:原初起点 :根目录
        • 第二层结构:子目录
        • 第三层结构 :倒置树状结构
    • 目录:实现路径映射
    • 文件:存储空间存储的一段数据流式数据
      • 对数据可以做到按名存取
    • 文件系统: /dev/pts/2 (路径映射)
      • ​ 最左侧的/ :表示根目录
      • ​ 其他的/ :表示分隔符是/
      • windows的分隔符是 \
    • 文件的路径表示有俩种:
      • 绝对路径
      • 相对路径
    • 文件名的使用法则:
      • 严格区分字符大小写
      • 目录也是文件,与文件不能同名(同一个路径下下)
      • 文件名支持使用除/外的任意字符:最长不能超过255字符
    • 用户有家目录: home
      • 用户的起始目录:普通用户管理文件的位置
    • 工作目录:
      • /etc/sysconfig/network-script/ifcfg-eno16666
      • basename: 最右侧的文件名或目录名
      • basename左侧的路径:叫dirname

    命令的语法通用格式:

    • command options arguments
    • 多数系统命令都存放在:/bin /usr/local/bin /usr/bin
      • 管理命令:/sbin /usr/sbin /usr/local/sbin
      • 普通命令: /bin /usr/local/bin /usr/bin
    • 共享库: /lib目录下 /lib64 /usr/lib /usr/lib64 /usr/local/lib
      • 只能被其他有执行程序入口的程序调用使用
      • 32bit的库: /lib , /usr/lib , /usr/local/lib
      • 64bit的库: /lib64 ,/usr/lib64
      • 运行时会调用库
    • 命令必须遵循特定规范:
      • 格式规范 :exe ,msi , ELF(linux)
      • file /bin/ls :查看文件内容的类型
      • 并非所有的命令都有一个在某目录下对应的可执行文件
    • 命令分类:
      • 由Shell程序自带的命令 :内置命令(builtin)
      • 独立的可执行文件: 文件名即命令名(外部命令)—》配置了环境变量
    • Shell程序是个独立的程序:负责解析用户提供的命令
      • 词法分析
      • 语法分析
      • 想办法找到这个程序的文件在什么地方 :
        • 通过环境变量 PATH:从哪些路径中查找用户键入的命令字符串
        • 查找路径的顺序也很关键,自左向右的查找
      • 内置命令是不需要查找的
    • 查看命令类型:type command

    OPTIONS:指定命令的运行特效

    • 调整命名执行时的功能

    • 指明要运行功能的哪部分代码

    • 选项有俩种表现形式:

      • 短选项: -C ,例如:-l ,id
        • 有些命令的选项没有-:
        • 如果同一个命令使用多个短选项,多数可以合并:-l -d =-ld
      • 长选项:–word,例如:–help --human-readable

    ARGUMENTS:命令的作用对象

    • 注意: 不同命令的参数:有些命令可以同时带多个参数,多个之间用空白字符分隔

    获取命令帮助:

    • 内部命令
    • help command
    • 外部命令
      • 每个命令都自带简要使用格式的使用帮助
        • command --help
      • 使用手册
        • manual :系统上得有这个手册
        • /usr/share/man/
        • SECTION
          • NAME :功能性说明
          • SYNOPSIS: 语法格式
          • 选项 :OPTION
          • 使用示例 EXAMPLE
        • SYNOPIS:
          • [] 可以选的内容
          • <>:必须提供的内容
          • a|b|c :多选一
          • …:同类内容可以出现多个
    • 使用手册(man):压缩格式的文件,有章节之分
      • 1:用户命令
      • 2:系统调用
      • 3:C库调用
      • 4:设备文件及特殊文件
      • 5:文件配置格式说明
      • 6:游戏使用帮助
      • 7:杂项
      • 8:管理工具及守护进程
    • 并非每个command在每个章节下都有手册

    man命令的操作方法:

    • b:向文件首部翻一屏 ;
    • ctrl+d :向文件尾部翻半屏
    • ctrl+k: 向文件首部翻半屏
    • 回车键:向文件尾部翻一行
    • #G:跳转到指定行
    • 1G:跳转到文件首部

    文本搜索:

    • /keyword:从文件首部向文件首部查找
    • ?keyword: 从文件尾部向文件首部查找

    添加用户:

    • useradd gentoo
    • id gentoo (验证方式)
    • useradd -s /bin/tcsh slackware 指定shell为tcsh

    获取命令的在线文档

    • info command

    很多应用程序会自带帮助文档

    • /usr/share/doc/APP-VERSION
    • README :程序的相关信息
    • INSTALL:安装帮助

    Linux文件系统:

    • 以.开头的文件为隐藏文件
    • .:当前目录
    • … :上一级目录
    • /etc/sysconfig/
    • 工作目录: working directory
    • 家目录: home

    常用目录:

    • pwd (printing working directory)
    • cd (chage directory)
      • cd ~ :切换回自己的家目录
      • cd ~username: 切换到指定用户的家目录
      • cd - :上一次所在目录与当前所在目录来回切换
    • ls :(list)
      • -a 显示所有文件(包括隐藏文件)
      • -l : --long ,长格式,即显示文件的详细属性信息
        • 文件类型: d , b , c , l , s ,p
        • rw-r–r--:文件属主的权限
        • 数字文文件大小,单位是字节:
        • 时间:文件最后一次被修改的时间
      • -h 对单位大小单位换算,换算后可能非精确值
      • -d :查看目录自身而非内部文件
      • -r 逆序显示
      • -R :recursive :递归显示
    • cat : concatenate :连接文件并显示在标准输出上
      • 文本文件查看工具
      • 用 file /etc/fstab 查看文件类型是不是文本文件
      • -n 显示文本的行号
      • -E :显示结束符$
    • tac :文本文件查看工具
      • 文件内容是逆序的(每一行逆序显示)
    • file 命令 :查看文件内容类型
      • 用法格式:file [FILE] …
    • echo :回显命令
      • echo [OPTION ] [STRING]
      • -n 不再自动执行换行
      • -e 让转义符生效
        • \n 换行符
        • \t 制表符
        • \b 退格键(删除前一个字符)
      • String
        • 单引号:强引用,变量不执行替换
        • 双引号:弱引用,变量会被替换
      • 变量引用的正规符号
        • ${name}
    • shutdown [option ] [time] [WALL]
      • Opiton:
        • -h halt
        • -r +5
        • -c 取消关机
      • wall “lang lai le” :一台主机的多用户自己可以通信
    • 日期相关的命令
      • date :显示和设置时间(系统时钟)
        • ​ date [OPTION]… [+FORMAT]
        • FORMAT :格式符
          • %F
          • %T
          • %Y
          • %m
          • %s :从1970年1月1日(unix元年) 0点0分0秒到命令执行那一刻经过的秒数
        • ​ date [-u|–utc|–universal] [MMDDhhmm[[CC]YY][.ss]]
        • 设定系统日期:
          • ​ date 101008082018 月日 时分 年
      • clock :查询设置系统的硬件时间(硬件时钟)
        • ​ 主板上的电池让主板上的硬件供电
      • hwclock :硬件时钟
      • cal :日历
        • man cal 用法
      • which
      • whereis
      • who
      • w

    Linux 目录结构和根文件系统

    • 程序编译方式:
      • linux : glibc库
      • 动态连接 :不把库文件编译进来,运行的时候再调用 (有依赖性,移动之后可能不能运行)
      • 静态编译:编译的时候加入库文件,特点:体积大,消耗内存
    • 操作系统

    FHS:

    • FIlesytem Hierarchy standard (文件层级系统标准)
    • /bin :所有用户可用的基本命令程序文件
    • /sbin :供系统管理使用的二进制程序
    • /boot: 引导加载器必须用到的各种静态文件 :kernel , initramf(initrd),grub等
    • /dev :设备文件,存储特殊文件或设备文件,设备有俩种类型:字符设备,块设备
    • /etc : 系统程序的 配置文件,只能为静态的。
    • /home: 非关键性目录,可以独立挂在一个分区,不是基本组成结构 /home/username
    • /lib: 基本共享库,为系统启动或根文件系统上的应用程序(/bin,/sbin)提供共享库,以及为内核提供内核模块。 libc.so.* :动态链接的c库 ld*:运行时的连接器/加载器 modules:用于存储内核模块的目录。
    • /lib64 :基本共享库(64位系统的)
    • /media: Mount point for removeable media:任何其他设备的的挂载目录(U盘,光盘便携式)
    • /mnt : 其他文件系统的临时挂载点
    • /opt :Add-on application software packages: 非关键性的第三方程序的安装包,可选路径;
    • /root: 管理员的家目录 :可选(管理员有没家无所谓,不应该登录)
    • /srv : 当前主机为服务提供的数据,一般用不到
    • /tmp : Temporary files :临时文件目录,几乎所有的用户都能用到,所有用户都能读写
    • /usr : usr Hierarchy
      • ​ 除了根之外,最重要的:全局共享(只读)资源
      • ​ 不需要用户在这个文件下创建文件
      • 子目录:
        • bin sbin
        • etc
        • include(c程序的头文件)
        • lib lib64
        • share (命令手册页和自带文档等架构)
        • local : local Hierarchy :让系统管理员安装本地应用程序,也通常用于安装第三方应用程序
    • /var Hierarchy:
      • variable data fiels : 管理员的日志数据 经常发生变化的数据的目录
      • 子目录:
        • cache
        • lib
        • local 为/usr/local 存储变化数据
        • opt 为/opt存储变化数据
        • tmp 系统从起后临时数据
    • /proc : 内核和进程信息的虚拟文件系统(为内核及进程存储相关信息)
      • 大多为内核的参数:例如 net.ipv4_forward,虚拟为/net/ipv4/ip_forward
      • 存储于/proc/sys/ ,因此其完整路径为:/proc/sys/net/ipv4/ip_forward
    • /sys
      • 虚拟文件系统,提供了一种比/proc更理想的访问内核数据的途径
      • 基于内存的虚拟文件系统,关机就没了
      • 目录结构
        • /devices
        • /dev
        • /bus :总线
        • /class

    Linux系统上的文件类型

    • ls -l 最左侧的字母
    • -:常规文件 即f:
    • d:directory ,目录文件:完成路径映射
    • b:block device ,块设备文件:以“block”为单位进行随机访问
    • c: charactor device ,字符设备文件,支持以“character”为单位进行线性访问
      • major number:主设备号 ,用于标识设备类型,进而确定要加载的驱动程序
      • minor number :次设备号,用于标识同一类型中的不同设备
      • 8位二进制 (0,255)
    • l :symbolic link: 符号链接文件
      • 软链接文件
    • p :pipe,命名管道
    • s :socker,套接字文件:

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-45jdPmEy-1585625846983)(C:\Users\15209\Pictures\博客\images\文件.jpg)]

    基本命令:

    • which: which - shows the full path of (shell) commands.
    • 如果要运行原命令:\command
    • 获取命令别名:alias
    • shell 内部命令 :但是shell自身是外部的,shell带了很多内部的命令
    • 定义别名:
      • alias NAME =“command” :只对当前shell有效
      • 撤销别名:unalias NAME
    • whereis命令:whereis - locate the binary, source, and manual page files for a command
      • -m :查看man 手册路径
      • -b:仅搜索二进制程序路径
    • who命令:show who is logged on
      • -b :最近一次的启动时间
    • w命令: w - Show who is logged on and what they are doing.

    bash的基础特性:

    • 命令历史: shell进程会在其会话中保存此前用户提交执行过的命令

      • history
      • 上下键
      • history会保存在文件中,登出了也还会存在
      • 定制history的功能,可通过环境变量实现
        • HISTSIZE :命令历史的条数
        • HISTFILE :在管理员家目录下 la -a : .bash_history
        • HISTFILESIZE: 历史文件大小
      • 命令用法: help history
        • -d :从指定位置删除历史
        • -c: 删除所有条目
        • -w : 将当前历史写入历史文件中
        • -r : 从历史文件中读回来
        • history 10 :显示最近10条命令
        • !5 :再一次执行历史列表中的第5条命令
        • !STRING :执行最近以STRING开头的命令 :重复执行需要依赖幂等性(多次执行结果相同)
        • 调用上一个命令的最后一个参数 esc + . (很好用的技巧) !$ 也可以
        • 控制命令历史记录的方式 : HISTCONTROL :
          • ​ 默认特性(忽略重复 ignordups)
          • ignorespace :忽略以空格开头的命令
          • ignoreboth :以上俩这同时生效
    • 命令补全

      • shell程序在接收到用户执行命令的请求,分析完成之后,最左侧的字符串会被当做命令
      • 命令处理机制
        • 查找内部命令
        • 根据PATH环境变量中设定的目录,自左而右的查找命令
        • 按俩下tab :查找以指定字符开头的命令
        • 按一下tab:给定的打头字符串如果能唯一的标识某命令程序文件,则直接补全
      • 路劲补全:
        • 根据给定的起始路径来补全
      • 目录管理类的命令
        • mkdir :创建目录 mkdir /tmp/x/y/z
          • -p : 当路径不存在时,创建父目录
          • -v :显示详细过程
        • rmdir :仅用于删除空目录
          • -p : rmdir -p /tmp/x/y :先删除y,如果其父目录为空,再删除父目录
        • ~ :自动展开为用户的家目录,或指定用户的家目录
        • {}:可承载一个以逗号分隔的路径列表,并能够将其展开为多个路径
          • 例如: /tmp/{a,b} 相当于 /tmp/a /tmp/b
          • [root@csm ~]# mkdir -v /tmp/{a,b}_{c,d}
            mkdir: 已创建目录 “/tmp/a_c”
            mkdir: 已创建目录 “/tmp/a_d”
            mkdir: 已创建目录 “/tmp/b_c”
            mkdir: 已创建目录 “/tmp/b_d”
        • tree :显示目录结构 : list contents of directories in a tree-like format.
          • 参数(OPTIONS)
            • -L (level) :指定要显示的层级
      • bash的基础特性: 命令的执行状态结果(bash通过状态返回值来输出此结果)
        • 成功 : 0
        • 失败 :1-255
        • 命令执行完成之后,其状态返回值保存于bash $? 中。 echo $?
      • 命令正常执行时,有的还有命令返回值
        • 引用命令的执行结果 $(command) 或者 command mkdir $(date +%H-%M-%S) :执行结果
      • bash的基本特性: 引用
        • 强引用 ’ ’
        • 弱引用:" "
        • 命令引用:``
      • bash的基本特性:快捷键
        • ctrl+a :跳转到命令行首部
        • ctrl+e :跳转到命令行尾
        • ctrl +u :删除行首到光标所在处之间的所有字符
        • ctrl +k :删除光标到行位的所有字符
        • Ctrl+l : 想当于clear
      • 文本查看类命令:cat ,tac ,less ,more,tail,head,
        • 分屏查看命令:more less
          • more :只能向后分屏,翻屏到文件尾部后自动退出
          • less : man命令支持的就是less命令
        • head:查看文件的前n 行
        • tail :查看文件的后n 行(默认10行)
          • -n #
          • -# :显示指定行
          • -f : 查看文件尾部内容结束后不退出,跟随显示新增的行
      • stat命令:display file or file system status (查看文件的元数据)
        • stat FILE
        • [root@csm tmp]# stat /tmp/functions
          文件:"/tmp/functions"
          大小:15131 块:32 IO 块:4096 普通文件
          设备:fd01h/64769d Inode:393264 硬链接:1
          权限:(0644/-rw-r–r--) Uid:( 0/ root) Gid:( 0/ root)
          access time:2020-03-31 09:04:01.854932173 +0800
          modify time:2020-03-31 09:04:00.703888368 +0800
          change time:2020-03-31 09:04:00.703888368 +0800
          创建时间:-
        • 文件:俩类数据
          • 元数据:mtadata (例如书的目录,书名)
          • 数据:data (书的内容)
      • touch 命令可以改变文件的时间戳 : touch - change file timestamps
        • 经常用来创建空文件
        • -c :不创建文件 :指定文件路径不存在时不创建
        • -a change only the access time
        • -m change only the modification time
        • -t :改成指定的时间 [YYMMDD]
    • 文件管理工具: cp,mv ,rm

      • cp命令:copy
        • 源文件 :目标文件
        • 复制指的是复制文件的数据
        • 单源复制 :cp [OPTION]… [-T] SOURCE DEST
          多源复制: cp [OPTION]… SOURCE… DIRECTORY
          多源复制:cp [OPTION]… -t DIRECTORY SOURCE…
        • 如果DEST不存在:则事先创建此文件,并复制源文件的数据流到DEST中
        • 如果DEST存在:
          • 如果DEST是非目录文件:覆盖DEST文件
          • 如果DEST是目录文件: 则现在DEST目录下创建一个与源文件同名的文件,并复制数据流至目标文件
        • 如果SOURCE是目录:略过目录
        • 多源复制:
          • 如果DEST不存在: 不允许
          • -i :覆盖之前提醒用户确认
          • -f : 强制覆盖目标文件
          • -r ,-R :recursive :递归复制目录
          • -d :复制符号链接文件本身,二非其指向的源文件
          • –preserv= :保留云文件的时间戳
            • node :权限
            • timestamps:时间戳
            • xattr:扩展属性
            • all :上述所有属性
          • -a :保留源文件的所有属性
      • mv :移动文件和重命名
        • mv hello hello.txt :重命名 ,当源文件和目标文件在同一个目录下
        • 不在同一个目录下就是移动
        • 常用选项
          • -i :交互式
          • -f :强制覆盖
      • rm :删除文件
        • linux系统没有回收站,找回文件非常困难
        • rm [OPTION] FILE
        • 常用选项:
          • -r 递归删除
          • -f :强制删除
        • 可以自建一个回收站,把不用的文件都移动到回收站去,尽量不要删文件
          • 危险操作:rm -rf /*
    • 变量: 命名的内存空间

      • 变量类型:整型,浮点型,字符型,布尔型,日期时间型

        • 字符型

        • 数值型

        • 精确数值

        • 近似数值

        • 存储格式,数据范围,参与运算:

          • 8 :1000
          • 16 : 10000
          • ASCII 码 :128个
    • 变量的命名操作: name=tom

    如果DEST不存在: 不允许
    - -i :覆盖之前提醒用户确认
    - -f : 强制覆盖目标文件
    - -r ,-R :recursive :递归复制目录
    - -d :复制符号链接文件本身,二非其指向的源文件
    - --preserv= :保留云文件的时间戳
    - node :权限
    - timestamps:时间戳
    - xattr:扩展属性
    - all :上述所有属性
    - -a :保留源文件的所有属性

    • mv :移动文件和重命名

      • mv hello hello.txt :重命名 ,当源文件和目标文件在同一个目录下
      • 不在同一个目录下就是移动
      • 常用选项
        • -i :交互式
        • -f :强制覆盖
    • rm :删除文件

      • linux系统没有回收站,找回文件非常困难
      • rm [OPTION] FILE
      • 常用选项:
        • -r 递归删除
        • -f :强制删除
      • 可以自建一个回收站,把不用的文件都移动到回收站去,尽量不要删文件
        • 危险操作:rm -rf /*
    • 变量: 命名的内存空间

      • 变量类型:整型,浮点型,字符型,布尔型,日期时间型

        • 字符型

        • 数值型

        • 精确数值

        • 近似数值

        • 存储格式,数据范围,参与运算:

          • 8 :1000
          • 16 : 10000
          • ASCII 码 :128个
    • 变量的命名操作: name=tom

    展开全文
  • Linux学习笔记(强悍总结值得一看)

    热门讨论 2020-07-30 23:32:36
    Linux学习笔记(带索引,非常经典) LINUX常用操作命令和命令行编辑快捷键 终端快捷键: Ctrl + a/Home 切换到命令行开始 Ctrl + e/End 切换到命令行末尾 Ctrl + l 清除屏幕内容,效果等同于clear Ctrl + u ...
  • Linux基础语法笔记

    2020-10-17 09:04:38
    Linux学习笔记,含各种常用指令 一、Linux的目录结构 linux 的文件系统是采用级层式的树状目录结构,在此结构中的最上层是根目录“/ ”,然后在此目录下再创建其他的目录。 一句经典的话: 在Linux中,一切皆文件 1...

    Linux学习笔记,含各种常用指令

    一、Linux的目录结构

    linux 的文件系统是采用级层式的树状目录结构,在此结构中的最上层是根目录“/ ”,然后在此目录下再创建其他的目录。
    一句经典的话: 在Linux中,一切皆文件

    img

    1.具体的目录结构:

    /bin [重点] (/usr/bin、/usr/local/bin)
    •是Binary的缩写, 这个目录存放着最经常使用的命令

    /sbin(/usr/sbin、/usr/local/sbin)
    •s就是Super User的意思,这里存放的是系统管理员使用的系统管理程序。

    /home [重点]
    •存放普通用户的主目录,在Linux中每个用户都有一个自己的目录,一般该目录名是以用户的账号命名的。

    /root [重点]
    •该目录为系统管理员,也称作超级权限者的用户主目录。

    /lib
    •系统开机所需要最基本的动态连接共享库,其作用类似于Windows里的DLL文件。几乎所有的应用程序都需要用到这些共享库。

    /lost+found
    •这个目录一般情况下是空的,当系统非法关机后,这里就存放了一些文件。

    /etc [重点]
    •所有的系统管理所需要的配置文件和子目录my.conf

    /usr [重点]
    •这是一个非常重要的目录,用户的很多应用程序和文件都放在这个目录下,类似与windows下的program files目录。

    /boot [重点]
    •存放的是启动Linux时使用的一些核心文件,包括一些连接文件以及镜像文件

    /proc
    •这个目录是一个虚拟的目录,它是系统内存的映射,访问这个目录来获取系统信息。

    /srv
    •service缩写,该目录存放一些服务启动之后需要提取的数据。
    /sys
    •这是linux2.6内核的一个很大的变化。该目录下安装了2.6内核中新出现的一个文件系统sysfs
    /tmp
    •这个目录是用来存放一些临时文件的。

    /dev
    •类似于windows的设备管理器,把所有的硬件用文件的形式存储。
    /media [重点]
    •linux系统会自动识别一些设备,例如U盘、光驱等等,当识别后,linux会把识别的设备挂载到这个目录下。
    /mnt [重点]
    •系统提供该目录是为了让用户临时挂载别的文件系统的,我们可以将外部的存储挂载在/mnt/上,然后进入该目录就可以查看里的内容了。d:/myshare

    /opt
    •这是给主机额外安装软件所摆放的目录。如安装ORACLE数据库就可放到该目录下。默认为空。
    /usr/local [重点]
    •这是另一个给主机额外安装软件所安装的目录。一般是通过编译源码方式安装的程序。

    /var [重点]
    •这个目录中存放着在不断扩充着的东西,习惯将经常被修改的目录放在这个目录下。包括各种日志文件。

    /selinux [security-enhanced linux] 360
    •SELinux是一种安全子系统,它能控制程序只能访问特定文件。

    二、vi和vim编辑器

    1.vi和vim的基本介绍

    所有的Linux 系统都会内建vi 文本编辑器。
    Vim 具有程序编辑的能力,可以看做是Vi的增强版本,可以主动的以字体颜色辨别语法的正确性,方便程序设计。代码补完、编译及错误跳转等方便编程的功能特别丰富,在程序员中被广泛使用。

    2.三种模式

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

    1. 命令模式

      用户刚刚启动 vi/vim,便进入了命令模式。 此状态下敲击键盘动作会被Vim识别为命令,而非输入字符。比如我们此时按下i,并不会输入一个字符,i被当作了一个命令。
      在此模式下的命令:
      (1)i 切换到输入模式,以输入字符。
      (2)x 删除当前光标所在处的字符。
      (3): 切换到底线命令模式,以在最底一行输入命令。

      命令模式只有一些最基本的命令,因此仍要依靠底线命令模式输入更多命令。

    2. 输入/编辑模式

      在命令模式下按下 i, I, o, O, a, A, r, R 等任何一个字母之后才会进入编辑模式, 一般来说按 i 即可。

    3. 底线命令模式

      在命令模式下按下:(英文冒号)就进入了底线命令模式。 底线命令模式可以输入单个或多个字符的命令,可用的命令非常多。完成读取、存盘、替换、离开 vim 、显示行号等的动作则是在此模式中达成的。比如:
      :wq//写并退出
      :q//直接退出
      :q!//强制退出不保存

    img

    3.快捷键的一些使用案例

    • 拷贝当前行:yy , 拷贝当前行向下的 5 行:5yy(yy5也可),并粘贴:p
    • 删除当前行:dd , 删除当前行向下的 5 行 :5dd
      (以上两条要在命令模式中使用,也就是vim刚进去的那个模式)
    • 设置文件的行号(:set nu,回车),取消文件的行号(:set nonu,回车),这个即命令模式 : 后进入底线命令模式

    在这里插入图片描述img

    • 在输入模式下输入 “hello” ,再ESC退出到正常模式,输入u,可以撤销先前的输入操作

    • 在第2行进行输入或删除
      (1)先显示行号,:set nu(底线命令模式)
      (2)输入2,在输入shift+g

    • 在命令模式下输入V可以选中当前行,然后按上下键可以选中多行,按shift+>或者shift+< 可以实现缩进或退格

    三、开机、重启和用户登录注销

    1、关机&重启命令

    • shutdown:关机
      shutdown -h now:立即关机
      shutdown -h 1:表示1分钟后关机
      shutdown -r now:立即重启
    • halt:直接使用,效果等价于关机
    • reboot:重启系统
    • sync:把内存的数据同步到磁盘
      **关机或重启时,都应该执行一下sync,防止数据丢失 **

    2、用户登录和注销

    • 登录时尽量少用root登录,避免操作失误,因为root有最大的权限。可以用普通用户登录,再su -用户名 切换
    • 在提示符后输入logout(在运行级别3以下才有效)即可注销登录。(root用户输入exit,普通用户用logout)

    四、用户管理

    Linux是一个多用户、多任务的操作系统,要使用资源,必须先申请一个账号,然后以这个账号的身份进入系统。

    Linux的用户至少要属于一个组。

    1、用户添加

    [root@localhost ~]# useradd userA
    

    当创建用户成功后,会自动的创建和用户同名的家目录,也可以通过

    [root@localhost ~]# useradd -d /home/AAA/userA
    

    在指定的目录下添加。用passwd userA指定密码。
    补充:cd /home 切换目录到home下 cd表示 change directory切换目录

    2、删除用户

    [root@localhost ~]# userdel userA 删除用户,但保留家目录
    [root@localhost ~]# userdel -r userA 删除用户以及用户主目录

    3、查询用户信息

    id userA
    

    在这里插入图片描述

    uid:用户id

    gid:所在组的id

    组(0):组名

    • su -用户名 可以切换用户
    • 当需要返回到原来用户时,使用 exit 指令
    • 从权限低的用户切换到权限高的用户,需要密码,反之则不用

    4、用户组

    groupadd wudang//添加组
    groupdel wudang//删除组
    useradd -g  wudang zwj//增加用户时直接加上组
    
    groupadd shaolin
    usermod -g shaolin zwj//将zwj用户修改到shaolin组
    

    5、相关文件

    • /etc/passwd文件:用户的配置文件,记录用户的各种信息
    root:x:0:0:root:/root:/bin/bash//用户名:口令:用户标识号:组标识号:注释性描述:主目录:登录 Shell
    
    • /etc/shadow文件:口令的配置文件
      每行的含义:登录名:加密口令:最后一次修改时间:最小时间间隔:最大时间间隔:警告时间:不活动时间:失效时间:标志
    • /etc/group文件:组的配置文件,记录linux包含的组的信息
      每行含义:组名:口令:组标识号:组内用户列表
      在这里插入图片描述

    五、实用指令

    1、运行级别

    0:关机
    1:单用户【找回丢失密码】
    2:多用户状态,没有网络服务
    3:多用户状态:有网络服务
    4:系统未使用保留给用户
    5:图形界面
    6:系统重启
    

    常用运行级别是3和5 ,要修改默认的运行级别可改文件
    /etc/inittab的id:5:initdefault:这一行中的数字
    命令:init [012356]

    面试题:如果不小心忘记root密码,怎么找回?
    思路:进入单用户模式,然后修改root密码,因为进入单用户模式,root不需要密码就可以登录。(博主太懒,这部分等有心情有时间再来细说吧,也可以自行百度一下,注意centOS 8 和6.几的版本可能方法不太一样)

    2、帮助指令

    man ls:查看ls命令的帮助信息
    help cd:查看cd命令的帮助信息3、文件目录类

    3、文件目录类

    (1) pwd,ls

    pwd //显示当前工作目录的绝对路径
    ls [选项] [目录或文件] //查看当前目录下的文件
    ls -l //以长列表形式显示
    ls -al //显示所有的,包括隐藏的
    

    (2)cdcd [参数]切换到指定目录

    绝对路径和相对路径

    • 绝对路径:路径的写法一定是由根目录 / 写起的,例如/usr/local/mysql
    • 相对路径:路径的写法不是由根目录 / 写起的。
      例如:使用相对路径到/root 目录
      这里我们需要知道该用户目录在哪个目录下,才能写出这个指令,假设在/usr/lib,则 cd ../../root, 表示回到当前目录的上一级目录用cd ..

    (3)mkdir创建目录,rmdir删除目录

    mkdir /home/dog :在home下创建一个dog目录
    mkdir -p /home/animal/dog :-p 创建多级目录
    rmdir /home/dog:删除目录dog
    

    ** rmdir删除的是空目录,有内容的话无法删除,如果需要删除非空目录,需要使用 rm -rf 要删除的目录 **

    (4)touch创建文件

    touch hello.txt
    touch hello1.txt hello2.txt 一次创建两个
    

    (5)cp拷贝(重要)

    基本语法:cp [选项] source dest
    常用选项 -r :递归复制整个文件夹
    
    案例 1: 将  /home/aaa.txt 拷贝到	/home/bbb 目录下 [拷贝单个文件]
    touch aaa.txt
    mkdir bbb
    cp aaa.txt bbb/    //表示将aaa.txt文件拷贝到当前目录的bbb这个目录下
    
    案例 2: 递归复制整个文件夹,举例:将/home/test 整个目录拷贝到 /home/zwj 目录
    cp -r test/ zwj/   //注意当前位置,要准确定位源目录、目标目录
    \cp -r test/ zwj/   //会强制覆盖原来的文件,不提示12345678910
    tips: 可以通过 上下箭头的键,调出原来使用过的指令
    

    (6)rm删除指令
    rm 指令移除【删除】文件或目录

    • 基本语法:rm [选项] 要删除的文件

    • 常用:-r:递归删除整个文件夹, -f:强制删除不提示

    • 举例:

      rm aaa.txt //删除文件
      rm -rf bbb/ //删除目录,递归删除文件夹
      

    (7) mv指令

    • 基本语法:mv oldNameFile newNameFile (功能等价于重命名)

    • mv temp/movefile /targetFolder (功能:移动文件)

    • 实例:

      mv aaa.txt bbb.txt //将aaa.txt重命名为bbb.txt
      mv a.txt /root/ //将a.txt移动到/root目录下
      

    (8)cat指令
    cat查看文件内容,以只读的方式打开

    • 基本语法:cat [选项] 要查看的文件
    • 常用选项:-n 显示行号
    • 实例:
      cat -n /etc/profile | more //分页显示,并显示行号
      ** cat指令只能浏览文件,而不能修改文件,为了浏览方便,一般会带上管道命令 | more **

    (9)more和less指令

    more 指令是一个基于 VI 编辑器的文本过滤器,它以全屏幕的方式按页显示文本文件的内容。more 指令中内置了若干快捷键。

    • 基本语法:more 要查看的文件

    • 举例:用more查看文件

      more /etc/profile
      空白键:向下翻页
      enter:向下一行
      q:离开more,不显示文件内容
      ctrl+F:向下滚动一屏
      ctrl+B:返回上一屏
      =:输出当前行的行号
      :f :输出文件名和当前行行号
      

    less 指令用来分屏查看文件内容,它的功能与 more 指令类似,但是比 more 指令更加强大,支持各种显示终端。less 指令在显示文件内容时,并不是一次将整个文件加载之后才显示,而是根据显示需要加载内容,对于显示大型文件具有较高的效率。

    空格:向下翻动一页;
    pageup:向上翻动一页;
    pagedown:向下翻动一页
    /字串:向上搜寻[字串]的功能 n:向下查找 N:向上查找
    ?字串:向上搜寻[字串]的功能 n:向上查找 N:向下查找
    q:离开less程序
    

    (10) >指令和>>指令

    > : 输出重定向 : 会将原来的文件的内容覆盖
    >> :追加,不会覆盖原来文件的内容,而是追加到文件的尾部
    cat 文件 1 > 文件 2 (功能描述:将文件 1 的内容覆盖到文件 2)

    写的时候都要注意各种空格

    ls -l > a.txt     //ls -l 命令的内容显示到a.txt中(覆盖写,如果a文件不存在则创建一个)
    ls -l >> b.txt   //追加显示到b后面
    cat /etc/profile > c.txt  //将profile的内容覆盖到c
    ls -l /home/ > /home/info.txt ///home下的文件列表写到info里面
    cal >> /home/mycal  //将当前日历信息追加到mycal下
    

    (11)echo指令输出内容到控制台

    • 基本语法: echo [选项] [输出内容]

    • 实例:

      echo $PATH //输出$PATH环境变量
      

    (12)head和tail指令

    head 用于显示文件的开头部分内容,默认情况下 head 指令显示文件的前 10 行内容
    基本语法:
    ①head 文件 (功能描述:查看文件头 10 行内容)
    ②head -n 5 文件 (功能描述:查看文件头 5 行内容,5 可以是任意行数)

    head -n 5 /etc/profile  //查看/etc/profile 的前面 5 行代码
    

    tail 用于输出文件中尾部的内容,默认情况下 tail 指令显示文件的后 10 行内容
    基本语法:
    ①tail 文件 (功能描述:查看文件后 10 行内容)
    ②tail -n 5 文件 (功能描述:查看文件后 5 行内容,5 可以是任意行数)
    ③tail -f 文件 (功能描述:实时追踪该文档的所有更新,工作中常用)

    在qq.txt末端追加在这里插入图片描述

    在Xshell中查看qq.txt立马显示追加后的结果

    在这里插入图片描述

    (13)ln指令

    软链接,也叫符号链接,类似于 windows 里的快捷方式,主要存放了链接其他文件的路径
    基本语法:
    ln -s [原文件或目录] [软链接名] (功能描述:给原文件创建一个软链接)
    举例:把linkToroot软连接到root

    [root@localhost root]# rm -rf linkToroot //删除,注意软连接名字后面没有/

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ub3nfXju-1602676199860)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20201007162020953.png)]

    细节说明:

    当使用pwd指令查看目录时,仍然看到的是软连接所在的目录

    (14)history指令

    查看已经执行过历史命令,也可以执行历史指令
    基本语法:
    history(功能描述:查看已经执行过历史命令)
    history 10 //查看最近用的10个指令
    history -c //清空历史指令
    !num //num表示某个已执行过的指令 !3(执行三号指令)
    

    4、时间日期类

    date 指令-显示当前日期

    • date (功能描述:显示当前时间)

    • date +%Y (功能描述:显示当前年份)

    • date +%m(功能描述:显示当前月份)

    • date +%d (功能描述:显示当前是哪一天)

    • date “+%Y-%m-%d %H:%M:%S”(功能描述:显示年月日时分秒)

      在这里插入图片描述

    date 指令-设置日期

    date -s "2020-5-10 22:55:00"//修改日期
    cal //显示当前日历
    

    5、搜索查找类

    (1)find指令
    find 指令将从指定目录向下递归地遍历其各个子目录,将满足条件的文件或者目录显示在终端。

    • 基本语法:find 【搜索范围】【选项】
    • 选项说明:
      -name :按照指定文件名查找
      -user:查找属于指定用户名的所有文件
      -size:按指定文件大小查找
    find /home -name  hello.txt //搜索范围是/home,找名为hello.txt的文件
    find /opt -user nobody  ///opt目录下找用户名为nobody的文件
    find / -size +20M  //查找整个系统下>20M的文件(+n大于,-n小于,n等于)
    find / -name *.txt /// 目录下,所有.txt文件
    

    (2)locate指令

    • locate 指令可以快速定位文件路径
    • locate 指令利用事先建立的系统中所有文件名称及路径的locate 数据库实现快速定位给定的文件
    • Locate 指令无需遍历整个文件系统,查询速度较快。为了保证查询结果的准确度,管理员必须定期更新 locate 时刻
    • 由于 locate 指令基于数据库进行查询,所以第一次运行前,必须使用 updatedb 指令创建 locate 数据库。
    updatedb  //先创建locate的数据库
    locate hello.txt 
    

    注意:locate用的是模糊查询

    (3)grep指令和管道符号 |
    grep 过滤查找 , 管道符,“ | ”,表示将前一个命令的处理结果输出传递给后面的命令处理。

    • 基本语法:grep [选项] 查找内容
    • 常用选项: -n 匹配行号 ,-i 忽略字母大小写
    cat hello.txt | grep -n yes //查找yes,显示行号
    cat hello.txt | grep -ni yes //忽略大小写,如果有Yes也能查出来
    

    6、压缩和解压缩类

    (1)gzip/gunzip

    gzip 用于压缩文件, gunzip 用于解压的 (压缩后不会保存原文件,不能压缩文件夹)
    gzip 文件 (功能描述:压缩文件,只能将文件压缩为*.gz 文件)
    gunzip 文件.gz (功能描述:解压缩文件命令)

    gzip hello.txt //会压缩成一个hello.txt.gz的文件在同一目录下
    gunzip hello.txt.gz //解压缩1
    

    当使用gzip 对文件进行压缩后,不会保留原来的文件。

    (2)zip/unzip

    zip 用于压缩文件, unzip 用于解压,在项目打包发布中很有用

    • 基本语法
      ①zip [选项] XXX.zip 将要压缩的内容(功能描述:压缩文件和目录的命令)
      ②unzip [选项] XXX.zip (功能描述:解压缩文件)
    • 常用选项
      ① zip -r :递归压缩,即压缩目录
      ②unzip -d :指定解压后文件的存放目录
    zip -r mypackage.zip  /home/  ///home下所有文件压缩到mypackage.zip
    unzip -d /opt/tmp/  mypackage.zip  //解压到opt/tmp/

    (3)tar

    tar 指令 是打包指令,最后打包后的文件是 .tar.gz 的文件。 (可以保留原文件,可以压缩文件夹)

    • 基本语法:
      tar [选项] XXX .tar.gz 打包的内容 (功能描述:打包目录,压缩后的文件格式.tar.gz)
    • 选项说明:
      ①-c:产生 .tar打包文件
      ②-v:显示详细信息
      ③-f:指定压缩后的文件名
      ④-z:打包同时压缩
      ⑤-x:解包 .tar文件
    一般打包用-zcvf,解包用-zxvf
    tar -zcvf file.tar.gz  a1.txt a2.txt //将a1和a2打包成file.tar.gz
    tar -zxvf file.tar.gz //解压
    tar -zcvf myhome.tar.gz  /home/   ///home的文件夹压缩成myhome.tar.gz文件
    tar -zxvf a.tar.gz 将a.tar.gz解压到当前目录下
    tar -zxvf myhome.tar.gz -C /opt/tmp2 将myhome.tar.gz解压到/opt/tmp2下(opt/tmp2目录必须事先创建好)
    

    打包:将一堆文件或目录什么的变成一个总的文件。
    压缩:将一个大的文件经过某种压缩算法变成一个小文件。

    六、组管理和权限管理

    在 linux 中的每个用户必须属于一个组,不能独立于组外。在 linux 中每个文件有所有者、所在组、其它组的概念。

    1、所有者、所在组、其他组

    (1)文件目录所有者
    所有者一般为文件的创建者,谁创建了该文件,就自然的成为该文件的所有者。

    ls -ahl //查看文件所有者
    #实例:创建一个组 police,再创建一个用户 tom,将 tom 放在 police 组 ,然后使用 tom 来创建一个文件 ok.txt
    groupadd police
    useradd -g police tom
    passwd tom
    #设置tom的密码......
    touch ok.txt
    ls -ahl 
    

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7tl1TKLg-1602676199866)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20201007200808361.png)]

    ok.txt的所有者是tom

    (2)修改文件所有者

    #用root创建一个apple.txt,把所有者修改为tom
    touch apple.txt
    chown tom apple.txt
    

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-eMXGwGUa-1602676199867)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20201007201348269.png)]

    (3)文件/目录 所在组

    • 当某个用户创建了一个文件后,默认这个文件的所在组就是该用户所在的组。

    • 查看文件/目录所在组:ls -ahl //a代表all,h是human

    • 修改文件所在的组: chgrp 组名 文件名:chgrp police apple.txt //把apple这个文件放到police组

    • 除文件的所有者和所在组的用户外,系统的其它用户都是文件的其它组。

      改变用户所在组
      >>在添加用户时,可以指定将该用户添加到哪个组中,同样的用 root 的管理权限可以改变某个用户所在的组。可以用 (id 用户)指令查看。
      usermod –g 组名 用户名
      usermod -g bandit tom //把tom从police组放到bandit组
      

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-frvpOD6b-1602676199868)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20201007202431601.png)]

    2、修改权限

    (1)基本介绍

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fAhhRsW8-1602676199869)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20201007203757686.png)]

    -rw- r-- r-- tom root xxxx apple.txt
    arwx --- --- tom police xxxxx tom
    0-9 位说明
    1)第 0 位确定文件类型(d, - , l , c , b)
    【d:目录  -:普通文件  l:软连接   c:字符设备(键盘鼠标)  b:块文件,硬盘】
    2)第 1-3 位确定所有者(该文件的所有者)拥有该文件的权限。---User
    3)第 4-6 位确定所属组(同用户组的)拥有该文件的权限,---Group
    4)第 7-9 位确定其他用户拥有该文件的权限 ---Other
    

    apple.txt文件中

    第0位 ‘ - ’表示是个普通文件,

    第1-3位rw- 是指文件所有者有读和写的权限,没有可执行权限(否则是rwx)

    第4-6是所在组的其他用户只有读权限

    第7-9位r- - 是指其他组的用户只有读的权限。

    1:如果是文件,表示硬链接的数,如果是目录则表示该目录下子目录的个数

    tom:文件的拥有者

    police:文件所在的组

    0:文件大小,如果是目录则是4096

    10月 7 20:12 :文件的最后修改时间

    rwx 作用到文件:
    (1) [ r ]代表可读(read): 可以读取,查看
    (2) [ w ]代表可写(write): 可以修改,但是不代表可以删除该文件,删除一个文件的前提条件是对该文件所在的目录有写权限,才能删除该文件.
    (3) [ x ]代表可执行(execute):可以被执行
    
    rwx作用到目录:
    (1) [ r ]代表可读(read): 可以读取,ls 查看目录内容
    (2) [ w ]代表可写(write): 可以修改,目录内创建+删除+重命名目录
    (3) [ x ]代表可执行(execute):可以进入该目录
    

    案例:

    ls -l 中显示的内容如下:
    -rwxrw-r--1 root root 1213 Feb 2 09:39 abc
    10个字符确定不同用户能对文件干什么
    第一个字符代表文件类型:文件(-),目录(d),链接(l)
    其余字符每3个一组(rwx)(r)(w) 执行(x)
    第一组rwx : 文件拥有者的权限是读、写和执行
    第二组rw-: 与文件拥有者同一组的用户的权限是读、写但不能执行
    第三组r--: 不与文件拥有者同组的其他用户的权限是读不能写和执行
    可用数字表示为: r=4,w=2,x=1 因此rwx=4+2+1=7
    1文件:硬连接数或目录:子目录数
    root 用户
    root 组
    1213 文件大小(字节),如果是文件夹,显示4096字节
    Feb 2 09:39 最后修改日期
    abc 文件名
    

    (2)修改权限

    • 方式一:+,-,=权限变更
    u:所有者	  g:所有组	o:其他人	  a:所有人(u、g、o 的总和)
    1)	chmod	u=rwx,g=rx,o=x	文件目录名
    2)	chmod	o+w	文件目录名  //给其他人加上写的权限
    3)	chmod	a-x	文件目录名  //所有人减去可执行的权限
    #举例:
    # 1)给abc文件的所有者读写执行的权限,给所在组读执行权限,给其它组读执行权限
    chmod u=rwx,g=rx,o=rx abc
    # 2)给 abc 文件的所有者除去执行的权限,增加所在组写的权限
    chmod u-x,g+w abc
    # 3)给 abc 文件的所有用户添加读的权限
    chmod a+r abc
    
    • 方式二:通过数字
    规则:r=4 w=2 x=1,rwx=4+2+1=7 
    chmod u=rwx,g=rx,o=x 文件目录名
    相当于: chmod 751 文件目录名
    #将 /home/abc.txt 文件的权限修改成rwxr-xr-x, 使用数字的方式实现
    chmod 755 /home/abc.txt
    

    3、修改文件所有者和所在组

    (1)修改所有者

    chown newowner file	//改变文件的所有者
    chown newowner:newgroup	file	//改变文件的所有者和所有组
    -R	如果是目录 则使其下所有子文件或目录递归生效
    
    #举例
    chown tom abc.txt ///home/abc.txt 文件的所有者修改成 tom
    chown -R tom kkk/    //将kkk目录下的所有文件,包括子目录和子目录表的文件,递归地修改所有者为tom
    

    (2)修改所在组

    chgrp newgroup file //改变文件所有组
    
    #举例:
    (1)将 /home/abc.txt 文件的所在组修改成 bandit (土匪)
    chgrp bandit /home/abc.txt
    (2)将 /home/kkk 目录下所有的文件和目录的所在组都修改成 bandit(土匪) 
    chgrp -R bandit /home/kkk/
    

    案例

    police ,bandit
    jack, jerry: 警察
    xh, xq: 土匪
    (1)创建组
    (2)创建用户
    (3) jack 创建一个文件,自己可以读写,本组人可以读,其它组没人任何权限
    (4)jack 修改该文件,让其它组人可以读, 本组人可以读写
    (5)xh 投靠警察,看看是否可以读写.

    1)
    [root@hadoop1 home]# groupadd police //创建组
    [root@hadoop1 home]# groupadd bandit
    2)
    [root@hadoop1 home]# useradd -g police jack //将用户添加到指定的组
    [root@hadoop1 home]# useradd -g police jerry
    [root@hadoop1 home]# useradd -g bandit xh
    [root@hadoop1 home]# useradd -g bandit xq
    3)
    [root@hadoop1 home]# passwd jack //为Jack设置密码
    [root@hadoop1 home]# passwd xh //为xh设置密码
    4)
    [jack@hadoop1 ~]$ touch jack.txt //jack创建文件
    [jack@hadoop1 ~]$ chmod u=rw,g=r,o-r jack.txt //设置文件的权限
    [jack@hadoop1 ~]$ ls -l
    -rw-r-----. 1 jack police 0 10月  8 09:05 jack.txt
    5)
    [jack@hadoop1 ~]$ chmod u=rw,g=wr,o+r jack.txt //修改文件的权限
    [jack@hadoop1 ~]$ ls -l
    -rw-rw-r--. 1 jack police 0 10月  8 09:05 jack.txt
    
    [root@hadoop1 home]# usermod -g police xh  //修改xh所在组
    [root@hadoop1 home]# id xh
    uid=505(xh) gid=502(police) 组=502(police)
    
    drwx------. 4 jack     police   4096 10月  8 09:27 jack
    [jack@hadoop1 home]$ chmod g=rx jack //jack开放权限给所在组
    drwxr-x---. 4 jack     police   4096 10月  8 09:36 jack
    
    xh注销重新登陆进入jack
    [xq@hadoop1 home]$ cd jack/
    [xq@hadoop1 jack]$ ll
    -rw-rw-r--. 1 jack police 81 10月  8 09:37 jack.txt
    就可以读写jack.txt文件了
    [xq@hadoop1 jack]$ vim jack.txt
    [xq@hadoop1 jack]$ cat jack.txt
    I am jack 
    我是警察
    我是小红
    我 Jack 又回来了
    

    七、任务调度crond

    • 任务调度:是指系统在某个时间执行的特定的命令或程序。
    • 任务调度分类:
      1.系统工作:有些重要的工作必须周而复始地执行。如病毒扫描等;
      2.个别用户工作:个别用户可能希望执行某些程序,比如对 mysql 数据库的备份。
      crontab 【选项】
      选项:-e 编辑crontab定时任务, -l 查询crontab任务, -r 删除当前用户所有的crontab任务
    #每小时的每分钟执行 ls –l /etc/ > /tmp/to.txt 命令
    */1 * * * * ls –l	/etc/ > /tmp/to.txt
    
    项目 含义 范围
    第一个* 一小时当中的第几分钟 0-59
    第二个* 一天当中的第几小时 0-23
    第三个* 一个月当中的第几天 1-31
    第四个* 一年当中的第几个月 1-12
    第五个* 一周当中的星期几 0-7(0, 7为星期天 )
    特殊符号 含义
    * 任何时间,比如第一个*代表一小时中每分钟都执行
    代表不连续的时间,比如“0 8,12,16 * * *”代表每天的8点,12点,16点都执行
    - 连续的时间范围,比如“0 5 * * 1-6”代表周一到周六的五点0分执行
    */n 每隔多久执行一次,比如“*/10 * * * * 命令”代表每隔十分钟执行一次

    在这里插入图片描述

    #例 1:每隔 1 分钟,就将当前的日期信息,追加到/tmp/mydate 文件中
    #1)先编写一个shell文件/home/mytask1.sh 
      date >> /tmp/mydate
    #2)给 mytask1.sh  一个可以执行权限
      chmod 744 /home/mytask1.sh
    3)crontab -e
    4)*/1 * * * *	/home/mytask1.sh
    
    #例 2:每隔1分钟,将当前日期和日历都追加到 /home/mycal 文件中
    #1)先编写一个文件 /home/mytask2.sh
    date >> /tmp/mycal
    cal >> /tmp/mycal
    #2)给 mytask1.sh 一个可以执行权限
    chmod 744 /home/mytask2.sh
    3)crontab -e
    4)*/1 * * * * /home/mytask2.sh
    

    八、Linux分区和挂载

    1、分区基础知识

    分区的方式

    1. mbr分区:
      1.最多支持四个主分区
      2.系统只能安装在主分区
      3.扩展分区要占一个主分区
      4.MBR最大只支持2TB,但拥有最好的兼容性
    2. gtp分区:
      1.支持无限多个主分区(但操作系统可能限制,比如windows下最多128个分区)
      2.最大支持18EB的大容量(1EB=1024 PB,1PB=1024 TB )
      3.windows7 64位以后支持gtp
      在这里插入图片描述

    Linux分区

    原理介绍
    1)Linux来说无论有几个分区,分给哪一目录使用,它归根结底就只有一个根目录,一个独立且唯一的文件结构, Linux中每个分区都是用来组成整个文件系统的一部分。
    2)Linux采用了一种叫“载入”的处理方法,它的整个文件系统中包含了一整套的文件和目录,且将一个分区和一个目录联系起来。这时要载入的一个分区将使它的存储空间在一个目录下获得。

    3)示意图
    在这里插入图片描述

    硬盘说明
    1)Linux硬盘分IDE硬盘和SCSI硬盘,目前基本上是SCSI硬盘
    2)对于IDE硬盘,驱动器标识符为“hdx”,其中“hd”表明分区所在设备的类型,这里是指IDE硬盘了。“x”为盘号(a为基本盘,b为基本从属盘,c为辅助主盘,d为辅助从属盘),“”代表分区,前四个分区用数字1到4表示,它们是主分区或扩展分区,从5开始就是逻辑分区。例,hda3表示为第一个IDE硬盘上的第三个主分区或扩展分区,hdb2表示为第二个IDE硬盘上的第二个主分区或扩展分区。
    3)对于SCSI硬盘则标识为“sdx~”,SCSI硬盘是用“sd”来表示分区所在设备的类型的,其余则和IDE硬盘的表示方法一样。

    查看所有设备挂载情况
    命令:lsblk 或者lsblk -f

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-uvXbM7n8-1602676199872)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20201008170817312.png)]

    2、如何增加一块硬盘

    1)虚拟机添加硬盘

    在【虚拟机】菜单中,选择【设置】,然后设备列表里添加硬盘,然后一路【下一步】,中间只有选择磁盘大小的地方需要修改,至到完成。然后重启系统(才能识别)!

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qNAjQGH9-1602676199873)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20201008173239676.png)]

    2)分区

    分区命令fdisk /dev/sdb
    开始对/sdb分区
    •m 显示命令列表
    •p 显示磁盘分区同fdisk –l
    •n 新增分区
    •d 删除分区
    •w 写入并退出
    说明:开始分区后输入n,新增分区,然后选择p ,分区类型为主分区。两次回车默认剩余全部空间。最后输入w写入分区并退出,若不保存退出输入q。
    

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OA3WDjdi-1602676199874)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20201008175238653.png)]

    3)格式化

    格式化磁盘
    分区命令:mkfs -t ext4 /dev/sdb1
    其中ext4是分区类型

    先执行分区命令:mkfs -t ext4 /dev/sdb1

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WeYbWrCg-1602676199875)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20201008175953937.png)]
    4)挂载

    挂载: 将一个分区与一个目录联系起来,
    •mount 设备名称挂载目录
    •例如:mount /dev/sdb1 /newdisk
    •umount设备名称或者挂载目录
    •例如:umount/dev/sdb1 或者umount/newdisk
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kpJqXrrJ-1602676199875)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20201008180458812.png)]

    5)设置可以自动挂载。
    永久挂载: 通过修改/etc/fstab实现挂载
    添加完成后执行mount –a 即刻生效
    •用命令行挂载重启后会失效

    [root@hadoop1 newdisk]# vim /etc/fstab
    /dev/sdb1      /home/newdisk           ext4    defaults        0 0
    

    3.磁盘情况查询

    df -h
    du -h /目录
    查询指定目录的磁盘占用情况,默认为当前目录
    -s指定目录占用大小汇总
    -h 带计量单位
    -a 含文件
    --max-depth=1 子目录深度
    -c 列出明细的同时,增加汇总值
    

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YyBFIXQF-1602676199876)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20201008194329994.png)]
    案例

    查询/opt 目录的磁盘占用情况,深度为1  
    [root@hadoop1 ~]# du -ach --max-depth=1/opt
    统计/home文件夹下文件的个数
    [root@hadoop1 ~]# ls -l /home | grep "^-"| wc -l
    统计/home文件夹下目录的个数
    [root@hadoop1 ~]# ls -l /home | grep "^d"| wc -l
    统计/home文件夹下文件的个数,包括子文件夹里的
    [root@hadoop1 ~]# ls -lR /home | grep "^-"| wc -l
    统计文件夹下目录的个数,包括子文件夹里的
    [root@hadoop1 ~]# ls -lR /home | grep "^d"| wc -l
    以树状显示目录结构
    [root@hadoop1 ~]# yum install tree //安装tree指令
    [root@hadoop1 ~]# tree /home
    

    九、网络配置

    1、查看虚拟网络编辑器

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-V62Cstpo-1602676199877)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20201008203250525.png)]

    在这里插入图片描述

    2、查看网关

    在这里插入图片描述

    查看windows环境的中VMnet8网络配置(ipconfig指令)

    ping 目的主机(功能描述:测试当前服务器是否可以连接目的主机)

    3、Linux网络环境配置

    第一种方法(自动获取):
    说明:登陆后,通过界面的来设置自动获取ip

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BEagzPJz-1602676199878)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20201009144843009.png)]

    特点:linux启动后会自动获取IP,缺点是每次自动获取的ip地址可能不一样。

    第二种方法(指定固定的ip):

    直接修改配置文件来指定IP,并可以连接到外网(程序员)

    vi /etc/sysconfig/network-scripts/ifcfg-eth0

    •ifcfg-eth0文件说明
    DEVICE=eth0 #接口名(设备,网卡)
    HWADDR=00:0C:2x:6x:0x:xx #MAC地址
    TYPE=Ethernet #网络类型(通常是Ethemet)
    UUID=926a57ba-92c6-4231-bacb-f27e5e6a9f44 #随机id
    #系统启动的时候网络接口是否有效(yes/no)
    ONBOOT=yes
    # IP的配置方法[none|static|bootp|dhcp](引导时不使用协议|静态分配IP|BOOTP协议|DHCP协议)
    BOOTPROTO=static
    #IP地址
    IPADDR=192.168.184.130
    #网关
    GATEWAY=192.168.184.2
    #域名解析器
    DNS1=192.168.184.2
    •重启网络服务或者重启系统生效
    service network restart 、reboot
    

    十、进程管理

    1、进程

    (1)进程的介绍

    1)在 LINUX 中,每个执行的程序(代码)都称为一个进程。每一个进程都分配一个 ID 号。
    2)每一个进程,都会对应一个父进程,而这个父进程可以复制多个子进程。例如 www 服务器。
    3)每个进程都可能以两种方式存在的。前台与后台,所谓前台进程就是用户目前的屏幕上可以进行操作的。后台进程则是实际在操作,但由于屏幕上无法看到的进程,通常使用后台方式执行。
    4)一般系统的服务都是以后台进程的方式存在,而且都会常驻在系统中。直到关机才才结束。

    (2)显示进程的命令

    ps -a //显示当前终端的所有进程信息
    ps -u //以用户的格式显示进程信息
    ps -x //显示后台进程运行的参数
    

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-aq5izS4P-1602676199879)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20201009152341081.png)]

    ps详解

    1)指令:ps –aux|grep xxx 
    2)指令说明
    •System V展示风格
    •USER:用户名称
    •PID:进程号
    •%CPU:进程占用CPU的百分比
    •%MEM:进程占用物理内存的百分比
    •VSZ:进程占用的虚拟内存大小(单位:KB)
    •RSS:进程占用的物理内存大小(单位:KB)
    •TT:终端名称,缩写.
    •STAT:进程状态,其中S-睡眠,s-表示该进程是会话的先导进程,N-表示进程拥有比普通优先级更低的优先级,R-正在运行,D-短期等待,Z-僵死进程,T-被跟踪或者被停止等等
    •STARTED:进程的启动时间
    •TIME:CPU时间,即进程使用CPU的总时间
    •COMMAND:启动进程所用的命令和参数,如果过长会被截断显示
    

    应用实例

    ps -ef | more //以全格式显示当前所有的进程,查看进程的父进程
    

    在这里插入图片描述

    ps -ef是以全格式显示当前所有的进程
    •-e 显示所有进程。-f 全格式。
    •ps -ef|grep xxx
    •是BSD风格
    •UID:用户ID
    •PID:进程ID
    •PPID:父进程ID
    •C:CPU用于计算执行优先级的因子。数值越大,表明进程是CPU密集型运算,执行优先级会降低;数值越小,表明进程是I/O密集型运算,执行优先级会提高
    •STIME:进程启动的时间
    •TTY:完整的终端名称
    •TIME:CPU时间
    •CMD:启动进程所用的命令和参数
    
    查看sshd进程的父进程号是多少
    [root@hadoop1 ~]#  ps -ef |grep sshd
    

    (3)终止进程

    若是某个进程执行一半需要停止时,或是已消了很大的系统资源时,此时可以考虑停止该进程。使用 kill 命令来完成此项任务。

    kill [选项] 进程号 //通过进程号杀死进程
    killall 进程名称 //通过进程名称杀死进程,也支持通配符,这在系统因负载过大而变得很慢时很有用
    
    常用选项:-9  表示强迫进程立即停止
    kill -9 2701 //杀死进程号为2678的进程
    killall gedit //终止多个gedit 编辑器 【killall通过进程名称来终止进程】
    

    (4)查看进程树

    pstree [选项] //可以更直观地来看进程信息
    常用选项: -p  显示进程的PID
             -u   显示进程所属用户
    

    2、服务管理

    服务(service) 本质就是进程,但是是运行在后台的,通常都会监听某个端口,等待其它程序的请求,比如(mysql , sshd 防火墙等),因此我们又称为守护进程,是 Linux 中非常重要的知识点。
    在 CentOS7.0 后 不再使用 service ,而是 systemctl。

    (1)服务管理指令

    service管理指令:

    service 服务名[start | stop | restart | reload | status]

    查看服务名:
    方式1:使用setup -> 系统服务就可以看到。

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jK4esvcE-1602676199881)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20201010143521079.png)]

    方式2: /etc/init.d/服务名称

    服务的运行级别(runlevel):

    查看或者修改默认级别:vi /etc/inittab
    Linux系统有7种运行级别(runlevel):常用的是级别3和5
    •运行级别0:系统停机状态,系统默认运行级别不能设为0,否则不能正常启动
    •运行级别1:单用户工作状态,root权限,用于系统维护,禁止远程登陆
    •运行级别2:多用户状态(没有NFS),不支持网络
    •运行级别3:完全的多用户状态(有NFS),登陆后进入控制台命令行模式
    •运行级别4:系统未使用,保留
    •运行级别5:X11控制台,登陆后进入图形GUI模式
    •运行级别6:系统正常关闭并重启,默认运行级别不能设为6,否则不能正常启动
    

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rAblOdFt-1602676199882)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20201010145544980.png)]

    chkconfig指令

    •介绍
    通过chkconfig 命令可以给每个服务的各个运行级别设置自启动/关闭
    •基本语法
    1) 查看服务chkconfig --list|grep xxx
    2) chkconfig 服务名--list
    3) chkconfig --level 5 服务名on/off
    

    在这里插入图片描述

    3、动态监控进程

    top [选项]
    选项说明:
    		 -d 秒数  指定top命令每隔几秒更新
             -i 不显示任何闲置或僵尸进程
             -p 通过指定监控进程id来仅仅监控某个进程的状态
    交互操作说明:
             P 以cpu使用率排序,默认就是此项
             M 以内存使用率排序
             N 以PID排序
             q 退出top123456789
    
    #案例1:监视特定用户
    1、输入top命令,回车,查看执行的进程(输入top看到的是不断动态变化的进程)
    2、输入u,回车,再输入用户名即可
    (输入u后就看到图中which user那行,然后直接输入用户名)
    

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6bFBOTlu-1602676199885)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20201010151501268.png)]

    #案例2:终止指定的进程
    1、输入top,回车
    2、输入k,回车,在输入要终止的进程号
    

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WOOZZ5j5-1602676199886)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20201010151800332.png)]

    #案例3:指定系统状态更新的时间(每隔10秒自动更新,默认是3秒)
    top -d 10
    

    4、查看系统网络情况

    • 基本语法:netstat [选项] netstat -anp
    • 选项说明: -an 按一定顺序排列输出 -p 显示哪个进程在调用

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4AIRd1Xz-1602676199887)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20201010152523273.png)]

    请查看服务名为sshd 的服务的信息。
    netstat -anp |grep sshd
    

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-AHPcX7QC-1602676199887)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20201010152951868.png)]

    十一、RPM与YUM

    1、RPM

    介绍:
    一种用于互联网下载包的打包及安装工具,它包含在某些Linux分发版中。它生成具有.RPM扩展名的文件。RPM是RedHat Package Manager(RedHat软件包管理工具)的缩写,类似windows的setup.exe,这一文件格式名称虽然打上了RedHat的标志,但理念是通用的。
    Linux的分发版本都有采用(suse,redhat, centos 等等),可以算是公认的行业标准了。

    rpm包的简单查询指令:
    查询已安装的rpm列表rpm –qa|grep xx
    rpm包名基本格式:
    一个rpm包名:firefox-45.0.1-1.el6.centos.x86_64.rpm
    名称:firefox
    版本号:45.0.1-1
    适用操作系统: el6.centos.x86_64
    表示centos6.x的64位系统
    如果是i686、i386表示32位系统,noarch表示通用。

    rpm包的其它查询指令:

    rpm -qa :查询所安装的所有rpm软件包
    rpm -qa | more
    rpm -qa | grep X [rpm -qa | grep firefox ]
    rpm -q 软件包名:查询软件包是否安装
    rpm -q firefox
    rpm -qi 软件包名:查询软件包信息
    rpm -qi file
    rpm -ql 软件包名:查询软件包中的文件
    rpm -ql firefox
    rpm -qf 文件全路径名查询文件所属的软件包
    rpm -qf /etc/passwd
    rpm -qf /root/install.log
    

    卸载rpm包:
    •基本语法
    rpm -e RPM包的名称
    •应用案例
    1)删除firefox 软件包
    •细节讨论

    1. 如果其它软件包依赖于您要卸载的软件包,卸载时则会产生错误信息。
      如:$ rpm -e foo
      removing these packages would break dependencies:foo is needed by bar-1.0-1
    2. 如果我们就是要删除foo这个rpm 包,可以增加参数–nodeps ,就可以强制删除,但是一般不推荐这样做,因为依赖于该软件包的程序可能无法运行
      如:$ rpm -e --nodeps foo

    安装rpm包:
    •基本语法
    rpm -ivh RPM包全路径名称
    •参数说明
    i=install 安装
    v=verbose 提示
    h=hash 进度条

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lWC5ksca-1602676199888)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20201010155909052.png)]

    2、YUM

    Yum 是一个Shell前端软件包管理器。基于RPM包管理,能够从指定
    的服务器自动下载RPM包并且安装,可以自动处理依赖性关系,并
    且一次安装所有依赖的软件包。前提必须有网。

    yum的基本指令
    •查询yum服务器是否有需要安装的软件
    yum list|grep xx软件列表
    •安装指定的yum包
    yum install xxx 下载安装

    十二、JAVAEE环境搭建

    1、JDK的安装

    0) 先将软件通过xftp5 上传到/opt 下
    1) 解压缩到/opt
    2) 配置环境变量的配置文件vim /etc/profile
    3) JAVA_HOME=/opt/jdk1.7.0_79
    4) PATH=/opt/jdk1.7.0_79/bin:$PATH
    5) export JAVA_HOME PATH
    

    测试hello world

    1.vim hello.java

    2.编写

    public class hello{
    public static void main(String []args){
    System.out.println(“hello world”);
    }
    } 并保存退出

    1. javac hello.java编译
    2. java hello运行

    2、TomCat的安装

    1)解压缩到/opt
    2)启动tomcat   (./startup.sh)
    3)开放端口vim /etc/sysconfig/iptables
    -A INPUT -m state --state NEW -m tcp -p tcp --dport 8080 -j ACCEPT
    4)开启防火墙
    测试是否安装成功:
    在windows、Linux 下访问http://linuxip:8080
    

    3、Eclipse的安装

    1. 解压缩到/opt
    2. 启动eclipse,配置jre和server

    在eclipse.ini文件里加入

    -vm
    /home/software/jdk1.8.0_221/bin/
    
    1. 编写jsp 页面,并测试成功!

    4、MySQL的安装

    具体过程,请自行百度!

    展开全文
  • linux学习笔记

    2020-07-07 13:44:08
    linux目录架构/ 根目录/bin 常用的命令 binary file 的目錄/boot 存放系统启动时必须读取的档案,包括核心 (kernel) 在内/boot/grub/menu.lst GRUB设置/boot/vmlinuz 内核/boot/initrd 核心解壓縮所需 RAM Disk/dev ...
  • 第一章 Linux是什么与如何学习Linux是什么?  Linux 就是一套Open Source 的操作系统! 如同下图所示, Linux 就是核心与系统呼叫接口那两层。  Linux 提供了一个完整的操作系统当中最底层的硬件控制与...
  • 第一步 编辑源代码 filename:test.c #include<stdio.h> int main() { printf("hello world!");...编译器将上述代码中的“stdio.h"编译进来,在此可以用gcc的参数"-E"指定gcc只在预处理结束后才停止编译过程 ...
  • Linux下使用云笔记

    千次阅读 2015-08-24 23:36:36
    Linux下使用云笔记有时学习的时候总是要做一些学习笔记,笔记的同步就是一个大问题,特别是实验室不用用U盘的情况下。磁盘损坏,笔记无法导出是很头疼的问题,经常在linux下做开发就很想用一个兼容各大平台的云笔记...
  • Linux操作系统原理与应用(陈莉君)——学习笔记

    万次阅读 热门讨论 2017-04-10 19:48:13
    Linux操作系统原理与应用》作者陈莉君是翻译《深入理解Linux内核》的作者。...的学习笔记。 书中给出了许多代码实例,很适合结合边学习边实践。 该教材还提供实践学习网站:Linux内核之旅 网站中有许多关于Li
  • Linux学习笔记之——起始篇

    千次阅读 多人点赞 2014-04-10 14:35:59
    摘要:学习笔记目录、方便以后回顾、没有什么捷径可走、不断的记录、总结、练习、coding、coding。
  • Linux学习笔记--导航(CentOS 7)

    千次阅读 2016-06-06 16:40:46
    Linux学习笔记1 Linux学习笔记2 Linux学习笔记3 Linux学习笔记4 Linux学习笔记5 Linux学习笔记6 Linux学习笔记7 Linux学习笔记8 Linux学习笔记9 Linux学习笔记10 Linux学习笔记11 Linux学习笔记12 Linux学习笔记13 ...
  • ############################################################ # # USER YYYY-MM-DD – ACTION # Oldboy 2010-06-09 – Created # QQ:31333741 老男孩 mail:31333741@qq.com #老男孩培训交流群 2
  • Linux内核学习笔记(1)—— 什么是Linux内核? 1. 什么是操作系统? 操作系统是负责完成整个系统中最基本功能和系统管理,包括内核、设备驱动程序、启动引导程序、命令行shell或其它种类的用户界面、基本的文件...
  • 《Unix & Linux 大学教程》 - 第一、二章 学习笔记 Unix简介 & 什么是Linux?什么是Unix 《Unix & Linux 大学教程》 - 第三、四章 学习笔记 Unix连接 & 开始使用Unix 《Unix & Linux 大学教程》 - 第五、六章 ...
  • RHCE7 认证学习笔记

    千次阅读 2016-08-26 11:29:08
    学习笔记1— 系统文件目录结构 http://www.linuxidc.com/Linux/2015-02/114225.htm RHCE7认证学习笔记2– 命令行操作文件 http://www.linuxidc.com/Linux/2015-03/114324.htm RHCE7认证学习笔记3——重定向与...
  • linux操作系统学习笔记1——修改桌面分辨率  今天装上了鸟哥私房菜基础学习篇中推荐的linux操作系统的一个版本CentOS,打算正式开始学习linux操作系统,并坚持每天写下当天的学习笔记,供大家参考学习:  如果你...
  • 我的openwrt开发相关文章

    千次阅读 2015-09-17 13:52:27
    openwrt学习笔记:  在openwrt的学习过程中,走了很多的弯路。...openwrt学习笔记(三):我的openwrt学习笔记(三):linux基础命令学习 2015.8.18 openwrt学习笔记(二):我的openwrt学习笔记(二):OpenWr
  • Linux操作系统原理与应用(陈莉君)

    千次阅读 2017-07-05 16:32:19
    Linux操作系统原理与应用》作者陈莉君是翻译《深入理解Linux内核》的作者。...的学习笔记。 书中给出了许多代码实例,很适合结合边学习边实践。 该教材还提供实践学习网站:Linux内核之旅 网站中有许多关于Li
  • Yosoro——漂亮的Markdown云笔记软件Yosoro是一款基于Electron,React打造的Markdown笔记软件,支持macOS,Windows,Linux。因为正在学习Electron和redux-saga,平常的工作中又用不上这些东西,还因为目前的笔记软件...
1 2 3 4 5 ... 20
收藏数 114,997
精华内容 45,998
关键字:

linux学习笔记