学习教材:《Linux就该这么学(第二版)》
Linux
-Linux系统内核
-Linux发行套件系统(也就是Linux操作系统):如Redhat enterprise linux(RHEL),Centos(已被红帽收编),Fedora,openSUSE,Gentoo,Debian,Ubuntu(派生于Debian)
虚拟机:是指能够让用户在一台真机上模拟出多个操作系统的软件
常用RPM软件包命令
安装软件:rpm -ivh filename.rpm
升级软件:rpm -uvh filename.rpm
卸载软件:rpm -e filename.rpm
yum软件仓库
列出仓库中所有包: yum list all
查看软件包名字:yum info packagename
安装软件包:yum install packagename
重新安装软件包:yum reinstall packagename
升级软件包:yum update packagename
重新安装软件包:yum remove packagename
清除所有仓库缓存:yum clean all
检查可更新的软件包:yum check-update
用户与Linux交互

一般来说,计算机硬件是由运算器、控制器、存储器、输入/输出设备等共同构成的,而让各种硬件设备各司其职且又能协同运行的东西就是系统内核。
Shell:也称为终端,充当人与内核(硬件)之间的翻译官。
默认终端:Bash解释器
Bash解释器作为命令行终端的4项优势:
1. 通过上下方向键来调取过往执行的Linux命令
2.命令或参数仅需输入前几位就可以用Tab自动补全
3.具有强劲的批处理脚本
4.具有实用的环境变量功能
Linux命令
格式:命令名称 [命令参数] [命令对象]
(三者之间需要用空格键分隔,所以文件命名时用_分隔)
命令对象:一般指需要处理的文件、目录、用户等资源
命令参数:
长格式–完整的项目名称
短格式-单个字母的缩写
echo命令
echo命令用于在终端输出字符串或变量提取后的值,格式为“echo [字符串 | $变量]”
如:
echo $PATH
/usr/local/hdf5-1.8.13/bin:/opt/cmake-3.22.0-linux-x86_64/bin#显示账号的PATH
date命令
用于显示和设置系统的时间或日期
格式:“date [选项] [+指定的格式]”
%t: Tab
%H: hour(00~23)
%T: houer(00~12)
%M: minute
%S: second
%j: 今年中的第几天
[dell@bogon ~]$ date
Wed Jan 19 16:46:27 CST 2022
[dell@bogon ~]$ date "+%Y-%m-%d %H:%M:%S"
2022-01-19 16:47:29
[dell@bogon ~]$ date -s "20220118 8:20:00"#设置当前时间
[dell@bogon ~]$ date "+%j"
019
reboot命令
重启系统
poweroff命令
关闭系统
wget命令
用于在终端中下载网络文件
格式:“wget[参数]下载地址”
-b: 后台下载
-P:下载到指定的目录
-t: 最大尝试次数
-c: 断点续传
-p: 下载页面内所有资源,包括图片,视频等
-r: 递归下载
wget -r --tries=10 http://fly.srk.fer.hr/ -o log
#The space between the option accepting an argument and the argument may be omitted. Instead of -o log you can write -olog.
#You may put several options that do not require arguments together, like:
wget -drc <URL>
#This is completely equivalent to:
wget -d -r -c <URL>
长格式之间,长格式和短格式之间不能合并,短格式之间可以合并,合并后仅保留一个-即可。
ps命令
用于查看系统中的进程状态
格式:“ps[参数]”
-a:显示所有用户的所有进程
-u:用户及其他详细信息
-x:显示没有控制终端的进程
Linux进程:
- R:正在运行或运行队列中等待
- S:休眠中,当某个条件形成后或接收到信号时,则脱离该状态
- D:不可终端
- Z:僵死,进程已经终止,但进程描述依旧存在,知道父进程调用wait4()系统函数后进程释放
- T: 停止
[dell@bogon ~]$ ps aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.0 191556 4616 ? Ss 2021 7:38 /usr/lib/systemd/systemd --switched-root --system --deserialize 22
root 2 0.0 0.0 0 0 ? S 2021 0:01 [kthreadd]
root 4 0.0 0.0 0 0 ? S< 2021 0:00 [kworker/0:0H]
ps命令可允许参数不加减号
PID:进程ID号
%CPU:运算器占用率
%MEM:内存占用率
VSZ:虚拟内存占用率(kb)
RSS:占用固定内存量
TTY:所在终端
STAT:进程状态
START:被启动的时间
TIME:实际使用CPU的时间
COMMAND:命令和参数
top命令
动态监视进程活动与系统负载等信息,相当于Windows任务管理器
pidof命令
查询指定服务进程的PID值
格式:“pidof [参数] [服务名称]”
[dell@bogon ~]$ pidof sshd
90970 90707 29286 29193 29140 29126 2192
kill命令
用于终止某个指定PID的服务进程
格式:“kill [参数] [进程PID]”
killall命令
用于终止某个指定名称的服务对应的全部进程
格式:“killall [参数] [进程PID]”
如果想执行命令后立刻停止:ctrl+c
在执行命令的末尾添加一个&符号,命令将进入系统后台执行
ifconfig命令
用于获取网卡配置与网络状态信息
格式:“ifconfig [网络设备] [参数]”
uname命令
用于查看系统内核和系统版本信息
[dell@bogon ~]$ uname -a
Linux bogon 3.10.0-1160.49.1.el7.x86_64 #1 SMP Tue Nov 30 15:51:32 UTC 2021 x86_64 x86_64 x86_64 GNU/Linux
[dell@bogon ~]$ cat /etc/redhat-release
CentOS Linux release 7.9.2009 (Core)
uptime命令
用于查看系统的负载信息
[dell@bogon ~]$ uptime
18:41:15 up 21 days, 20:06, 2 users, load average: 0.24, 0.28, 0.30
平均负载值是指在系统近1分钟、5分钟、15分钟内的压力情况,负载值越低越好,尽量不要长期超过1,在生产环境中不要超过5。
free命令
用于查看系统中的内存使用量信息
[dell@bogon ~]$ free -h
total used free shared buff/cache available
Mem: 251G 27G 2.2G 66M 221G 222G
Swap: 4.0G 0B 4.0G
为了保证Linux系统不会由于资源耗尽而突然宕机,需要时刻关注内存使用量
total:内存总量
used:已用量
free:可用量
shared:进程共享的内存量
buffers:磁盘缓存的内存量
cached:缓存的内存量
who命令
用于查看当前登入主机的用户终端信息
last命令
用于查看所有系统的登录记录(容易被黑客篡改)
history命令
history:查看1000条历史命令
history -c:清空所有命令的历史记录
历史命令会被保存在用户Home目录的.bash_history文件中。
Linux系统中以(.)开头的文件均代表隐藏文件,多为系统服务文件,可以用cat查看文件内容
[dell@bogon ~]$ cat ~/.bash_history
ls
sosreport命令
用于手机系统配置即构架信息并输出诊断文档,格式为sosreport
pwd命令
用于显示用户当前所处的工作目录
[dell@bogon ~]$ pwd
/home/dell
cd命令
cd -:返回上一次所处的目录
cd ..:进入上级目录
cd ~:切换到当前用户的家目录
cd ~username:切换到其他用户的家目录
cd /location
ls命令
格式:“ls [选项] [文件]”
-a: 显示全部文件,包括隐藏文件
-l: 查看文件的属性等
[dell@bogon ~]$ ls -al
总用量 40
drwx------. 21 dell dell 4096 12月 31 17:01 .
drwxr-xr-x. 6 root root 76 1月 18 16:45 ..
-rw-------. 1 dell dell 3719 1月 19 19:27 .bash_history
[dell@bogon ~]$ ls -ld #查看目录的属性
drwx------. 21 dell dell 4096 12月 31 17:01 .
cat命令
用于查看纯文本文件(内容较少)
格式:“cat [选项] [文件]”
如果在查看文本的同时还向顺便显示行号,可以在cat命令后面加一个-n
[dell@bogon ropenssl_installation]$ cat -n README.md
1 # README
2
3 ## install.except
4
5 Description: install R-package openssl on a specified user
more命令
用于查看纯文本文件(内容较多)
格式:“more [选项] [文件]”
more命令会在最下面用百分比的形式来提示您已经阅读了多少内容,还可以用空格或回车向下翻页
head命令
用于查看纯文本文件前N行
tail命令
用于查看纯文本文件后N行
[dell@bogon ropenssl_installation]$ tail -n 2 README.md
Usage: ./install.except user_name user_passwd
Example: ./install_jupyter.except tyf alex
tail命令最强悍的功能就是可以持续刷新一个文件的内容,当想要实时查看更新日志文件时,特别有用
[root@bogon ~]# tail -f /var/log/messages
Jan 19 19:38:12 bogon dbus[1651]: [system] Activating service name= org.freedesktop.problems (using servicehelper)
Jan 19 19:38:12 bogon dbus[1651]: [system] Successfully activated service org.freedesktop.problems
tr命令
用于替换文本文件中的字符
格式:“tr [原始字符] [目标字符]”
如: cat filename | tr [a-z] [A-Z]
将某个文本中的英文全部替换成大写
wc命令
用于统计指定文本的行数、字数、字节数
格式:“wc [参数] 文本”
-l: 只显示行数
-w: 只显示单词数
在Linux系统中,passwd适用于保存系统账户信息的文件,要统计当前系统中有多少个用户,可以↓
[root@bogon ~]# wc -l /etc/passwd
81 /etc/passwd
stat命令
用于查看文件的具体存储信息和时间等
格式:“stat 文件名称”
[dell@bogon jupyter_scripts]$ stat install_jupyter.expect
File: ‘install_jupyter.expect’
Size: 1868 Blocks: 8 IO Block: 4096 regular file
Device: fd02h/64770d Inode: 66572254279 Links: 1
Access: (0775/-rwxrwxr-x) Uid: ( 1002/ root) Gid: ( 1002/ root)
Access: 2022-01-17 21:16:02.830312924 +0800
Modify: 2021-12-30 10:23:07.802087406 +0800
Change: 2021-12-30 10:23:07.802087406 +0800
Birth: -
cut命令
用于按列提取文本字符
格式:“cut [参数] 文本”
-f: 需要看的列数,如-f1看第一列
-d: 设置分隔符
[root@bogon ~]# head -n 2 /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
[root@bogon ~]# cut -d: -f1 /etc/passwd
root
bin
diff命令
用于比较多个文本文件的差异
格式:“diff [参数] 文本”
–brief: 确定两个文件是否不同
-c:比较多个文件的差异之处
touch命令
用于创建空白文件或者设置文件时间
格式:“touch [选项] [文件]”
touch filename: 创建一个名为filename的空白文本文件
-a: 仅修改“读取时间”(atime)
-m: 仅修改“修改时间”(mtime)
-d:同时修改atime和mtime
[dell@bogon jupyter_scripts]$ ls -l README.md
-rw-rw-r-- 1 myh myh 588 Dec 31 12:28 README.md
[dell@bogon jupyter_scripts]$ touch -d "2022-01-19 22:00" README.md
[dell@bogon jupyter_scripts]$ ls -l README.md
-rw-rw-r-- 1 myh myh 588 Jan 19 2022 README.md
mkdir命令
用于创建空白的目录
格式:“mkdir [选项] [目录]”
mkdir -p a/b/c/d
套娃创建了abcd文件夹
cp命令
用于复制文件或目录
格式:“cp [选项] 源文件 目标文件”
复制的三种情况
①如果目标文件是目录,则会把源文件复制到该目录中
②如果目标文件也是普通文件,则会询问是否覆盖它
③如果目标文件不存在,则执行正常的复制操作
-p: 保留原始文件的属性
-d: 若对象为“链接文件”,则保留该“链接文件”的属性
-r: 递归持续复制(用于目录)
-i: 若目标文件存在则询问是否覆盖
-a: = -pdr
[dell@bogon scripts]$ cp original.log new.log
[dell@bogon scripts]$ ls
new.log original.log
mv命令
用于剪切文件或将文件重命名
格式:“mv [选项] 源文件 [目标路径|目标文件名]”
rm命令
用于删除文件或目录
在Linux系统中删除文件时,系统会默认向您询问是否执行删除操作,如果不想总是看到这种反复的确认信息,可以在rm后面加一个-f参数来强制删除。如果想要删除一个目录,需要rm -r
dd命令
用于按照指定大小和个数的数据块来复制文件或转换文件
格式:“dd [参数]”
Linux系统中有一个名为dev/zero的设备文件,由于这个文件不会占用系统存储空间,但可以提供无穷无尽的数据,因此可使用它作为dd命令的输入文件,来生成一个指定大小的文件
if: 输入的文件名称
of: 输出的文件名称
bs: 设置每个“块”的大小
count: 设置要复制“块”的个数
如要创建一个560MB的数据块:
[dell@bogon scripts]$ dd if=/dev/zero of=560_file count=1 bs=560M
1+0 records in
1+0 records out
587202560 bytes (587 MB) copied, 0.684229 s, 858 MB/s
[dell@bogon scripts]$ ls
560_file
如果想把光驱设备中的光盘制作成iso格式的镜像文件,可以用dd压制
dd if=/dev/cdrom of=RHEL-server-7.0-x86_64-LinuxProbe.Com.iso#教材范例
需求量=count X bs
file命令
用于查看文件的类型
格式:“file 文件名”
tar命令
用于对文件进行打包压缩或解压
格式:“tar [选项] [文件]”
Linux中常见的压缩文件格式为.tar, .tar.gz, tar.bz2
-c: 创建压缩文件
-x: 解开压缩文件
-t: 查看压缩包内有那些文件
-z: 用Gzip压缩或解压
-j: 用bzip2压缩或解压
-v: 显示压缩或解压的过程 推荐
-f: 目标文件名 重大,必须放在参数的最后一位
-p: 保留原始的权限或属性
-P:使用绝对路径来压缩
-C:指定解压到的目录
打包压缩:“tar -czvf 压缩包名称.tar.gz 要打包的目录”
解压缩: “tar -xzvf 压缩包名称.tar.gz -C 解压路径”
grep命令
用于在文本中执行关键词的搜索,并显示匹配的结果
格式:“tar [选项] [文件]”
-b: 将可执行文件(binary)当作文本文件(text)来搜索
-c: 仅显示找到的行数
-i: 忽略大小写
-n: 显示行号
-v: 反向选择—仅列出没有关键词的行
在Linux系统中,/etc/passwd文件是保存着所有的用户信息,而一旦用户的登录终端被设置成/sbin/nologin,则不再允许登录系统,因此可以使用grep命令来找出当前系统中不允许登录系统的所有的用户信息
[root@bogon ~]# grep /sbin/nologin /etc/passwd
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
find命令
用于按照指定条件来查找文件
格式:“find [查找路径] 寻找条件 操作”
Linux系统中的一切都是文件
-name: 匹配名称
-perm: 匹配权限(mode为完全匹配, -mode为包含即可)
-user: 匹配所有者
-group: 匹配所有组
-mtime -n +n:匹配修改内容的时间(-n:n天以内,+n:n天以前)
-atime -n +n:匹配访问内容的时间(-n:n天以内,+n:n天以前)
-ctime -n +n:匹配修改权限的时间(-n:n天以内,+n:n天以前)
-nouser:匹配无所有者的文件
-nogroup:匹配无所有组的文件
-newer f1 !f2: 匹配比文件1新比文件2旧的文件
–type b/d/c/p/l/f:匹配文件类型(设备、目录、字符设备、管道、链接文件、文本文件)
–size: 匹配文件大小(+50KB为查找超过50KB的文件,而-50KB为查找小于50KB的文件)
–prune: 忽略某个目录
-exec ….{ }:后面可跟用于进一步处理搜索结果的命令(-exec相当于把find命令搜索到的结果交给紧随其后的命令做进一步处理,特殊,只需要一个减号)
Linux的配置文件都保存在/etc中
[root@bogon ~]# find /etc -name "host*" -print
/etc/host.conf
/etc/hosts
/etc/hosts.allow
/etc/hosts.deny
/etc/selinux/targeted/active/modules/100/hostname
/etc/avahi/hosts
/etc/hostname
教材范例:在整个文件系统中找出所有归属于A用户的文件并复制到/root/findresults目录
“-exec {} …”:{}表明find命令搜索出的每一个文件,并且其命令的结尾必须是“”
find / -user A -exec cp -a {} /root/findresults/
awk命令
AWK 是一种处理文本文件的语言,是一个强劲的文本分析工具。
之所以叫 AWK 是由于其取了三位创始人 Alfred Aho,Peter Weinberger, 和 Brian Kernighan 的 Family Name 的首字符。
格式
awk [选项参数] script var=value file(s)
或
awk [选项参数] -f scriptfile var=value file(s)
log.txt文本内容如下:
2 this is a test
3 Are you like awk
This s a test
10 There are orange,apple,mongo
用法举例:
awk {[pattern] action} {filenames} # 行匹配语句 awk 只能用单引号
实例:
# 每行按空格或TAB分割,输出文本中的1、4项
$ awk {print $1,$4} log.txt
---------------------------------------------
2 a
3 like
This s
10 orange,apple,mongo
# 格式化输出
$ awk {printf "%-8s %-10s
",$1,$4} log.txt
---------------------------------------------
2 a
3 like
This s
10 orange,apple,mongo


