我是一个上班族,之前经常看博客或者听别人说,Linux是个加分项,所以一直想学,最近工作不是特别忙,所以开始上网各种搜相关知识,看到好多人都推荐刘遄老师写的《Linux就该这么学》,好奇心很大,于是找资源下载了这本书,目前正在阅读,感觉很好,值得学习,喜欢Linux的同学们,可以空余时候多学习多积累。
《linux就该这么学》这本书一共有20章,下面是我通过刘老师的书籍整理的笔记,学习一周的结果,只学习了两章的内容 ,但内容基本掌握,相信大家也可以很快的掌握,希望我的笔记可以激发你的兴趣。(边学习边整理的笔记)
(注:只想看linux命令及简单注解的请看我另一篇文章)
注:如有笔记描述不清楚或者有错的地方还请多多谅解。非常感谢!!后续后继续更新。
补充:安装及配置省略,下载本书自己看,超级简单噢
第一章 linux的一些词汇
1、RHEL(Red Hat Enterprise Linux):Red Hat公司的Linux系统。
2、CentOS(Community enterprise Operating System):社区企业操作系统,是linux发行版之一。
3、Fedora:是linux发行版之一。
4、RPM:红帽软件包管理器
常见的RPM软件包命令
安装软件的命令格式 | rpm -ivh filename.rpm |
升级软件的命令格式 | rpm -Uvh filename.rpm |
卸载软件的命令格式 | rpm -e filename.rpm |
查询软件描述信息的命令格式 | rpm -qpi filename.rpm |
列出软件文件信息的命令格式 | rpm -qpl filename.rpm |
查询文件属于哪个RPM的命令格式 | rpm -qf filename |
5、Yum软件仓库:是为了降低软件安装难度和复杂度面设计的技术。
常见的Yum命令
命令 | 作用 |
yum repolist all | 列出所有仓库 |
yum list all | 列出仓库中所有的软件包 |
yum info 软件包名称 | 查看软件包信息 |
yum install 软件包名称 | 安装软件包 |
yum reinstall 软件包名称 | 重新安装软件包 |
yum update 软件包名称 | 升级软件包 |
yum remove 软件包名称 | 移除软件包 |
yum clean all | 清除所有仓库缓存 |
yum check-update | 检查可更新的软件包 |
yum grouplist | 查看系统中已安装的软件包组 |
yum groupinstall 软件包组 | 安装指定的软件包组 |
yum groupremove 软件包组 | 移除指定的软件包组 |
yum groupinfo 软件包组 | 查询指定的软件包组信息 |
6、systemd初始化进程:替换了初始化进程服务System V init,RHEL 7系统选择systemd初始化进程服务
RHEL 6系统使用service、chkconfig命令来管理服务的。
RHEL 7系统使用systemctl命令来管理服务的。
7、课后复习题
- RPM与YUM的作用
RPM是为了简化安装的复杂度,而Yum软件仓库是为了解决软件包之间的依赖关系。
第二章(新手必须掌握的Linux命令)
前言:Linux系统选择bash解释器作为命令行终端主要有以下4种优势:
- 通过上下方向键来调取过往执行过的Linux命令
- 命令或参数仅需输入前几位就可以用tab键补全
- 具有强大的批处理脚本
- 具有实用的环境变量功能
- 常用系统工作命令
- echo命令:用于在终端输出字符串或变量提取后的值
格式:echo [字符串|$变量]
[root@linuxprobe ~]#echo linuxprobe.com
结果:linuxprobe.com //输出字符串
使用$变量的方式提取变量shell的值
[root@linuxprobe ~]#echo $SHELL
结果:/bin/bash
- date命令:用于显示或者设置系统的时间或日期
格式:date [选项] [+指定的格式]
参数 | 作用 |
%t | 跳格[Tab键] |
%H | 小时[00~23] |
%I | 小时[00~12] |
%M | 分钟[00~59] |
%S | 秒[00~59] |
%j | 今年中的第几天 |
[root@linuxprobe ~]#date
结果:Tue Sep 11 09:06:51 CST 2018
[root@linuxprobe ~]#date “+%Y-%m-%d %H:%M:%S”
结果:2018-09-11 09:08:33
[root@linuxprobe ~]#date “+%j”
结果:254
- reboot命令:用于重启系统。格式reboot
- poweroff命令:用于关闭系统。格式poweroff
注:该命令与reboot命令相同,都会涉及硬件资源的管理权限,因此默认只有root管理员才可以关闭。
- wget命令:用于终端中下载网络文件
格式 wget [参数] 下载地址
[root@linuxprobe ~]# http://www.linuxprobe.com/xx.pdf
参数 | 作用 |
-b | 后台下载模式 |
-P | 下载到指定目录 |
-t | 最大尝试次数 |
-c | 断点续传 |
-p | 下载页面内所有资源,包括图片,视频等 |
-r | 递归下载 |
- ps命令:查看系统中的进程状态
格式:ps[参数]
参数 | 作用 |
-a | 显示所有进程(包括其它用户的进程) |
-u | 用户及其它详细信息 |
-x | 显示没有控制终端的进程 |
注:Linux系统有5种常见的进程状态:运行、中断、不可中断、僵死、停止,其各含义如下:
R运行(R)进程正在运行或在运行队列中等待
R中断(S)进程处于休眠中,当某个条件形成后或者接收到信号时,则脱离该状态。
R不可中断(D)进程不响应系统异步信号,即使用kill命令也不能将其中断。
R僵死(Z)进程已经终止,但进程描述符依然存在,直到父进程调用wait4()系统函数后将进程释放。
R停止(T)进程收到停止信号后停止运行。
注:短格式与短格式之间是可以合并的,合并后仅保留一个-(减号)即可,另外ps命令可允许参数不加减号(-),因此可以直接写成:ps aux
- top命令:用于动态监视进程的活动及系统负载等信息
格式:top命令
命令强大,可以看作“Linux”中的强化版的windows任务管理者。
- pidof命令:用于查看某个指定服务进程的pid值
格式:pidof [参数][服务名称]
注:每个pid值是唯一的,因此可通过pid来区分不同的进程。
[root@linuxprobe ~]#pidof sshd
结果:2156
- kill命令:杀死某个指定pid的服务进程
格式:kill[参数] [进程PID]
[root@linuxprobe ~]#kill 2156 //这种操作等同于强制停止sshd服务
- killall命令:用于终止某个指定名称的服务所对应的所有进程。格式:killall [参数][服务名称]
注:ctrl+C组合键,在系统终端中执行一个命令后想立即停止它。
[root@linuxprobe ~]#pidof sshd
13591 13580 13579 13578 13577 13576
[root@linuxprobe ~]#killall sshd
[root@linuxprobe ~]#pidof sshd
[root@linuxprobe ~]#
注:如果我们在系统终端中执行一个命令后想立即停止它,可以同时按下ctrl+C组合键(生产环境中经常用到的一个快捷键)这样将立即终止该命令的进程。或者,如果有些命令在执行时不断地在屏幕上输出信息,影响到后续命令的输入,则可以在执行命令时在末尾添加上一个&符号,这样命令将进入系统后台来执行。
- 系统状态检测命令
作为一名运维人员,想要更快,更好的了解linux服务器,必须具备快速查看linux系统运行状态的能力,接下来逐个讲解与网卡网络、系统内核、系统负载、内存使用情况、当前启用终端数量、历史登录记录、命令执行记录以及救援诊断等相关命令的使用方法。
- ifconfig命令:用于获取网卡配置与网络状态等信息
格式:ifconfig [网络设备] [参数]
主要查看的就是网卡的名称,inet参数后面的IP地址、ether参数后面的网卡物理地址(又称MAC地址)以及RX、TX的接收数据包与发送数据包的个数及累计流量
- uname命令:用于查看系统内核与系统版本等信息。
格式:uname [-a]
注: -a参数来完整的查看当前系统的内核名称、主机名、内核发行版本、节点名、系统时间、硬件名称、硬件平台、处理器类型以及操作系统名称等信息。
顺便一提,如果查看当前系统版本的详细信息,则需要查看redhat-release文件,其命令及相应的结果如下 :
[root@linuxprobe ~]# cat /etc/redhat-release
结果:Red Hat Enterprise Linux Server release 7.0(Maipo)
- uptime命令:用于查看系统的负载信息
格式:uptime
uptime命令真的很棒,它可以显示当前系统时间、系统已运行时间,启用终端数量以及平均负载值等信息。平均负载值指的是系统在最近1分钟、5分钟、15分钟内的压力情况,负载值越低越好,尽量不要长期超过1,在生产环境中不要超过5。
[root@linuxprobe ~]# uptime
结果:22:49:55 up 10 min, 2 users, load average: 0.01, 0.19, 0.18
- free命令:用于显示当前系统中内存的使用量信息
格式: free [-h]
为了保证linux系统不会因资源耗尽而突然宕机,运维人员需要经常关注内存的使用量
- who命令:用于查看当前登入主机的用户终端信息
格式:who [参数]
[root@linuxprobe ~]#who
linuxprobe :0 2018-09-12 14:37 (:0)
linuxprobe pts/0 2018-09-12 14:53 (:0)
登录的用户名 | 终端设备 | 登录到系统时间 |
linuxprobe | :0 | 2018-09-12 14:37(:0) |
linuxprobe | pts/0 | 2018-09-12 14:53(:0) |
- last命令:用于查看所有系统的登录记录。
格式:last [参数]
- history命令:用于显示历史执行过的命令。
格式 :history [-c] //清除所有历史执行过的命令
执行history命令能显示出当前用户在本地计算机中执行过的最近1000条记录。在使用history命令时,如果使用-c参数则会清空所有的命令历史记录。还可以使用“!编码数字”的方式来重复执行某一次命令。
- sosreport命令:收集系统配置及架构信息并输出诊断文档。 格式为:sosreport
当Linux系统出现故障需要联系技术人员时,大多时候都先使用这个命令来简单收集系统的运行状态和服务配置信息,以便让技术人员能够远程解决一些小问题,提前了解某些复杂问题。
三、工作目录切换命令
- pwd命令:显示用户当前所处的工作目录
格式:pwd [选项]
[root@linuxprobe ~]#pwd
结果:/home/linuxprobe/Desktop
- cd命令:用于切换工作路径,格式为”cd [目录名称]”
cd -命令:返回到上一级所处的目录
cd..命令:进入上级目录
cd ~命令:切换到当前用户的家目录
cd ~username:切换到其他用户的家目录
[root@linuxprobe ~]#cd /etc
[root@linuxprobe etc]#
- ls命令:显示当前目录中的文件信息。格式 ls[选项][文件]
ls -a:查看全部文件(包括隐藏文件)
ls -l:查看文件中的属性、大小等详细信息
ls -al:查看当前目录中的所有文件并输出这些文件的属性信息
ls -ld:查看目录属性信息,则需要额外添加一个-d参数
例如:可使用如下命令查看/etc目录的权限与属性信息
四、文本文件编辑命令
- cat命令:用于查看纯文本文件(内容较少的)
格式:cat [选项] [文件]
[root@linuxprobe ~]#cat -n hello.txt
如果想查看文本内容还想顺便显示行号的话,在cat命令后面追加-n参数。
- more命令:用于查看纯文本文件(内容较多的)
如果需要阅读长篇小说或者非常长的配置文件,使用“cat”就不合适了,一旦使用cat命令阅读长文本内容,信息就会在屏幕上快速翻滚,导致还没来得及看内容就已经翻篇了,推荐使用more命令,会在最下面使用百分比的形式提示您已经阅读了多少内容,您还可以使用空格键或回车键向下翻页。
格式:more [选项] [文件]
[root@linuxprobe ~]#more hello.txt
- head命令:用于查看纯文本文件的前N行
格式:head [选项] [文件]
例如:只想看前20行的内容,head命令就派上场了
[root@linuxprobe ~]# head -n 20 xxx.txt
- tail命令:用于查看纯文本文件的后N行或持续刷新内容
格式:tail [选项] [文件]
[root@linuxprobe ~]# tail -n 20 文件名
tail命令非常强悍的功能是可以持续刷新一个文件的内容,当想要实时查看最新的日志文件时,特别有用,此时的命令格式为:tail -f 文件名
- tr命令:用于替换文本文件中的字符
格式:tr [原始字符] [目标字符]
先使用cat命令读取待处理的文本,然后通过管道符把这些文本内容传递给tr命令进行替换操作即可,例如把文本内容的英文全部替换成大写:
[root@linuxprobe ~] # cat hello.txt | tr [a-z] [A-Z]
- wc命令:用于统计指定文本的行数、字数、字节数
格式为:wc[参数] 文本
wc的参数以及作用
参数 | 作用 |
-l | 只显示行数 |
-w | 只显示单词数 |
-c | 只显示字节数 |
在linux系统中,passwd是用于保存系统账户信息的文件,要统计当前系统中有多少个用户,可以使用下面的命令来进行查询:
[root@linuxprobe ~]# wc -l /etc/passwd
结果:38 /etc/passwd //(38行)
[root@linuxprobe ~]#wc -w hello.txt
- stat命令:用于查看文件的具体存储信息和时间等信息。
格式:stat 文件名称
[root@linuxprobe ~]# stat hello.txt
命令stat会显示文件的三种时间状态:Access、Modify、Change
- cut命令:用于按“列”提取文本字符,
格式为cut[参数] 文本
-f参数来设置需要看的列数
-d参数来设置间隔符号
[root@linuxprobe ~]# head -n 2 /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
[root@linuxprobe ~]#cut -d: -f1 /etc/passwd
root
bin
daemon
adm
lp
sync
shutdown.....
注:“-d:”是用来表示用冒号:间隔,“-f1“表示只取第一列
- diff命令:用于比较多个文本文件的差异
格式为 diff [参数] 文件
使用--brief参数来确认两个文件是否不同,还可以使用-c参数来详细比较出多个文件的差异之处。(绝对是判断文件是否被篡改的有力神器)
使用diff --brief命令显示比较后的结果,判断文件是否相同:
[root@linuxprobe ~]#diff --brief aaa.txt bbb.txt
最后使用带-c参数的diff命令来描述文件内容具体的不同
[root@linuxprobe ~]#diff -c aaa.txt bbb.txt
五、文件目录管理命令
在Linux系统的日常运维工作中,还需要掌握对文件的创建、修改、复制、剪切、更名与删除等操作。
- touch命令:用于创建空白的文件或者设置文件的时间
格式:touch [选项] [文件]
创建一个空白的文件:
[root@linuxprobe ~]#touch aa
touch命令的参数及其作用
参数 | 作用 |
-a | 仅修改“读取时间”(atime) |
-m | 仅修改“修改时间”(mtime) |
-d | 同时修改atime与mtime |
例如:先使用ls查看文件的修改时间,然后修改这个文件,最后再通过touch命令把修改后的文件时间设置成修改之前的时间(很多黑客都这样做)
先使用ls命令查看hello.txt中的修改时间
[root@linuxprobe ~]#ls -l hello.txt
-rwxrw-rw-. 1 linuxprobe linuxprobe 115 Sep 13 10:33 hello.txt
通过echo命令修改hello.txt中的文本
[root@linuxprobe ~]#echo “hello wordl”>>hello.txt
再使用ls命令查看修改时间
[root@linuxprobe ~]#ls -l hello.txt
-rwxrw-rw-. 1 linuxprobe linuxprobe 143 Sep 13 11:36 hello.txt
最后通过touch命令同时修改成之前的时间
[root@linuxprobe ~]#touch -d “2018-09-13 10:33”hello.txt
再使用ls命令查看时,就成了没修改之前的时间了
[root@linuxprobe ~]#ls -l hello.txt
- mkdir命令:用于创建空白的目录
格式:mkdir [选项] 目录
除了能创建目录之外,mkdir命令还可以结合-p参数来递归创建出具有嵌套叠层关系的文件目录。
[root@linuxprobe ~]#mkdir zhanglijing
[root@linuxprobe ~]#cd zhanglijing
[root@linuxprobe zhanglijing]#mkdir -p aa/bb/cc..
[root@linuxprobe zhanglijing]#cd aa
[root@linuxprobe aa]cd bb
.....
- cp命令:用于复制文件或目录
格式:cp [选项] 源文件 目标文件
在linux系统中,复制操作具体分为3种情况:
1>如果目标文件是目录,则会把源文件复制到该目录中
2>如果目标文件也是普通文件,则会询问是否要覆盖它
3>如果目标文件不存在,则执行正常的复制操作
cp命令参数及其作用
参数 | 作用 |
-p | 保留原始文件的属性 |
-d | 若对象为“链接文件”,则保留该“链接文件”的属性 |
-r | 递归持续复制(用于目录) |
-i | 目标文件存在则询问是否覆盖 |
-a | 相当于-pdr(上述参数) |
[root@linuxprobe ~]#touch zlj.log
[root@linuxprobe ~]#cp zlj.log bbb.log
[root@linuxprobe ~]#ls
结果:zlj.log bbb.log
- mv命令:用于剪切文件或将文件重命名
格式 mv [选项] 源文件 [目标路径|目标文件名]
把gzh中的内容剪切到zlj中
[root@linuxprobe ~]#mv gzh.log zlj.log
[root@linuxprobe ~]#ls
结果:zlj.log
- rm命令:用于删除文件或目录
格式:rm [选项] 文件
在rm命令后面跟-f参数来强制删除,想要删除一个目录,需要在rm后面跟-r才可以,否则删除不掉。
[root@linuxprobe zlj]#rm zlj.log
[root@linuxprobe zlj]#rm -f zlj.log //强制删除
[root@linuxprobe zlj]#rm -r gzh //删除目录
- dd命令:用于按照指定大小和个数的数据块来复制文件或转换文件。格式为 dd [参数]
dd 命令是一个比较重要而且比较有特色的一个命令,它能够让用户按照指定大小和个数的数据块来复制文件的内容。当然如果愿意的话,还可以在复制过程中转换其中的数据。Linux系统中有一个名为/dev/zero 的设备文件,每次在课堂上解释它时都充满哲学理论的色彩。因为这个文件不会占用系统存储空间,但却可以提供无穷无尽的数据,因此可以使用它作为 dd命令的输入文件,来生成一个指定大小的文件。
dd命令的参数及其作用
参数 | 作用 |
if | 输入的文件名称 |
of | 输出的文件名称 |
bs | 设置每个”块“的大小 |
count | 设置要复制“块”的个数 |
- file命令:用于查看文件的类型
格式 file 文件名
在linux系统中,由于文本,目录,设备等所有这些一切都统称为文件,单凭后缀不能知道具体的文件类型,需要使用file命令来查看文件类型。
[root@linuxprobe ~]#file xxx.cfg
xxx.cfg:ASCII text
[root@linuxprobe ~]#file /dev/sda
/dev/sda:block special
六、打包压缩与搜索命令
- tar命令:用于对文件进行打包压缩与解压
格式 tar[选项] [文件]
在linux系统中,常见的格式比较多,其中最主要的是.tar或.tar.gz或.tar.bz2格式。
tar命令的参数及其作用
参数 | 作用 |
-c | 创建压缩文件 |
-x | 解开压缩文件 |
-t | 查看压缩包内有哪些文件 |
-z | 用Gzip解压或压缩 |
-j | 用bzip2解压或压缩 |
-v | 显示压缩或解压的过程 |
-f | 目标文件名 |
-P | 保留原始的权限与属性 |
-p | 使用绝对路径来压缩 |
-C | 指定解压到的目录 |
注:-c 参数用于创建压缩文件,-x 参数用于解压文件,因此这两个参数不能同时使用。
压缩
[root@linuxprobe ~]#tar -czvf etc.tar.gz /etc
解压:先创建一个目录再解压到指定目录中
[root@linuxprobe ~]#mkdir zlj
[root@linuxprobe ~]#tar -xzvf etc.tar.gz -C zlj
- grep命令:用于文本中执行关键词搜索,并显示匹配的结果。
格式 grep [选项] [文件]
grep命令的参数及其作用
参数 | 作用 |
-b | 将可执行文件(binary)当作文本文件(text)来搜索 |
-c | 仅显示找到的行数 |
-i | 忽略大小写 |
-n | 显示行号 |
-v | 反向选择--仅列出没有“关键词”的行 |
注:grep命令比较多,有上百个,当用到时候再使用man grep命令查询。
[root@linuxprobe ~]#man grep
例如:
[root@linuxprobe ~]#touch zlj.txt
[root@linuxprobe~]#echo“hello world hello”>>zlj.txt
[root@linuxprobe ~]#grep hello zlj.txt
结果:hello world hello world
- find命令:用于按照指定条件来查找文件
格式:find [查找路径] 寻找条件 操作
注:linux一切系统都是文件。
file命令的参数及其作用
参数 | 作用 |
-name | 匹配名称 |
-perm | 匹配权限 |
-user | 匹配所有者 |
[root@linuxprobe ~]#find /etc -name “host*” -print