开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第4天,点击查看活动详情
本文是作者在学习 Linux 时做的笔记,一些重要和基本的命令均有涉及,可供今后查阅使用
一、Linux入门
1. Linux、Ubuntu 和 CentOS 之间的关系?
Linux 是其各发行版的内核,即 Ubuntu 和 CentOS 是以 Linux 为内核的加强版操作系统。
2. Linux 和 Unix 的关系?
Linux 是在 Unix 的基础上发展而来。
3.VMware 和 CentOS7 的安装
4.网络连接的三种方式?
- 桥接模式(直接连接物理网络):虚拟系统获得一个与宿主机同一网段的 IP 地址。
- 优点:该虚拟系统可以与和宿主机在同一网段内的所有主机直接通信。
- 缺点:多个虚拟系统采用该方式容易造成 IP 冲突。
- NAT ( Network Address Translation )(用于共享主机的 IP 地址) :虚拟系统获得一个与宿主机不在同一网段的 IP 地址。
- 优点:与宿主机同网段主机间接通信,解决了 IP 冲突。
- 缺点:外部主机不能直接向虚拟系统发起通信。
- 主机模式(与主机共享的专用网络):独立的系统。
5.虚拟机的克隆?
优势:快速构建集群。
方法:1. 直接复制一份(一个虚拟机在宿主机上的存在形式就是一个文件夹)。 2. 利用 VMware 的克隆功能
6.虚拟机的快照?
提供了整个虚拟机的版本控制功能。
7.VMware Tools
作用:与宿主机共享文件夹
如果共享文件夹突然看不到了,禁用再重启试试!
二、Linux 基础
1. 目录结构
※2. 远程登录、远程文件传输
ifconfig 查看虚拟机 IP,用于远程登录虚拟机或与虚拟机互发文件
- Xshell 用于远程登录,只能对远程服务器进行命令行操作。
- Xftp 用于远程文件传输。
3. Vi / Vim
- 三种模式的切换
- 常用快捷键
4. 关闭 / 重启虚拟机(shutdown、poweroff、halt 和 reboot 命令)
常用 shutdown -h now 关机,reboot 重启。
※5. 用户管理指令 (Linux 是多用户多任务操作系统)
- 用户
- useradd
- passwd
- userdel (默认保留家目录,-r 表示同时删除家目录)
- logout 注销用户
- /etc/passwd 中查看所有用户
- su - 切换用户,由高权限用户切换到低权限用户不需要输入密码,反之需要。可以通过 exit / logout 这两个命令退回到刚才的用户。
- id 用户信息
- who am i 登录用户信息
- whoami 操作用户信息
- 用户组
- groupadd
- cat /etc/group 查看所有用户组
- groupdel
- useradd -g 组名 用户名 在某组添加用户
- usermod -g 组名 用户名 修改用户所属组
6. 运行级别
可以利用 init 指令切换运行级别。
- 0 - 关机
- 3 - 多用户状态有网络服务
- 5 - 图形界面
- 6 - 系统重启
在图形界面使用 init 3 指令可以切换到命令行级别,再使用 init 5 可切回图形界面运行级别。
在 CentOS7 之后,可以使用命令查看和切换运行级别:
systemctl get-default查看当前运行级别systemctl set-default TARGET.target切换到指定运行级别
7. 修改 root 用户密码
8. 帮助命令
- man
- help
※9. 文件目录指令 (-r 表示 recursion 即递归操作,-f 表示 force)
- pwd 绝对路径
- ls
- cd
- mkdir
- rmdir 删除空目录,同 rm -r
- rm
- touch 创建空文件
- cp 复制
- mv 重命名 / 移动文件
- cat
- more 分屏显示内容,比 cat 更人性化
- less 动态加载,分屏显示,适合读大文件
- echo
- head 查看文件开头内容
- tail 查看文件结尾内容
>覆盖>>追加- ln 软链接(快捷方式)
- history
- ! 执行指定编号的历史指令
10. 时间日期指令
- date
- cal
※11. 查找指令
- find (-name -user -size)
- locate 基于数据库查询,在第一次使用前需要使用 updatedb 创建数据库
- which 返回指令所在位置
- grep 过滤查找内容
12. 压缩 / 解压指令
- gzip / gunzip 只适用于普通文件
- zip / unzip 使用 -r 或 /* 进行递归压缩
- tar -zcvf 压缩 -zxvf 解压
三、组/权限管理
1. 文件/目录所有者/所在组
-
ll 查看文件详情时,可以看到文件/目录所有者/所在组
-
chown 修改文件/目录所有者
chown newowner 文件 / 目录(-R 递归修改)
chown newowner : newgroup 文件 / 目录 (-R 递归修改)
-
chgrp 修改文件/目录所在组
2. 使用 ll 命令后,每行内容解析
以 -rwxrw-r-- 1 root root 1213 6月 26 11:03 abc.txt 为例:
- 前十位
- 第一位代表文件类型 - 代表普通文件 d 代表文件夹
- 2 - 4 位代表所有者的权限
- 5 - 7 位代表所在组的权限
- 8 - 10 位代表其他组的权限
1代表这是一个普通文件,空文件夹是2, 非空文件夹是文件夹里项目数- 第一个
root代表该文件 / 文件夹的所有者是 root - 第二个
root代表该文件 / 文件夹的所在组是 root 1213代表文件的大小。若为文件夹则为一个默认值
3. 文件夹的 rwx
- x 获得 x 权限才能进入该文件夹
- r 获得 r 权限可以看到文件里有什么,但是不影响用户对其中文件进行操作
- w 删除、添加和修改文件名的权限
※4. 修改权限 chmod
+ - =方式
- u - user
- g - group
- o - others
- a - all
- 数字方式
chmod u=rwx,g=rw,o=x a.txt 等价于 chmod 761 a.txt
四、定时任务调度 | 磁盘分区、挂载 | 网络配置
一、定时任务调度
1. crontab 多次定时任务
-
-e编辑 crontab 定时任务-
从前到后五个位置 分别代表分钟、小时、天、月、星期几
-
*代表任何时间 -
,代表不连续的时间0 8,12,16 * * * 命令代表每天 8:00 12:00 16:00 都执行一次命令 -
-代表连续的时间范围0 5 * * 1-6 命令代表周一到周六的 5:00 执行命令 -
*/n代表每隔多久执行一次*/10 * * * * 命令代表每隔 10 分钟执行一次命令
-
-
-l列出正在运行的定时任务 -
-r终止所有正在运行的定时任务
2. at 单次定时任务
使用 at 前确保 atd 进程正在运行,查找指定进程的方式:ps -ef | grep atd
-
at
例如:一分钟后将 date 输出到 /root/tmp/mydate.txt 中
at now + 1 minutes 回车进入 at 命令行,输入 date >> /root/tmp/mydate.txt 命令后按两次
Ctrl + D退出。 -
atq 查询 at 定时任务
-
atrm 删除 at 定时任务
二、磁盘分区、挂载
1. 分区、挂载
-
lsblk
查看磁盘分区和挂载情况。sda 磁盘有三个分区,各分区挂载点如下图 MOUNTPOINT 所示。
-
为虚拟机增加一块硬盘并分区、挂载的流程:
- 增加硬盘 2. 分区 3. 格式化 4. 挂载 5. 设置自动挂载
2. 磁盘使用情况查询
-
df -h
查看系统整体磁盘使用情况
-
du -h
查询指定目录的磁盘占用情况
-a 含文件
--max-depth 子目录深度
3. 如何统计某目录下的文件或文件夹数目?
-
统计文件数
ll | grep "^-" | wc -l
ll -R | grep "^-" | wc -l
-
统计文件夹数
ll | grep "^d" | wc -l
ll -R | grep "^d" | wc -l
4. tree 命令
若没有 tree 命令,需使用 yum install tree 安装指令。
三、网络配置
1. NAT 网络配置原理图
2. 指定 IP
引入:虚拟机每次启动后 IP 地址不定,导致 XShell 需要再输入 IP地址等重新登陆,如何使虚拟机 IP 地址固定?
方法:
- 修改 /etc/sysconfig/network-scripts/ifcfg-ens33 文件
- dhcp 改为 static
- IPADDR = 192.168.100.100
- GATEWAY = 192.168.100.2
- DNS1 = 192.168.100.2
至此,Linux 虚拟机的 IP 修改完毕,为了实现与 vmnet8 的通信,需要修改 vmnet8 的 IP。
- 在虚拟网络编辑器中修改子网 IP 和 网关 IP
3. 重启虚拟机,指定 IP 流程完成。XShell 就可以愉快的锁定 192.168.100.100 这个 IP 啦!
3. 主机名
- hostname 查看主机名
- 在 /etc/hostname 中修改主机名,重启生效
4. Hosts 映射
-
Windows
"C:\Windows\System32\drivers\etc\hosts" 在该文件下(需要勾掉只读,以管理员身份修改),添加 192.168.100.100 fanhaolinux 即可完成 fanhaolinux 和 IP 192.168.100.100 的映射,相当于为 IP 起了个别名。
-
Linux
给 /etc/hosts 文件添加 192.168.100.100 fanhaowindows,即完成映射。
五、进程管理
1. ps 指令
- -a 显示当前终端所有进程信息
- -u 以用户格式显示进程信息
- -x 显示所有进程,包括所有用户的进程
在使用时,通常采用 -aux
-
-ef 可以查看进程的父进程 PPID
-
pstree 进程树
-p 显示 PID
-u 显示 USER
2. 终止进程
- kill 进程号
- killall 进程名称
- -9 强制终止
3. 服务管理
-
setup 管理系统服务、
-
service 和 chkconfig 在 CentOS7 之后,两个命令被 systemctl 替代,只有对 network 操作时还有用
-
systemctl
- systemctl [start | stop | restart | status] 服务名
- systemctl list - unit - files 查看所有服务的开机启动状态
- systemctl enable / disable 服务名 修改服务开机启动状态
-
firewall
firewall-cmd --query-port=端口/协议 查询端口是否开放 netstat -anp 可以看到端口对应的协议
firewall-cmd --permanent --add-port=端口/协议 打开防火墙端口
firewall-cmd --permanent --remove-port=端口/协议 关闭防火墙端口
firewall-cmd --reload 重新载入才能使端口的打开/关闭操作生效
4. top 指令
动态监视进程
-
参数选项
-d 秒数 指定更新时间,默认为 3s
-
运行时交互
P 以 CPU 占用率排序,默认如此
M 以内存占用率排序
N 以 PID 排序
u 监视特定用户的进程
k 杀死进程
q 退出
5. 监控网络状态
- netstat -anp
- ping
六、RPM / YUM
1. rpm
- 查询
- -q 查询软件包是否安装
- -qa 查询安装的所有 rpm 软件包
- -qi 查询软件包的详细信息
- -ql 查询软件包包含的文件
- -qf 查询文件所属的软件包
- 删除
- -e
- -e --nodeps 强制删除,忽略依赖关系
- 安装
-ivh rpm 包路径
2. yum
rpm 安装需要把 rpm 包先下载下来,yum 直接从远程服务器下载并安装软件,从而简化 rpm 安装。
- yum list | grep xxx
- yum install xxx
七、Shell
1. 执行方式
- 以
!/bin/bash开头,脚本需要有 x 权限 - sh + 脚本 快速执行脚本,省去添加 x 权限过程
2. 变量
-
系统变量
$HOME、$PWD等。使用 set 查看所有系统变量。
可以在
/ect/profile文件中通过 export 指令声明系统变量,然后使用source /etc/profile使系统变量立即生效,在其他程序中就能开始使用 -
用户自定义变量
定义变量:变量=值 = 左右不能有空格;变量名一般大写
撤销变量:unset 变量
静态变量:readonly 变量 不能撤销
命令返回值赋给变量:1.反引号 A=
date2. A=$(date) -
位置参数变量
命令后可加多个参数
$n$0代表命令本身,$1代表第一个参数,以此类推,第十个开始要用大括号括起来,如${10}$*所有参数 (整体,合为一份数据)$@所有参数 (仍为多份数据,可遍历)$#参数个数 -
预定义变量
$$当前进程的 PID$!后台运行的最后一个进程的 PID$?最后一次执行的命令的返回状态,0 - 正确执行
3. 运算式
最方便的写法: $[运算式]
4. 条件判断式(适用于 if 和 while)
格式:[ 条件 ] 中括号和条件间要求有一个空格
特殊真假:[ xxx ] 为真( xxx 为非判断语句,如一个字符串),[ ] 为假
判断语句分类:
- 字符串比较
- 整数比较
- 文件权限判断
- 文件类型判断
5. 流程控制
-
if 单分支判断
if [ ] then #逻辑代码 fi -
if 多分支判断
if [ ] then #逻辑代码1 elif [ ] then #逻辑代码2 fi -
case
case $变量名 in "值1") #逻辑语句1 ;; "值2") #逻辑语句2 ;; *) #其它情况 ;; esac -
for 循环
- 格式:for 变量 in 值1 值2 ...
#借此探究 $* 和 $@ 的区别,注意要加引号,否则均为 $@ 的效果 for i in "$*" do echo "i=$i" done for j in "$@" do echo "j=$j" done- for ((初始值;条件;执行语句)) 这里的条件可以用 > / < 等判断符号,if 语句若使用 6 > 5这类语句,则默认为真
-
while 循环
格式:while [ 条件 ] 这里 while 右边,以及条件两边都需要空格
这里的条件与 if 的要求一样,只有第二类 for 循环的判断条件特殊
6. 获取控制台输入
read -t 10 -p "请输入X的值:" X
echo "您输入的X = $X"
- -t 等待输入的最长时间
- -p 提示信息
7. 函数
系统函数
-
basename
#截取文件名 basename /root/test.sh -> test.sh basename /root/test.sh .sh -> test -
dirname
#截取路径名 dirname /root/test.sh ->/
自定义函数
function getSum(){
echo "SUM=$[$A + $B]"
}
...