目录
第一章 初识Linux
第四章 文件管理与常用命令
1.文件基础知识
2.文件显示命令
3.文件内容查询
4. 文件和目录基本操作
5. 文件复制、移动、删除
7. 链接
8. 文件访问权限
9. 文件查找命令
10. 压缩和解压缩
第五章用户与用户组
第六章软件包管理RPM和YUM数据库
1. rpm包相关
2. yum相关
第七章Linux磁盘管理
1. 常用命令:
2. 磁盘相关
3.相关命令
第八章Linux编程
第九章进程管理
1.进程基础
2. at和batch
3. crontab命令
5. 启动/重启/停止服务
第十章Shell编程
1.shell基础
2.变量定义
3.数值计算
4. 实例
第一章 初识Linux
1.自由软件的含义:
Linux 中的自由软件(Free Software)是指符合以下四项自由的软件:
- 自由运行软件,不论出于何种目的。
- 自由学习软件的工作原理,并修改以满足自己的需求。这需要获取软件的源代码。
- 自由重新分发软件的副本,无论是否修改过。
- 自由分发软件的修改版本,以便整个社区都能从中获益。
2. 常见的 Linux 发型版本
- Red Hat
- Ubunutu
- Debian
- SuSE Linux
- Slackware
- Centoo
3. 常见的 Linux 操作系统使用习惯
a 开关机管理
b 文件管理
c 权限管理
d 密码管理
e 服务器状态监控
f 定期备份
......
a. 开关机管理:
开机: 通常使用 sudo systemctl start 或 sudo service start 命令启动系统。
关机: 使用 sudo systemctl poweroff、sudo shutdown -h now 或 sudo init 0 命令关闭系统电源。
重启: 使用 sudo systemctl reboot 或 sudo reboot 命令重启系统。b. 文件管理:
浏览文件夹: 使用 ls、cd、pwd 等命令浏览和导航文件系统。
操作文件: 使用 cp、mv、rm、mkdir、touch 等命令复制、移动、删除和创建文件。
编辑文件: 使用 nano、vim、emacs 等命令行编辑器或图形化编辑器编辑文件内容。c. 权限管理:
查看文件/文件夹权限: 使用 ls -l 命令查看。
修改权限: 使用 chmod 命令更改文件/文件夹的读、写、执行权限。
切换用户: 使用 su 或 sudo 命令切换到其他用户。d. 密码管理:
修改密码: 使用 passwd 命令更改当前用户的密码。
重置密码: 以 root 用户身份使用 passwd username 重置其他用户的密码。e. 服务器状态监控:
查看系统信息: 使用 uname -a、lscpu、lsmem 等命令查看系统硬件信息。
监控进程: 使用 top、htop、ps 等命令查看和管理正在运行的进程。
监控资源使用: 使用 df、du、free 等命令查看磁盘、内存等资源的使用情况。f. 定期备份:
全量备份: 使用 tar、rsync 等命令对整个文件系统进行全量备份。
差异备份: 使用 rsync 等命令只备份变更的文件。
备份计划: 制定定期的全量和差异备份计划以确保数据安全。
4. 常用的在线帮助命令:man help info whatis
5. 关机重启命令:shutdown -h(r)+5 min(now)
第四章 文件管理与常用命令
1.文件基础知识
(1)文件类型及区分:
文件类型 | ls -l或ll命令输出的第一个字符 |
普通文件 | - |
目录文件 | d |
字符设备文件 | c |
块设备文件 | b |
链接文件 | l |
管道文件 | p |
套接字文件 | s |
(2)常用系统目录:
- /:根目录
- /boot: 启动相关文件
- /mnt:挂载目录
- /root:root用户家目录
- /home:普通用户家目录,如/homt/user1
- /dev: 设备文件目录
- /etc: 配置文件目录
(3)
文件基本知识:
- 大小写
- 文件类型的含义
- 设备文件名(/dev/sdc7)
- 可执行文件的含义
2.文件显示命令
(1)cat命令:显示文件内容
(2)more命令:分页显示文件内容
(3)head 命令:输出文件前几行(默认前 10 行)
3.文件内容查询
grep命令:
- grep abc /etc/passwd 普通查找(查找返回的是行,只是没有行号)
- grep abc /etc/passwd /etc/shadow 在多个文件中查找
- grep -l abc file1 file2 file3 列出包含指定字符串的文件的文件名
- grep -n abc file 查找指定字符串并显示匹配行的行号
- grep -n abc file1 file2 在两个文件中查找指定字符串并显示匹配行的行号
- grep -v “#” file1显示不匹配的行
- grep ^$ file1 显示空白行
- grep ^root /etc/passwd 显示匹配指定行首的行
- grep abc$ file 列出文件中所有已abc结尾的行
4. 文件和目录基本操作
(1)Tab 自动补全命令
(2) man命令查看帮助信息
5. 文件复制、移动、删除
(1)cp命令
- cp file /dir 直接复制
- cp file /dir/newfilename 复制并改名
- cp file1 file2 /dir 复制多个文件
- cp -r /dir1 /dir2 将目录/dir1及其所有子目录和文件递归复制到/dir2中
(2)mv命令
- mv file1 file2 将 file1 重命名为 file2
- mv file1 /dir 将 file 移动到目录 /dir 中
(3)mkdir命令
- mkdir dirName 当前目录下创建新目录
- mkdir /tmp/dirName 指定绝对路径创建新目录
- mkdir -p dir1/dir2/dir3 创建多级目录
(4)rmdir命令:只能删除空目录
(5)rm命令
- rm file 删除文件
- rm -f file 强制删除文件
- rm -r dir 删除目录及其子目录
- rm -rf dir 强制删除目录及其子目录
7. 链接
(1)硬链接与软连接(符号链接)
- 硬链接相当于源文件可以同步更新的备份,软连接相当于快捷方式
- 硬链接不能跨文件系统,不能链接目录
- 删除源文件,硬链接不会有影响,软链接变无效
(2)创建:
- 硬链接 ln source linkfile
- 软链接ln -s source linkfile
8. 文件访问权限
rwx 三种权限对于普通文件和目录表现不同。
普通文件 目录台
r 读取内容 ls
w 编辑内容 touch mv rm
x bash cd
(1)ls -l (ll)命令显示结果字符串,ls –a显示全部文件
(2)chmod 命令
- 数字法:chmod 755 file
- 加减法:chmod u+w,g+x,o+x file chmod a+x file chmod +w file
- 等号法:chmod u=rw,g=rw,o=r file
- 设置目录权限:chmod -R 777 dir
(3) umask 命令:设置文件和目录的默认权限
(4)chown命令:改变文件所有者chown user file
(5)chgrp命令:改变文件所属组chgrp newgrp file
(6)newgrp 命令:改变用户的有效组
在 Linux 文件权限中,rwx 分别代表以二进制形式的数值:
- r (read) 表示读权限,对应二进制数值 4。
- w (write) 表示写权限,对应二进制数值 2。
- x (execute) 表示执行权限,对应二进制数值 1。
755 权限的含义:
- 第一个 7 代表文件/目录的所有者拥有读(r)、写(w)和执行(x)的权限。
- 第二个 5 代表文件/目录的所属组成员拥有读(r)和执行(x)的权限,但没有写(w)权限。
- 第三个 5 代表其他用户也拥有读(r)和执行(x)的权限,但同样没有写(w)权限。
9. 文件查找命令
(1) find: 格式注意先写查找范围,再写查找类型(文件名、文件类型、权限、所有者、所属组、时间、大小等),最后是查找文件对象(可使用通配符)
(2) locate 命令:注意和 updatedb 命令配合使用
10. 压缩和解压缩
(1) compress zip gzip bzip2 都是压缩命令
(2) tar:可以在打包的同时进行解压缩,常用用法:tar-jcvf filename dir
tar -zcvf filename dir tar -jxvf filename
第五章用户与用户组
0. root 用户的家目录 普通用户的家目录
1. 配置文件(1)/etc/passwd /etc/shadow /etc/group /etc/gpasswd
2. useradd命令:新增用户useradd newusername
3. passwd命令
- 设置自己的密码:passwd
- 设置其他用户密码(root可执行):passwd user1
- 直接设置其他用户密码(root可执行): echo “newpassword” | passwd –stdin user
- 锁定/解锁用户(root可用):passwd -l user passwd -u user
4. userdel命令:删除用户 userdel user
5. groupadd命令:增加组
6. groupmod命令:修改组信息
- -g:修改GID
- -n:修改组名
7. gpasswd命令:指定组属性
- gpasswd group:设定组密码
- gpasswd -A group:指定组管理员(root专用)
- gpasswd -M user1,user2 group :添加组成员
- gpasswd -a user1,user2 group::添加组成员(组管理员用)
- gpasswd -d user group: 删除组成员(组管理员用)
第六章软件包管理RPM和YUM数据库
1. rpm包相关
(1)安装:rpm -ivh package.rpm,注意使用包全名
安装 nginx 软件包: rpm -ivh nginx-1.14.0-1.el7.ngx.x86_64.rpm
(2)查询:rpm -q package_name,注意使用软件名
查询是否安装了nginx: rpm -q nginx
(3)卸载:rpm -e package_name
卸载 nginx: rpm -e nginx
2. yum相关
(1)yum命令需要在联网的环境下或者设置本地yum源。
(2)在联网的环境下可以自动解决依赖性的问题。
(3)yum install 软件名(如yum install mysqld)
yum install package_name
(4)yum remove 软件名卸载
yum remove package_name
yum remove mysqld
第七章Linux磁盘管理
1. 常用命令:
(1)mount:挂载命令
- mount /dev/sr0 /mnt/cdrom:挂载设备到挂载点
格式: mount [-t 文件系统类型] [-o 挂载选项] 设备文件 挂载点
例如: mount /dev/sr0 /mnt/cdrom - 将 /dev/sr0 设备挂载到 /mnt/cdrom 目录下
- umount /mnt/cdrom:卸载挂载点
格式: umount 挂载点或设备文件
例如: umount /mnt/cdrom - 卸载 /mnt/cdrom 目录下的设备
- mount -o remount,noexec /dev/sdb2: -o后接特殊选项,此例为重新挂载并制定不允许在该分区执行可执行文件
mount 命令用于挂载文件系统。
-o 选项用于指定挂载选项。
remount 选项用于重新挂载已挂载的文件系统。这样可以在不卸载文件系统的情况下,修改挂载选项。
noexec 选项用于禁止在该文件系统上执行二进制程序或脚本。这可以增加系统的安全性,防止恶意程序在该分区上执行。综合起来,mount -o remount,noexec /dev/sdb2 命令的作用是:重新挂载 /dev/sdb2 分区,
在不卸载分区的情况下,
添加 noexec 选项,禁止在该分区上执行任何可执行文件。
- mount -o remount,usrquota,grpquota /dev/sdb2: 重新挂载分区并写入用户磁盘配额文件和组磁盘配额文件
mount 命令用于挂载文件系统。
-o 选项用于指定挂载选项。
remount 选项用于重新挂载已挂载的文件系统。这样可以在不卸载文件系统的情况下,修改挂载选项。
usrquota 选项用于启用用户磁盘配额。这意味着系统会为每个用户记录磁盘使用情况,并根据配额进行限制。
grpquota 选项用于启用组磁盘配额。这意味着系统会为每个组记录磁盘使用情况,并根据配额进行限制。
2. 磁盘相关
(1)设备文件名 /dev/sda /dev/sdb
/dev/sda: 第一块 SCSI 或 SATA 硬盘
/dev/sdb: 第二块 SCSI 或 SATA 硬盘
依此类推,后续硬盘设备文件名为 /dev/sdc、/dev/sdd 等
(2)分区原则
- 主分区最多4个
- 扩展分区最多1个
- 主分区和扩展分区加起来最多4个
- 主分区和扩展分区分区号(1-4)
- 扩展分区不能直接写入数据,需要分成逻辑分区
- 逻辑分区的分区号从5开始,系统内第二块硬盘的第一个逻辑分区设备名为/dev/sdb5
假设有一块第二块硬盘 /dev/sdb可以在 /dev/sdb 上创建 4 个主分区:
/dev/sdb1
/dev/sdb2
/dev/sdb3
/dev/sdb4
或者创建 1 个扩展分区 /dev/sdb4,然后在扩展分区内创建多个逻辑分区:
/dev/sdb5
/dev/sdb6
/dev/sdb7
/dev/sdb8 等
3.相关命令
(1) fdisk:分区命令
(2) mkfs:格式化命令 mkfs -t ext4 /dev/sda2
第八章Linux编程
1. vi相关:
(0)执行vi命令:
- vi filename :打开或新建文件,并将光标置于第一行首
- vi +n filename :打开文件,并将光标置于第n行首
- vi + filename :打开文件,并将光标置于最后一行首
- vi +/pattern filename:打开文件,并将光标置于第一个与pattern匹配的串处
- vi -r filename :在上次正用vi编辑时发生系统崩溃,恢复filename
- vi filename....filename :打开多个文件,依次进行编辑
(1)三种模式:运行vi命令进入命令模式,按a i o r(或A I O R)进入输入模式(插入模式),按ESC回到命令模式,输入:进入底行命令模式(底行模式、末行模式),按ESC重回命令模式。
(2)命令模式下的常用命令
- 定位:H 移至屏幕顶端, M 移至屏幕中间,L 移至屏幕下端,n+空格向右移动n个字符,G 移动到最后一行,nG 移动至第n行,gg移动至第1行
H: 将光标移动到屏幕的顶端(第1行)
M: 将光标移动到屏幕的中间(第5行)
L: 将光标移动到屏幕的底端(第10行)
5 空格: 将光标向右移动5个字符
G: 将光标移动到最后一行(第10行)
3G: 将光标移动到第3行
gg: 将光标移动到第1行
- 删除:x 向后删除一个字符,X向前删除一个字符,nx连续删除n个字符,dd删除当前行,ndd向后删除n行,d1G 删除第1行至当前行, dG删除当前行到最后一行
x: 删除当前光标所在的字符
X: 删除当前光标前面的字符
5x: 连续删除5个字符
dd: 删除当前行
5dd: 删除当前行到向下的4行,共5行
d1G: 删除第1行到当前行(不包括当前行)
dG: 删除当前行到最后一行
- 复制:yy复制当前行,nyy向后复制n行,y1G复制第1行至当前行,yG复制当前行至最后一行,p粘贴在下一行,P粘贴在上一行
yy: 复制当前行
5yy: 复制当前行到向下的4行,共5行
y1G: 复制第1行到当前行(不包括当前行)
yG: 复制当前行到最后一行
p: 将复制的内容粘贴到当前光标所在行的下一行
P: 将复制的内容粘贴到当前光标所在行的上一行
- 其他:u撤销,.重复,ZZ保存文件并退出
u: 撤销上一次操作
.: 重复上一次操作
ZZ: 保存文件并退出编辑器
(3)底行模式下的常用命令
- 保存::w :w! :wq :q! :wq! :w file n1,n2 w newfile
:w: 保存当前文件
:w!: 强制保存当前文件
:wq: 保存文件并退出编辑器
:q!: 不保存退出编辑器
:wq!: 强制保存并退出编辑器
:w file: 将当前文件另存为"file"
:n1,n2 w newfile: 将第n1行到第n2行的内容保存到新文件"newfile"中
- 行号::se nu :se nonu :set nu : set nonu
:se nu: 显示行号
:se nonu: 隐藏行号
:set nu: 同:se nu
:set nonu: 同:se nonu
- 查找: :/str 向下搜索str ,:?str 向上搜索str ,n 往前重复上次搜索,N往后重复上次搜索
:/str: 向下搜索字符串"str"
:?str: 向上搜索字符串"str"
n: 重复上一次的向下搜索
N: 重复上一次的向上搜索
- 替换::s/old/new 本行替换一次,:s/old/new/g本行全部替换,:n1,n2s/old/new/g从第n1行到第n2行全部str1替换为str2
:s/old/new: 替换当前行中首次出现的"old"为"new"
:s/old/new/g: 替换当前行中所有的"old"为"new"
:n1,n2s/old/new/g: 将第n1行到第n2行中所有的"old"替换为"new"
第九章进程管理
1.进程基础
(1)ps aux或ps -elf获取快照
(2)top命令动态获取系统信息(前5行)
(3)uptime 命令可以获取当前启动时间和负载信息
(4)w 命令可以获取 top 前 3 行
2. at和batch
(1)配置文件:/etc/at.allow /etc/at.deny
(1) ps aux 或 ps -elf 命令可以获取系统进程的快照信息,包括进程ID、用户、CPU和内存占用等。
(2) top 命令可以动态显示系统信息,前5行包括系统负载、正在运行的进程数、CPU使用情况、内存使用情况等。
(2)at 时间:at now +5 minutes, at now +3 days, at 23:00 2021-11-20, at midnight 2021-11-11
(1) /etc/at.allow 和 /etc/at.deny 是at任务的配置文件,可以控制哪些用户可以使用at命令。
(2) at 命令可以指定在未来某个时间执行任务,支持多种时间格式,如:
- at now +5 minutes: 5分钟后执行
- at now +3 days: 3天后执行
- at 23:00 2021-11-20: 2021年11月20日23点执行
- at midnight 2021-11-11: 2021年11月11日午夜执行
(3)atq命令:查询当前at任务
atq 命令可以查询当前at任务队列。
(4)atrm jobno:删除at任务
atrm jobno 命令可以删除指定at任务。
(5)batch命令不需要指定具体时间,其他与at一样
batch 命令与at类似,但不需要指定具体时间,系统会在负载较低时执行。
3. crontab命令
(1)配置文件:/etc/cron.allow /etc/cron.deny /etc/crontab
/etc/cron.allow:
这个文件控制哪些用户可以使用 crontab 命令来设置计划任务。
如果这个文件存在,只有被列在这个文件中的用户才能使用 crontab。
如果这个文件不存在,则所有用户都可以使用 crontab。
/etc/cron.deny:
这个文件控制哪些用户不能使用 crontab 命令来设置计划任务。
如果这个文件存在,被列在这个文件中的用户将不能使用 crontab。
如果这个文件不存在,所有用户都可以使用 crontab。
/etc/crontab:
这是系统级的 crontab 文件,里面定义了系统级的计划任务。
这个文件的格式与用户级的 crontab 文件格式相同,每一行代表一个计划任务。
与用户级 crontab 文件不同的是,这个文件还有一个额外的字段,用于指定任务应该由哪个用户执行。
(2)crontab -e命令:编辑当前用户的计划任务
5. 启动/重启/停止服务
service network start/restart/stop或者服务程序绝对地址+start/restart/stop。
service network start: 启动网络服务
service network restart: 重启网络服务
service network stop: 停止网络服务
这里的 network 可以替换为其他服务名称,比如 httpd(Apache HTTP 服务)、mysqld(MySQL 服务)等。
/usr/sbin/httpd start: 启动 Apache HTTP 服务
/usr/sbin/httpd restart: 重启 Apache HTTP 服务
/usr/sbin/httpd stop: 停止 Apache HTTP 服务
这种方法直接使用服务程序的绝对路径来操作服务,适用于任何服务。
第十章Shell编程
1.shell基础
(1)echo命令:-e -n:显示内容不换行
echo 命令用于在终端输出文本信息。
常用选项:
-e:启用转义字符,如 \n 换行, \t 制表符等。
-n:不换行输出,即不自动在输出后添加换行符。echo "Hello, World!" # 输出 Hello, World!
echo -e "Hello\nWorld" # 输出两行
echo -n "No newline" # 输出 No newline (没有换行)
(2)重定向
>:以覆盖方式将输出重定向至文件
>>:以追加方式将输出重定向至文件
echo "This is a test" > test.txt # 将输出写入 test.txt 文件
echo "Appending to file" >> test.txt # 追加内容到 test.txt 文件
(3)管道符 |
管道符用于将一个命令的输出作为另一个命令的输入。
管道的基本语法:
命令1 | 命令2
示例:
ls -l | grep "file" # 列出当前目录下包含 "file" 的文件信息
cat file1.txt file2.txt | wc -l # 统计 file1.txt 和 file2.txt 的总行数
管道可以连接多个命令,实现复杂的操作:
ls *.txt | xargs rm -f # 删除当前目录下所有 .txt 文件
2.变量定义
(1)注意事项:=两边不能有空格;默认为字符串类型;如果有两个单词以上可以使用“”或’’引起来,“”里边特殊字符有固定含义,如$ ! . \ * 等,‘’里面均为普通字符。``反引号可以引用系统命令。
变量名和等号之间不能有空格
默认变量类型为字符串
使用双引号或单引号引用含有多个单词的变量
双引号中的特殊字符如 $ ! . \ * 等有特殊含义
单引号中的特殊字符视为普通字符
反引号 `` 可以引用系统命令的输出
(2)echo输出
name="John Doe"
echo $name # 输出 John Doe
echo "$name" # 输出 John Doe
(3)unset删除变量
unset name # 删除 name 变量
(3)环境变量:export关键字,建议变量名字全部大写字母,env查看,unset删除。
使用 export 关键字定义环境变量
环境变量名建议全部大写
env 命令可查看所有环境变量
unset 可删除环境变量
(4)预定义变量、位置参数变量
$0 表示脚本名称
$1, $2, $3... 表示脚本的位置参数变量
3.数值计算
(1)双小括号$(()):语法最松散,*等符号无需转义,运算符两侧空格可有可无,小括号头尾空格可有可无,变量引用时$符号可有可无,如a=11;b=22;c=$(( a + b )),与$[]功能相同。
a=11
b=22
c=$((a + b)) # c=33
(2)let:功能等同于双小括号,变量前可以不加$,=和其他运算符之间不能有空格。如let c=a+b,let c=$a+2
let c=a+b # c=33
let c=$a+2 # c=13
(3)expr命令:*等特殊符号必须转义(\*),运算符两边必须有空格,引用变量必须加$
c=$(expr $a + $b) # c=33
d=$(expr 5 \* 6) # d=30
4. 实例
(1)判断一个数是否为整数
#!/bin/bash# 获取用户输入
read -p "请输入一个数字: " num# 判断输入是否为整数
if [[ "$num" =~ ^[0-9]+$ ]]; thenecho "$num 是整数"
elseecho "$num 不是整数"
fi
(2)判断参数的个数
#!/bin/bash# 判断参数个数
if [ "$#" -eq 0 ]; thenecho "没有传入任何参数!"
elif [ "$#" -eq 1 ]; thenecho "只传入了一个参数: $1"
elseecho "传入了 $# 个参数:"for arg in "$@"; doecho "- $arg"done
fi
(3)比较两个参数的大小
#!/bin/bash# 检查参数个数
if [ "$#" -ne 2 ]; thenecho "请提供两个参数进行比较!"exit 1
fi# 获取参数值
num1="$1"
num2="$2"# 比较大小
if [ "$num1" -eq "$num2" ]; thenecho "$num1 等于 $num2"
elif [ "$num1" -gt "$num2" ]; thenecho "$num1 大于 $num2"
elseecho "$num1 小于 $num2"
fi
(4)计算1+2+3+…+n.的和
n=100
sum=0
for ((i=1; i<=n; i++)); dosum=$((sum + i))
done
echo "The sum is: $sum" # 输出 5050
(5)计算n的阶乘。
n=5
fact=1
for ((i=1; i<=n; i++)); dofact=$((fact * i))
done
echo "$n! = $fact" # 输出 5! = 120