• 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操作系统版本查看
  • 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
  • 示例