环境搭建Linux学习

  • linux基础
    • 服务器 Server
      • 指硬件:类似一台电脑/主机,往往配置很高,用来运行业务系统。分为物理服务器和云服务器两种。
      • 指软件:比如Nginx、Apache、Tomcat等软件服务器。
    • 工作中安装Linux操作系统的场景:
      • 场景1:公有云(百度云、华为云、阿里云等等),一般都是自动部署,安装完成后根据提供的IP地址直接远程ssh登录即可使用;
      • 场景2:在公司购买的服务器上划虚拟机,安装Linux系统,经常用VMware Esxi来划分和管理虚拟机;
      • 场景3:不划虚拟机,直接在物理机上安装Linux。
    • 学习环境linux安装步骤:
      • 安装虚拟机---->安装操作系统----->安装远程登录工具
    • 常见的操作系统(OS):
      • DOS:个人电脑;
      • Windows:个人电脑,Windows7、Windows10、Windows Server;
      • Mac OS X:MacBook系列笔记本;
      • Android:安卓手机、平板、机顶盒、智能电视机、手环;
      • iOS:iPhone、iPad、iWatch、iPod等;
      • Unix
      • Linux:免费、可靠、安全、稳定、多平台;
    • Linux的发行版,常见的有:Redhat,Redhat Enterprise Linux(RHEL),Ubuntu,SUSE Linux,CentOS,Fedora Core
      • Linux主机的远程登录,常用的ssh客户端有:Xshell, SecureCRT, SSH Client,putty...
    • 查看一个服务器的IP 地址:
      • 使用root用户登录linux系统后,输入ip a 然后回车,如下图所示:

    • Xshell连接Linux主机的配置:

    •  
      • xshell上设置复制和粘贴
      • Linux的7种运行级别:
        • 0: 系统停机状态,系统默认运行级别不能设为0,否则不能正常启动
        • 1: 单用户工作状态,root权限,用于系统维护,禁止远程登陆
        • 2: 多用户无网络状态(没有NFS)
        • 3: 多用户有网络状态(有NFS),登陆后进入控制台命令行模式
        • 4: 系统未使用,保留
        • 5: 多用户有网络,登陆后进入图形GUI模式
        • 6: 系统正常关闭并重启,默认运行级别不能设为6,否则不能正常启动
      • 查看系统的运行级别:runlevel
        • [root@localhost ~]# runlevel
        • N 3
      • Shell和Shell脚本/编程
        • Shell是一个程序,它的作用是接受用户输入的linux命令,翻译解释并调用内核去执行对应的操作,并向用户返回执行结果,相当于用户和linux内核之间交互的桥梁;

        • Shell脚本,指的是给Shell编写的脚本程序,
    •  
      • Linux上的命令格式:
        • (1)格式:命令 参数,命令和参数之间以及参数和参数之间用空格隔开,比如ps -e
        • (2)区分大小写,有的特殊情况下某些参数可能用大写或者小写都表示相同的含义,具体用man命令去查看
      • 常见报错,command not found,可能的原因是:
        • (1)你输入的是错误的命令,比如大小写错误、拼写错误、缺少空格等;

    •  
      • (2)你输入的命令是对的,但是在你的主机上没有安装这个命令,一般情况下可以通过yum install 安装包的名称 来安装。

      • 注意:执行yum install 命令来安装命令之前,先要找到命令对应的安装包名称,可以通过yum search 命令 来找。比如:
      • yum search ifconfig 找到ifconfig命令对应的安装包名称是net-tools.x86_64

      • 执行yum install net-tools.x86_64命令安装

      • linux命令帮助
        • man命令:查看某个命令的详细用法,格式是man 命令,比如 man shutdown表示查询shutdown命令的详细用法,进入man页面后输入:q退出(注意是英文的冒号)
          • 如果你输入man命令提示command not found,则执行yum install -y man来安装man命令。
        • --help命令:格式 command --help
      • 查看/修改日期时间的命令:date
        • date:直接查看日期和时间,以默认的格式展示
        • 如果我们向以指定的格式展示日期和时间,可以用格式化输出,比如 date +'%Y-%m-%d %H:%M:%S'

        • 修改日期/时间的命令:date -s
          • 修改时间:
          • [root@localhost ~]# date -s '10:00:00'
          • Fri Sep 6 10:00:00 CST 2019
          • 修改日期:
          • [root@localhost ~]# date -s '20190907'
          • Sat Sep 7 00:00:00 CST 2019
          • 修改日期和时间:
          • [root@localhost ~]# date -s '20190908 10:20:20'
          • Sun Sep 8 10:20:20 CST 2019
        • NTP时钟同步:以一台标准时钟源作为参考,其它服务器自动向这台主机同步时间。
      • 查看CentOS的版本:cat /etc/redhat-release

      • 关机命令:init 0或者poweroff或者shutdown -h now
      • 重启命令:init 6或者reboot或者shutdown -r now
  • linux操作系统安装
    • linux操作系统安装的场景
      • 云环境(常用的工作环境)
      • 物理服务器(常用的工作环境)
      • 虚拟机(学习环境)
    • linux操作系统的运行级别
      • 0:表示关机状态
      • 1:单用户状态,不支持远程登录
      • 2:多用户无网络的状态(无NFS服务)
      • 3:多用户有网络状态(有NFS服务)
      • 4:系统保留的状态,目前没有被使用
      • 5:多用户有网络状态,进入GUI界面
      • 6:关机并重启
    • linux上运行一个文件的方式有以下几种
      • 这里的bash是指在文件中指定的解释器,如果使用的是ksh或ch,则这里的bash需要修改为对应的解释器

    • linux操作系统版本查看
      • 扫描二维码关注公众号,回复: 13498799 查看本文章
    • linux关机命令
      • init 0
      • shutdown -h now:表示立即关机
      • shutdown:表示默认1分钟后关机
      • shutdown -h xx:表示xx分钟后关机
      • halt -p
      • poweroff
    • linux重启命令
      • init 6
      • reboot
      • shutdown -r now
    • 系统时间的查看与设置
      • 命令date
        • [root@localhost ~]# date
        • Fri Mar 2 23:19:24 CST 2018
      • 格式化显示时间
        • [root@localhost ~]# date +'%Y-%m-%d %H:%M:%S'
        • 2018-03-02 23:20:45
      • 设置系统时间
        • 例如:
        • date -s ‘20180302’ //设定日期为2018年3月2日
        • date -s ‘23:30:50’ //设定时间为23:30分50秒
        • date -s ‘20180302 23:30:50’ //设定日期和时间
    • linux上运行文件的几种方式
  • linux文件和文件夹操作基础
    • Linux的目录结构:
      • Windows上的目录结构是多个并列的树状结构,有盘符C/D/E......等
      • Linux的目录结构是单个树状结构,没有盘符,一切从根目录(/)开始。
    • Linux上的主要目录说明:
    • 切换目录的命令:cd
      • 用法:cd 目录,表示切换/进入到指定目录下,比如cd /usr/local/src
      • 查看当前所在目录的命令:pwd
      • 常见的报错No such file or directory,表示你要切换的目录不存在,有可能目录名称输错了也有可能位置找错了,可能在另外的路径下

      • cd 回车 表示返回当前用户的家目录
      • cd - 表示返回上一次所在目录
      • cd ../../../ ..表示返回上一级目录,可以连续使用..
    • 当前目录:你当前所在的目录,用pwd命令查看
    • 假设当前在/etc/sysconfig,如果要切换到/etc/sysconfig/network-scripts目录下,怎么切换?
      • cd network-scripts,这种写法叫相对路径写法,相对当前目录去写你的路径,一级一级地写直到你要找的目录。
      • cd /etc/sysconfig/network-scripts,这种写法叫绝对路径写法,从/目录开始写直到你要找的目录
    • 几个特殊的目录:
      • / 根目录,但注意一点:/出现在不同位置表示不同的含义。

      • . 当前目录
      • .. 当前目录的上一级目录
    • 练习:

      • 假设当前目录为f1,切换到f111
        • 相对路径:cd f11/f111
        • 绝对路径:cd /home/tom/f1/f11/f111
      • 假设当前目录为f12,要切换到f111
        • 相对路径:cd ../f11/f111
        • 绝对路径:cd /home/tom/f1/f11/f111
    • 创建目录:mkdir
      • 语法:mkdir 路径/目录名称
      • 举例:mkdir testdir 表示在当前目录下创建一个名字叫testdir的目录;mkdir /usr/local/src/testdir 表示在/usr/local/src目录下创建一个名叫testdir的子目录
      • 常用参数:-pv,-p表示如果父目录不存在则先创建父目录再创建子目录,-v表示返回每个目录创建成功的消息,举例 mkdir -pv dir01/dir011 在当前目录下创建一个名叫dir01的目录并在dir01下创建子目录dir011
    • 删除目录:rmdir
      • 语法:rmdir 路径/目录
      • 注意:这个命令只能删除空目录,如果该目录下有问题则不能删除。
      • 常用参数:-pv
    • 创建文件:touch或者vi
      • 格式:touch 路径/文件名,它的作用是创建一个空文件,如果要创建多个文件,可以用空格隔开多个文件名,比如:
      • touch file1 file2 file3 ../file4
    • 删除文件或目录:rm
      • 语法:rm 路径/文件 表示删除指定路径下的文件
      • 常用参数:-f 表示强制删除不提示;-r, -R 表示递归地删除目录及目录下的内容
    • 查看目录下的文件:ls
      • 语法:ls 表示列出当前目录下的文件或子目录;ls 目录 表示列出指定目录下文件或子目录
      • 常用参数:-l 表示以列表的形式展示;-a 表示查看所有文件包含隐藏文件(文件名前带.的表示时隐藏文件)和当前目录及上一级目录
  • linux目录和文件中级操作
    • 查看文件常用命令
      • 常用的查看文件文本内容命令有cat、less、tail、head
      • cat命令:查看短文件
      • less命令:查看长文件
        • k 向上一行
        • j 向下一行
        • Page up 向上一行
        • Page down 向下一行
        • q 退出
      • tail命令:从文件尾部查看文件,常用参数 -f,打印文件的新增内容;tail -n file查看文件的最后n行,比如tail -5 file01表示查看file01的末尾5行。默认显示最后的10行
      • head命令:从文件开头查看文件,head -n file查看文件的前n行,比如head -5 file01表示查看file01的前5行。默认显示前10行
    • ls命令扩展
      •  
        • 不带任何参数:列出当前目录的内容
        • 参数为目录:列出指定目录的内容
        • 加参数-R:递归列出所有子目录的内容
        • 加参数-l:列表形式显示详细信息
          • ls -l可以用别名ll来表示:
          • [root@localhost logs]# which ll
          • alias ll='ls -l --color=auto' /usr/bin/
        • 通配符
          • 定义:通配符是一种特殊语句,主要有星号(*)和问号(?),用来模糊搜索文件。
    • 创建文件
      • 创建文件命令:vi,touch
      • vi abc01.txt
      • touch file01 file02 file03
      • 创建文件也可以使用相对路径和绝对路径
    • 复制文件、目录
      • 复制文件
        • 复制文件命令:cp 源文件 目标文件
        • 源和目的路径都可以是绝对路径和相对路径
        • cp file01 file02 当前目录复制,源和目标文件名称必须不同
        • cp file01 /home/jim 目标是目录,产生同名文件
        • cp file01 /home/jim/file02 目标是文件,可以改名(相当于另存为)
        • cp file01 file02 /home/jim 源可以是多个文件
        • 如果file02已存在,会被覆盖,除非-i,要求提示
        • [root@ecs-9b83 charles]# which cp //在普通用户下不会有交互式提醒,在root用户下才会有提示
        • alias cp='cp -i’
        • /bin/cp
      • 复制目录
        • 复制目录
        • cp -r dir01 dir02:当前目录复制,源和目标目录名称必须不同
        • cp -r file01 dir01 /home/jim/dir02:源可以是多个文件、或目录
        • 参数-r或-R都有效
    • 移动文件和目录
      • 移动文件
        • 在相同目录下移动文件
          • mv file01 file02 #重命名文件file01为file02

      • 移动目录
        • mv dir03 dir07 #当目标目录不存在时,表示重命名源目录dir03为目标目录dir07
        • mv script dir08 #当目标目录存在时,表示把源目录script 移动到目标目录dir08下面
      • 移动文件到指定目录(目标文件存在和不存在的情况)
        • mv file01 dir01/ 移动file01到dir01目录
      • 移动目录和文件到指定目录下
    • 文件链接
      • 为什么需要链接?
        •  
          • 实现文件的共享使用(原因:不能移动,那个位置也有用)
          • 提供了隐藏文件路径、增加权限安全及节省存储等好处
          • 和复制的区别:文件在磁盘中只有一个拷贝,节省磁盘空间
      • 链接的种类:硬链接 (hard link) 与软链接(又称符号链接,即 soft link 或 symbolic link)。
        • 创建硬链接:ln dog dog-hard //dog问源文件名,dog-hard为硬链接文件名(自己任意取的名),在创建链接文件时,可以在文件名前加路径,比如 ln /var/log/messages /home/test/messages_hard,创建软链接也是这样
        • 创建软链接:ln -s pig pig-soft
      • 链接文件原理
        • 我们知道文件都有文件名与数据,这在 Linux 上被分成两个部分:用户数据 (user data) 与元数据 (metadata)。用户数据,即文件数据块 (data block),数据块是记录文件真实内容的地方;而元数据则是文件的附加属性,如文件大小、创建时间、所有者等信息。在Linux中,元数据中的inode 号(inode 是文件元数据的一部分但其并不包含文件名,inode 号即索引节点号)才是文件的唯一标识而非文件名。文件名仅是为了方便人们的记忆和使用,系统或程序通过inode 号寻找正确的文件数据块。下图展示了程序通过文件名获取文件内容的过程。
      • 查看文件inode命令:stat或ls -i
        • [root@ecs-9b83 charles]# ls -i file01
        • 1837781 file01
      • 软链接和硬链接的区别
        • 硬链接:若一个 inode 号对应多个文件名,则称这些文件为硬链接。换言之,硬链接就是同一个文件使用了多个别名
          • 文件有相同的 inode 及 data block;
          • 只能对已存在的文件进行创建;
          • 不能交叉文件系统进行硬链接的创建;
          • 不能对目录进行创建,只可对文件创建;
          • 删除一个硬链接文件并不影响其他有相同 inode 号的文件。
        • 软链接(符号链接):若文件用户数据块中存放的内容是另一文件的路径名的指向,则该文件就是软连接。软链接就是一个普通文件,只是数据块内容有点特殊。类似于Windows的快捷方式
          • 软链接有自己的文件属性及权限等;
          • 可对不存在的文件或目录创建软链接;
          • 软链接可交叉文件系统;
          • 软链接可对文件或目录创建;
          • 创建软链接时,链接计数 i_nlink 不会增加;
          • 若被指向的原文件被删除,则相关软连接被称为死链接(即 dangling link,若被指向路径文件被重新创建,死链接可恢复为正常的软链接)。
        • 对源文件的修改,软、硬链接文件内容也一样的修改,因为都是指向同一个文件的内容。
  • linux目录和文件高级操作
    • which命令
      • which指令会在PATH变量指定的路径中,搜索某个系统命令的位置,并且返回第一个搜索结果;
      • 用法:用来查找可执行文件的位置、显示命令所在路径;
      • 语法:which 系统命令
      • 举例:
      • which grep:查找grep命令的二进制文件路径

    • whereis命令
      • whereis命令
        • whereis 命令则是用来快速查找程序的二进制文件、源代码和man手册文件的路径;
        • 语法:whereis 系统命令
        • 举例:
      • whereis grep
      • 查找那么找到的结果就比which grep命令找到的结果多,因为which命 令只会列出二进制文件路径,而whereis命令会把grep的二进制文件、源 代码、帮助手册都返回。
    • find命令
      • find命令
        • find命令会在指定目录及其子目录下查找符合条件的特定文件,当我们忘记文档路径时,可以使用该命令
        • 语法:find 目录名 条件
        • 举例:find /home/tom -name test.sh
      • find / -name test.sh
      • find命令举例
        • 常用条件
          • -name 名称: 指定要被查找的文件或目录名称,可用通配符
          • -type 类型: 以文件类型作为查找条件,文件类型如下:d--目录(directory),f--文件 (file)
          • 例如:
          • find /temp -name “abc” #在/temp目录下查找名称为abc的文件和文件夹
          • find /temp -name “abc*” #在/temp目录下查找名称以abc开头的文件和文件夹
          • find /temp -name “abc*” -type f #在/temp目录下查找名称以abc开头的文件
    • grep命令
      • grep命令
      • 一种强大的文本搜索工具,并把匹配的行打印出来
      • 啥时候用?
        • 查看日志
        • 查看命令输出
      • 命令格式:grep 关键字 文件,比如:grep "root" /var/log/messages
      • 默认大小写敏感
      • 支持正则表达式
      • -c:只输出匹配行的行数(有多少行匹配)
      • -i: 不区分大小写
      • -n:只显示匹配行及行号
      • -v:显示不含匹配文本的所有行
      • 示例:
        • grep “test123” d* :显示以d开头的文件中包含test123的行
        • grep “test” file01 file02 file03:显示file01、file02、file03中包含test的行
        • grep “root” -r /var/log:在/var/log所有子目录文件中搜索包含字符串root的行
        • grep “^test” /var/log/messages:在/var/log/messages文件中搜索以字符串test开头的行
        • grep “test$” /var/log/messages:在/var/log/messages文件中搜索以字符串test结尾的行
        • 在当前目录下查找包含指定字符串的文件:

        • 查找包含指定字符串的行,查找时忽略大小写,并显示对应的行号:(示例中表示文件messages中第14行包含要查找的字符串)

        • 在指定文件中查找不包含指定字符串的行数:

        • 在指定文件中查找以指定字符串开头、结尾的行:

    • wc(文件内容统计)
      • wc -l /etc/passwd:统计/etc/passwd文件有多少行
      • wc -c /etc/passwd:统计/etc/passwd文件有多少个字节
      • 带着管道符使用:ps -ef |wc -l
    • du 查看目录或文件占用的磁盘空间
      • 语法:du -sh 文件名或者目录名
      • du -ah:显示指定目录及其所有子目录和文件的磁盘使用空间
    • df 查看文件系统占用磁盘空间
      • df命令是查看文件系统的磁盘使用情况,比如总空间多大、使用了多少,可用空间多少、使用率等信息;
      • 语法: df -h
      • 查看该操作系统中所有文件系统的总共大小、空余大小、磁盘占用情况

  • vi编辑器
    • 命令格式:vi 文件名
    • 如果vi后面跟具体的文件名,表示打开该文件进行查看和编辑
      • 如果文件已存在,则打开并编辑文件(看底部提示)
      • 如果文件不存在,则新建并编辑文件(看底部提示)
    • 没有鼠标,纯键盘操作(和Windows的记事本比较)
    • vi操作模式
      • vi可分为三种操作模式,分别是
        • 命令模式(command mode)
        • 插入模式(insert mode)
        • 底线模式(last line mode)
      • 三种工作状态,完成不同的任务
      • 命令模式
        • 刚进入时的默认模式
          • 此时不可以直接添加文字
          • 不能用退格删除文字
        • 控制屏幕光标的移动
        • 字符的删除、复制、粘贴
        • 进入插入模式
        • 进入底线模式
      • 插入模式
        • 在插入模式下面可以对文件内容进行编辑
        • 插入模式下底部有个--INSERT--标记
        • 在命令模式下,可以输入下面的字符进入插入模式
          • i 插入,从目前光标所在之处插入所输入的字符
          • a 增加,目前光标所在的下一个字符处开始插入字符
          • o 插入新的一行,从行首开始输入字符
          • 插入模式下按ESC健切换到命令模式
      • 底线模式
        • 在插入模式下先按Esc键进入命令模式,再输入冒号: 进入底线模式
        • 在底线模式下,可以完成对文件的保存、内容替换、显示格式的设置等工作
      • 三种模式间的切换
      • 命令模式功能-光标移动
        • 按shift+g:移动到文件的最后一行行首
        • 按gg:移动到文件的开头
        • 按0或^:移动到所在行的行首
        • 按$:移动到所在行的行尾
        • 光标的上下左右移动:
        • 使用键盘上的方向键
        • 或者kjhl对应上下左右
      • 命令模式功能-删除、复制、粘贴
        • x:删除
        • x是往后删,相当于delete键,X是往前删,相当于Backspace键
        • 3x表示删除光标所在位置开始的3个字符,包括光标所在位置
        • 如果输入命令错误,可以按Esc键取消
        • dw:删除光标所在处直到词尾的内容
        • dd:删除光标所在行,3dd表示删除从光标所在行开始的3行,包括光标所在行
        • yw:复制光标所在处到词尾的内容
        • yy:复制光标所在行,3yy表示复制3行
        • p:粘贴
      • 命令模式功能-替换、撤销
        • r:替换光标所在处的字符
        • shift + r:连续替换字符直到按ESC为止
        • u:假如误操作一个命令,可以马上按u进行撤销,可以连续按u撤销多个之前做出的操作(等于Windows下的ctrl + z)
        • 反撤销:Ctrl + r
      • 插入模式功能-输入内容
        • 可以插入字符
        • 注意:
          • 上下左右键也可以导航
          • delete和backspace键可以删除字符
      • 底线模式功能-查找、定位
        • 在命令模式下输入冒号进入底线模式
        • :set nu 在每一行的行首显示行号
        • :set nonu 关闭显示行号
        • :n n是你要输入的数字,再按回车,将跳转到数字指定 的行
        • :/关键字 先按/,再输入你要查找的字符
          • 可以输入n,向下继续查找
          • shift+n是往上查找
          • set ic:设置忽略大小写(首先使用vi filename打开文件,然后输入:然后输入set ic 回车,然后输入/ 再输入要查找的字符串,最后回车)
          • set noic:设置不忽略大小写
      • 底线模式功能-字符替换
        • 在底线模式下输入"1,$s/oldstring/newstring/g"(实际使用时,这里的引号不用)会将全文的oldstring字符串替换成newstring字符串
          • 1,$表示从第一行到最后一行
          • s表示替换
          • g表示每行全部替换
        • :1,20s/oldstring/newstring/g 将1至20行间的oldstring替换成newstring字符串
      • 底线模式功能-保存、退出
        • :行号 w 文件名 如果你想摘取文件的某一段,存为另一个文件,可以使用这个指令,例如30,50 w nice
        • :w 新文件名 将文件另存为新文件
        • :wq 保存并退出
        • :q! 强制退出vi并不保存当前的修改内容
  • 重定向、管道与环境变量
    • 重定向
      • 标准输入、标准输出、标准错误输出
        • 执行一个shell命令行时通常会自动打开三个标准文件,即:
        • 标准输入文件(stdin),通常对应终端的键盘;
        • 标准输出文件(stdout)和标准错误输出文件(stderr),这两个文件都对应终端的屏幕。
        • 进程将从标准输入文件中得到输入数据,将正常输出数据输出到标准输出文件,而将错误信息送到标准错误文件中。
      • 输出重定向
        • 有的时间,不想输出到终端上(命令结果要处理);
        • 这时可以把输出结果重定向到某个文件;
        • 语法:命令 > 文件
        • 比如:ps -ef > file01 表示把ps -ef的结果重定向到文件file01中;
        • 输出重定向会覆盖文件内容,如果不希望文件内容被覆盖,可以使用 >> 追加到文件末尾。
      • 错误重定向
        • 一般情况下,每个Linux 命令运行时都会打开三个文件:
          • 标准输入文件(stdin):stdin的文件描述符为0,Unix程序默认从stdin读取数据。
          • 标准输出文件(stdout):stdout 的文件描述符为1,Unix程序默认向stdout输出数据。
          • 标准错误文件(stderr):stderr的文件描述符为2,Unix程序会向stderr流中写入错误信息。
        • 默认情况下,命令 > 文件 会将输出重定向到 file,命令 < 文件 会将输入重定向到文件;
        • 如果希望将错误重定向到文件,可以这样写:命令 2 > 文件
        • 同样可以用>>来追加错误到文件末尾。
      • 同时重定向输出与错误
        • 同时将输出与错误重定向到同一个文件
        • 命令 >文件 2>&1:把标准错误和标准输出都重定向到文件。比如:ps -ef >out 2>&1
        • 同时将输出与错误重定向到不同文件
        • 命令 >文件A 2>文件B:把标准输出重定向到文件A,标准错误重定向到文件B,比如:ps -ef 1> outfile 2>errorfile
          • 注意:这里1与>之间,2与>之间没有空格
      • 输入重定向
        • 和输出重定向一样,Linux命令也可以从文件获取输入,也就是输入重定向;
        • 语法:命令 < 文件
        • 比如:rm -i file01 < file02 表示从file02文件中读取内容作为 命令的输入;
          • 注意:输入重定向用的是小于号(<),输出重定向是大于号(>)。
    • 管道
      • 经常要将一个命令的输出的内容,给另一个命令作为输入的内容进行处理
      • 比如先用ps -ef查看系统所有进程,再用grep 1182过滤ID为1182的进程
      • 可以这样写:
      • ps -ef >tmp.out_file
      • grep 1182 tmp.out_file
      • 也可以更方便地写成:
      • ps -ef |grep 1182
      • 这里的“|”就是管道,表示将ps -ef的输出作为grep 1182的输入。
      • 管道的作用就是临时存储
      • 管道的用法
        • 只显示当前系统中包含sshd的进程

        • 查找messages中包含Host字符串的行:

        • 打印出当前系统中以root用户运行的进程数:

    • 环境变量
      • 如何设置环境变量:命令方式、配置文件(/etc/profile,/etc/bashrc,~/.bash_profile,~/.bashrc)
      • 什么是变量?
        • 让某个特定的字符串代表不固定的内容就是变量,比如高中学过的数学y=ax+b。等号左边的y就是变量,右边的ax+b就是变量的内容。注意左边的y是未知数,右边的ax+b是已知数
      • 什么是Linux系统的环境变量?
        • Linux是一个多用户的操作系统,每个用户登录系统后,都会有一个专用的运行环境。这个运行环境是用一组环境变量来定义的。用户也可以对自己的运行环境进行定制,其方法就是修改相应的系统环境变量。
      • 打印环境变量的命令: env、 printenv
      • 常见的环境变量如HOME,PWD,PATH等
      • 查看系统的某个环境变量的值:echo $变量名,比如echo $PATH,echo命令的作用是显示字符,$放在变量名前表示引用某个变量
      • 环境变量PATH的作用:
        • 当输入命令的时候Linux会去查找PATH里面记录的路径。比如在根目录/下可以输入命令ls,在/usr目录下也可以输入ls,但其实ls这个命令根本不在这个两个目录下,事实上当你输入命令的时候Linux会去/bin,/usr/bin,/sbin等目录下面去找你此时输入的命令,而PATH的值恰恰就是/bin:/sbin:/usr/bin:……。其中的冒号使目录与目录之间隔开;
      • 配置环境变量
        • 把export PATH=$PATH:/home/tom的命令添加到配置文件的末尾
          •  
            • 如果要配置对所有用户永久生效,则添加到配置文件/etc/profile
            • 如果要配置对当前用户生效,则添加到配置文件~/.bashrc或者~/.bash_profile
        • 执行如下命令使配置生效(为了保险起见,最好是退出当前用户,然后再重新登录该用户,从而让环境变量生效)
          • source /etc/profile
  • linux用户管理
    • Linux用户、用户组
      • Linux是一个多用户的操作系统
      • 任何一个要使用系统资源的用户,必须登录进入系统
      • Linux用户属于一个或多个特定的组,称为用户组,即group
    • 为什么要分用户和用户组
      • 资源访问控制
        • 文件(泛义上的文件)
      • 所有文件都属于一个特定的用户,和一个特定的用户组
      • 每个文件都有一定的访问权限,用户限制不同用户和用户组的访问行为
    • 用户与用户组
      • Linux系统以组Group方式管理用户,用户和组的对应关系为多对多,即某个用户可属于一个或多个组,某个组可以有0个、1个或多个用户。
      • 组的分类:从用户的角度,分为主组和附属组
        • 主组:也被称为primary group、first group或initial login group,用户的默认组,用户的gid所标识的组
        • 附属组:也被称为Secondary group或supplementary group,用户的附加组
        • 用户必须有且只能有一个主组,就可以有0个、1个或多个附属组,如我们一定会有一个用来安家的房子(类同主组),还可以有n个用于投资或其他打算的房子(附属组)
      • Linux用户类型
        • root用户
          • 超级管理员用户,具有操作系统的最大权限
        • 普通用户
          • 由超级用户创建及授权,并且可以登录到Linux系统执行某些任务
        • 系统用户
          • 系统内创建了若干用户,如mail、ftp、bin等,默认情况下,系统用户都是无法登录的
      • 用户信息文件/etc/passwd
        • Linux的/etc/passwd文件是用来记录用户的所有信息
          • 1-用户名:长度在1到32个字符之间
          • 2-密码:x加密密码存在/etc/shadow
          • 3-用户ID(UID):root用户的ID是0
          • 4-用户主组ID(GID):用户的主组ID,root组的ID是0
          • 5-用户ID说明
          • 6-用户家目录
          • 7-用户默认的shell
      • 创建用户
        • 命令:useradd,格式:useradd 用户名
        • root用户使用useradd命令创建用户,比如:useradd jim
        • 参数:
        • -d:指明用户家目录,若该目录不存在则创建目录
        • -g:指明用户所属组,该用户组必须存在
        • 该命令完成的事情:
        • 在/etc/passwd文件中增加一行数据,表示该用户的信息
        • 为该用户创建用户组,将该用户标识符加在/etc/group文件中,如果有-g选项,则不创建用户组,而是将该用户加入指定组中
        • 为该用户创建一个家目录(home directory),将家目录的拥有者改为该用户所有
        • 示例:
      • 修改用户密码
        • 命令:passwd 用户名
        • root用户使用下列命令为用户jim设置密码
        • [root@localhost ~]# passwd jim
        • Changing password for user jim.
        • New password:
        • Retype new password:
        • passwd: all authentication tokens updated successfully.
        • 创建了用户之后,其密码是随机的
        • 用户可以修改自己的密码(需要输入当前密码)
        • 只有root用户可以修改其他用户密码
      • 修改用户信息
        • 命令:usermod
        • 修改用户所属的组举例:
        • groups jim //查看jim用户所属的组
        • usermod -g root jim //修改用户jim的主组为root
        • usermod -a -G g4 jim //增加用户jim的附属组g4
        • usermod -G g2,g3 jim //修改用户jim的附属组为g2、g3
        • usermod -L jim //锁定jim用户,锁定后该用户不能再登录
        • usermod -U jim //解锁jim用户,解锁后该用户可以再登录
        • 示例:
      • 用户查询
        • 用户可以使用下列指令查询用户相关信息
        • who:查询当前在线的用户,只能查询在登录页面输入了用户名密码登录的用户,通过su命令切换的用户无法查询到
        • whoami:用户身份查询,当前所在的用户
        • groups:查询用户所属的组
        • [root@localhost ~]# groups jack
        • jack : user05 user03 user04
        • id:显示当前用户信息
        • [root@localhost ~]# id
        • uid=0(root) gid=0(root) groups=0(root)
      • 用户间切换
        • 命令:su
        • 例如:
        • 切换到用户jim:su - jim 或 su jim
        • 切换到root用户:su - 或 su
        • 有没有“-”的区别:
        • 有“-”会重新初始化环境,比如全新用户home目录,新的环境变量;如果没有“-”表示继承上一个用户的环境变量
        • 举例:
        • [root@localhost ~]# su - jack
        • [jack@localhost ~]$ pwd
        • /home/jack
        • [root@localhost ~]# su jack
        • [jack@localhost root]$ pwd
        • /root
      • 删除用户
        • 命令:userdel,格式:userdel 用户名
        • 如果加参数-r,表示在删除用户的同时,一并把用户的家目录及本地邮件存储的目录或文件也一同删除
        • 例子
        • userdel jim //删除用户jim,但不删除其家目录及文件
        • userdel -r jack //删除用户jack,其家目录及文件一并删除
      • 用户组操作
        • Linux系统中,每个用户账号至少属于一个组,每个组可以包括多个用户
        • 管理组的常用命令有如下:
        • groupadd:创建组
          • root用户创建用户组sales
          • groupadd sales
        • groupdel:删除组
          • root用户删除用户组sales
          • groupdel sales
        • usermod:修改用户所属组
        • 只有root用户可以操作
  • 进程
    • 进程和程序的概念:
      • 程序(软件)用代码决定程序的行为,存在存储介质里,比如硬盘。
      • 程序运行起来,就是操作系统把存储介质上的可执行文件加载到内存里面运行,这个运行的程序叫做进程。
      • 程序是静态的文件,进程是程序的一次执行过程,进程是动态的。
    • Shell就是一个进程
      • 查看进程的命令:ps(process status)
    • ps命令查看进程
      • [root@localhost ~]# ps
        • PID TTY TIME CMD
        • 3327 pts/1 00:00:00 bash
        • 3470 pts/1 00:00:28 java
        • 3505 pts/1 00:00:00 SendProxy
        • 3652 pts/1 00:00:02 java
        • 3996 pts/1 00:00:00 ps
      • 进程ID(PID)
        • 操作系统用数字来标识进程
        • ps命令显示进程的ID
      • 不带任何参数
        • 同一个用户同一个终端
      •  
        • -ef参数
          • e表示所有,f表示full-format,尤其是PPID和command内容
      •  
        • -axu参数
          • ax表示所有,u表示user-oriented
      •  
        • 经常和管道符连用
          • ps -ef |grep java
      • 查询结果说明
        • ps -ef显示出的结果:
          • UID:用户ID
          • PID :进程ID
          • PPID:父进程ID
          • C:CPU占用率
          • STIME:开始时间
          • TTY:开始此进程的TTY----终端设备
          • TIME:此进程运行的总时间
          • CMD :命令名
    • 后台运行进程
      • 前台进程和后台进程
        • Shell里正在执行的和用户进行交互的进程叫前台进程
        • 举例ps,ls都是前台进程,时间短
        • 有的命令执行时间长,比如备份程序
        • 可以在命令后加&在后台执行
      • 实例bash test.sh&
      • 后台运行,意味着不从标准输入读入字符
        • 后台运行的进程我们叫后台进程,或者后台任务
    • 进程前、后台切换
      • 列出后台进程命令jobs
      • 示例:执行bash test.sh&
      • fg <num>将后台进程调到前台,比如fg 1
      • Ctrl+Z可挂起进程,注意jobs显示的状态是stopped
      • bg <num>可将进程在后台运行,比如在执行Ctrl+Z挂起进程后,再用命令bg 1让进程在后台继续执行
    • 终止进程
      • 进程的两种终止方式
        • 自行终止
          • 任务执行完成,比如ps
          • 用户让其退出,比如vi,exit
          • 异常退出,比如程序里有以1的代码
        • 用户手动杀死进程
          • kill PID #杀死进程
          • kill -9 PID #强制杀死进程
          • Ctrl + C
      • 只有owner(即进程的归属用户)和root才能杀死进程
  • linux文件权限
    • 文件必须有一个所属用户和一个所属组
    • 不同类型的用户有不同的权限
    • 对一个文件来说它的用户分为三种

    • 对文件的三种权限
      • 三种访问权限:可读、可写、可执行
      • 注:对目录而言,可执行权限是一个基础权限

    • 改变文件访问权限(及三种方式)
      • chmod命令
        • 谁可以改变文件访问权限?root和owner
        • 语法:chmod [who][op][permission] filename
      • 例如:chmod u+x file01
      • chmod [who][op][permission] filename
        • who项表示用户类型,它的内容为以下一项或多项
          • u 拥有者(user --owner)
          • g 与拥有者同一组的用户(group)
          • o 其他人(other)
          • a 所有人(all)
        • op项表示动作
          • + 表示要加上permission指定的权限
          • - 表示要取消permission指定的权限
        • permission项为存取权限,它的内容为以下一项或多项
          • r 表示可读
          • w 表示可写
          • x 表示可执行
        • 示例
          • 第一种写法:
            • chmod ug+w file01 拥有者和同组用户对file01“可写”
            • chmod a-x file02 所有人对file02不可执行
            • chmod u+rwx file03 拥有者对file03“可读、可写、可执行”
          • 第二种写法:
            • chmod u=rwx file01 拥有者对file01“可读可写可执行”
            • chmod u=rwx,g=rx,o=r file02 拥有者对file02“可读可写可执行”, 对同组用户“可读可执行”,对其他 用户“可读”
          • 第三种写法:
            • chmod 755 file01
            • 等价于
            • chmod u=rwx,g=rx,o=rx file01
    • 改变文件所有者和所属组
      • chown命令命令
        • 谁可以改变文件的所有者和所属组?
      • 只有root用户,owner都不行root用户,owner都不行
        • 语法:chown [选项]…[所有者]:[所属组] 文件chown [选项]…[所有者]:[所属组] 文件
        • 举例:
      • chown jack file01:把文件file01的所有者改成jack jack file01:把文件file01的所有者改成jack
      • chown jack:jack file02 :把文件file02的所有者改成jack,所属组改成jack jack:jack file02 :把文件file02的所有者改成jack,所属组改成jack
      • chown -R jack dir01:把目录dir01以及下面所有的子目录和文件的所有者改成jack -R jack dir01:把目录dir01以及下面所有的子目录和文件的所有者改成jack
      • chown -R jack:jack dir02:把目录dir02以及下面所有的子目录和文件的所有者改成jack,所属组改成jack -R jack:jack dir02:把目录dir02以及下面所有的子目录和文件的所有者改成jack,所属组改成jack
      • 示例:
    • 改变文件的所属组
      • chgrp
        • 谁可以改变文件的所属组?
      • root,owner(只能改变到owner所在的组),owner(只能改变到owner所在的组)
        • 语法:chgrp [选项]…[组] 文件chgrp [选项]…[组] 文件
      • 举例:chgrp jack file01 把file01的所属组改成jackchgrp jack file01 把file01的所属组改成jack
  • 文件打包、压缩与软件安装
    • 打包和压缩是两个概念,打包和压缩的区别:
      • 打包是指把文件和目录的结构和内容拷贝到一个文件里
      • 压缩是把文件经过一些算法变成体积上更小的文件
    • 压缩命令gzip
      • gzip命令,压缩一个或多个文件,压缩成分别的压缩文件,语法如下:
      • 压缩格式:gzip 文件名;
      • 压缩完成后,原来的文件会被替换成<name>.gz;
      • 解压缩格式:gzip -d <name>.gz;
      • 不能对整个目录压缩,但可以通过-r参数分别压缩目录下的文件;
      • 示例
    • 压缩命令bzip2
      • bzip2的压缩比比gzip更好,但是在压缩相同大小文件时所需的时间会更多,其用法几乎与gzip相同:
      • 压缩格式:bzip2 文件名;
      • 压缩完成后,原来的文件会被替换成<name>.bz2;
      • 解压缩格式:bzip2 -d <name>.bz2;
      • 不能对整个目录压缩,但可以分别压缩目录下的文件
    • 打包命令tar
      • tar可以将多个目录或文件打包成一个大文件,同时还可以通过gzip/bzip2的支持,将改文件同时进行压缩;
      • 由于tar的使用太广泛,目前Windows的WinRAR也支持.tar.gz文件的解压缩;
      • tar的常用参数:
      • -c: 新建打包文件,可搭配-v来查看过程中被打包的文件名;
      • -t: 查看打包文件的内容包含哪些文件名,重点查看文件名;
      • -x: 解打包或压缩的功能,可以搭配-C(大写)在特定目录解开;
      • 特别留意的是,-c,-t,-x不可同时出现在一串命令行中;
      • -j : 通过bzip2的支持进行压缩/解压缩,此时文件名最好为*.tar.bz2
      • -z: 通过gzip的支持进行压缩/解压缩,此时文件名最好为*.tar.gz
      • -v: 在压缩/解压缩的过程中,将正在处理的文件名显示出来
      • -f filename: -f后面要接被处理的文件名。
      • -C 目录: 这个参数用在解压缩,若要在特定目录解压缩,可以使用这个参数
      • 常用的使用方法:
        • tar -zcvf files.tar.gz file01 dir01 //打包&压缩
        • tar -zcvf files.tgz *.doc //缩写
        • tar -zxvf files.tar.gz //解压缩,解压到当前目录
        • tar -zxvf files.tar.gz -C /home //解压缩files.tar.gz文件,并把解压后的内容放到/home下目录
        • tar -tf files.tar.gz //查看压缩内容
      • 示例:打包指定目录下的所有内容
      • 示例:只显示包中的内容,不解压
      • 示例:把包中的内容解压后放在指定路径下
        • 指定的路径必须要已经存在的,否则会报错

    • zip压缩命令
      • zip是流行于Windows系统上的一种压缩方式,在Linux上也提供了zip压缩命令;
      • Linux上zip可以压缩一个或多个文件到一个压缩文件里;
      • 压缩格式:zip zipfile.zip file01 dir01,表示把file01、dir01压缩到文件zipfile.zip里;
      • 示例:
        • 把当前目录下的所有内容进行压缩

      • 解压格式:unzip zipfile.zip
  • 网络操作
    • 什么是网络接口
      • Linux中的一个网络对象,可以对应实际网卡,也可以是虚拟的,命令通过操作网络接口来控制实际的网卡,从而与其它服务器进行网络通信。
      • 查看网络接口信息
        • ifconfig可以查看当前linux系统中可以使用的网络接口详细信息
        • ip a查看的网络接口信息比较简单
        • 为什么要查看网络接口信息
          • 当我们需要远程连接该linux服务器时,需要查看该服务器的IP地址
          • 根据测试,会应用程序的需要给该服务器配置其它的IP地址时,需要知道该linux服务器上有哪些网络接口可以使用
        • 查看方法
          • ifconfig命令
            • ifconfig eth0:查看指定网卡的IP地址
            • ifconfig -a:查看所有网卡的IP地址
          • ip命令
            • ip -4 addr:显示主机的IP v4地址
            • ip -6 addr:查看主机的IP v6地址
            • ip addr:查看主机的所有IP地址
          • IPv6的地址长度为128b,是IPv4地址长度的4倍。于是IPv4点分十进制格式不再适用,采用十六进制表示
      • 禁用、启用网络接口
        • 方法一
          • ifdown eth0:禁用eth0接口
          • ifup eth0:启用eth0接口
        • 方法二
          • ifconfig eth0 down:禁用eth0接口
          • ifconfig eth0 up:启用eth0接口
        • 方法三
          • service network stop:关闭网卡
          • service network start:启动网卡
          • service network status:查看网卡状态
          • service network restart:重启网卡
      • free命令
        • 该命令可以查看当前linux系统的内存情况
      • top命令
        • 该命令可以查看当前linux系统的cpu、内存等实时使用情况
      • ping命令
        • ping的作用
          • 连通性检查
          • 网速检查
        • 用法
          • ping -c <测试数据包数量> <目的主机地址>
            • 打印5行该linux服务器与百度服务器进行网络通信的数据信息

            • 当命令中没有-c 参数时,表示一直打印,直到我们执行强制退出(ctrl+c)的命令
      • 网络数据包统计
        • 显示网络数据包统计详细信息
          • netstat -s
            • 按照协议类型进行统计,并显示
        • 显示网络数据包统计详细
          • ifconfig -s
            • 按照网络接口进行统计,并显示
      • 配置IP方式
        • 临时配置方法
          • 命令行方式配置IP
            • ifconfig eth0 192.168.1.10 netmask 255.255.255.0 up
            • eth0一般对应的是第一个网卡, 192.168.1.10是给eth0配置的IP地址,netmask 255.255.255.0配置的是子网掩码,up表示立即生效
          • 一块网卡配置多个IP地址
            • ifconfig eth0:1 192.168.1.11 netmask 255.255.255.0 up
            • ifconfig eth0:2 192.168.1.12 netmask 255.255.255.0 up
          • 临时方案配置的IP地址在重启后就会丢失
        • 永久有效方法
          • 修改网络接口配置文件
            • 修改/etc/sysconfig/network-scripts/ifcfg-ethx文件
            • 立即生效需要重启网卡service network restart
      • lsof命令
        • 该命令可以查看当前linux系统中指定的端口被哪些进行占用了
          • 应用场景:在实际工作中,我们在启动某个应用程序时,该应用程序启动需要的端口被其它程序占用了,会导致这个程序启动失败,此时我们需要使用这个命令查看是哪个程序占用了端口。
      • tcpdump网络数据抓包
        • tcpdump命令详解-数据包抓取
          • 常见参数和过滤器:
          • tcp:表示只抓取tcp报文,可以是ip、icmp、arp、rarp 、tcp、udp、icmp这些选项之一,放到第一个参数的位置,用来过滤数据报的类型
          • port:端口
          • host:主机地址,可以是源主机和目的主机
          • -vvv:抓取最详细内容
          • -s0:抓取数据包时默认抓取长度为68字节,加上-s0 后可以抓到完整的数据包。
          • -i:指定监听的网络接口,比如-i eth0表示只抓经过接口eth0的包
          • -c:使用-c参数,指定抓包的数量
          • -w:使用-w参数指定抓包文件保存到文件,以便后续使用Wireshark等工具进行分析
        • 示例
          • 使用这个命令抓包时,如果不是抓的网络接口eth0接口的包,一定要使用-i参数,并加上对应网络接口的名字

      • ssh远程登录
        • 应用场景:有A、B两台服务器,在办公室的PC机可以与Alinux服务器进行通信,但是不能与B 这台linux服务器进行通信,但是A和B可以进行通信。现在想登录B服务器进行操作,就可以先使用PC机上的远程登录工具(比如:Xshell)登录A服务器,然后在A上使用ssh远程登录到B上进行操作
        • 命令格式
      • Windows与Linux间文件传输工具
        • winscp工具(可以把windows上的文件传到linux上,也可以把linux上的文件传到windows上)
      • linux服务器间文件传输(scp命令)
        • 把当前linux服务器上的文件复制到远程linux服务器上
          • scp local_file remote_username@remote_ip:remote_folder
          • scp local_file remote_username@remote_ip:remote_file
          • 第1,2个指定了用户名,命令执行后需要再输入密码,第1个仅指定了远程的目录,文件名字不变,第2个指定了文件名;
        • 从远程复制到本地
          • 从远程复制到本地,只要将从本地复制到远程的命令的后2个参数调换顺序即可,如下实例
          • scp remote_username@remote_ip:remote_file_name remote_file_name
          • 或者
            • scp remote_username@remote_ip:remote_file_name local_file_name
          • 示例

猜你喜欢

转载自blog.csdn.net/weixin_60830013/article/details/121861613