linux 由 unix 演化而来
基于Linux 开源的内核,不同厂商开发出了不同名称的系统: 如 Redhat,CentOSE, Ubuntu,Suse,红旗等。
虚拟机的网络连接形式
桥连接
Linux 可以和其他的通信,但是可能造成IP冲突
NAT
网络地址转换方式,linux 可以访问外网,不会造成IP冲突
主机模式
你的Linux是一个独立的主机,不能访问外网
Vmtools
此工具可以让 centOS 与主机共享文件,剪切板
Linux 目录结构
采用层级式树状目录结构。Linux中一切皆文件,usb,摄像头,网卡等硬件,都会映射成一个文件
1 | -/ # 根目录 |
Linux 编辑器 Vi、Vim
三种模式:
正常模式
只能查看
插入编辑模式
按下 i,I,o,O,a,A,r,R 任意字母进入
命令行模式
通过上面方式切换VI到VIM 模式, 命令 :wq, :q, :q!
查找命令:/关键字,回车查找, 按n查找下一个
拷贝当前行:yy
拷贝当前行向下5行:5yy
粘贴:p, 拷贝后使用
删除当前行:dd
删除当前行向下5行:5dd
光标回到顶部:gg
光标回到底部:G
撤销操作:u
开/关/重启
1 | 立马关机 |
用户的登录和注销
由于管理员账户权限较高,为避免操作失误。一般采用普通用户登录,在切换管理员权限。
注销命令 logout ,在图形界面级别无效。在级别3下有效
1 | 退出远程连接,注销登陆 |
用户管理
用户,用户组(可理解为角色)概念。用户被分配给某个组。组不同权限不同。
/home/ : 目录下有各个创建的用户对于家目录,当用户登陆时,会自动进入到自己的家目录
创建用户
Linux用户需要向管理员申请,并被分配到某个组
1 | 语法 |
删除用户
1 | 删除用户,保留家目录 |
查询用户信息
1 | 语法, 没有信息返回 提示 |
切换用户
1 | 切换用户, 高权限切换低权限不需要密码 |
查看当前用户/登录用户
1 | whoami/ who am i |
用户组
每个用户都有一个组,通过组来控制用户权限管理
1 | 增加组 |
ocker 需要用户具有 sudo 权限,为了避免每次命令都输入sudo
,可以把用户加入 Docker 用户组(官方文档)。
1
2
3
4 // 创建docker 组
sudo groupadd docker
// 将当前用户添加到docker组
sudo usermod -aG docker $USER
用户和组的相关文件
/etc/passwd
用户user配置文件,记录用户的各种信息
/etc/shadow
口令(密码)配置文件【信息会加密】,每行的意义
登录名:加密口令:最后修改时间:最小使劲啊间隔:最大时间间隔:告警时间:不活动时间:失效时间:标志
/etc/group
组配置文件,每行含义
组名:口令:组标识号:组内用户列表
组管理、权限管理
在Linux中每个用户必须属于一个组,不能独立于组外。
Linux中的文件:
- 所有者
- 所在组
- 其他组
- 改变用户所在组
查看文件所有者,目录所在组
当前用户创建文件时,这个文件所有者是当前用户,所在组为当前用户所在组
1 | ls -ahl |
修改文件所有者
改变所有者不会修改文件所有组
1 | chown 用户名 文件名 |
文件目录所在组
当某个用户创建一个文件内后,这个文件的所在组就是该用户的所在组
修改文件所在组
改变文件所在组不会影响文件所有者
1 | chgrp 组名 文件名 |
权限基本介绍
文件的类型
对于文件来说:
r:读 cat
w:写 vim echo
x:执行 运行命名或者脚本
对于目录来说:
r:读(看到目录里面有什么) ls
w:在目录里面新建文件,删除,移动 touch mkdir rm mv cp
x:目录是不能直接运行的,对目录赋予 x 权限,代表用户可以进入目录,也就是说,赋予 x 权限的用户或群组可以使用 cd 命令。
1 | ls -l |
修改权限
通过chmod命令,可以修改文件或者目录的权限
方式1:+,-,=
u:所有者
g:所有组
o:其他人
a:所有人(u,g,o的总和)
1 | 全部重新复制 |
方式2:
1 | 例如 将文件 /home/abc.txt 赋值权限:rwxr-xr-x |
实用指令
一定情况下可以找回丢失root密码:
重启进入按 enter键(回车)(6及一下 enter, 7版本按e键)
进入单用户模式以root用户(root不需要密码
改密码
系统运行级别 配置文件: /etc/inittab
级别 | 环境 |
---|---|
0 | 关机 |
1 | 单用户(找回丢失root密码 |
2 | 多用户无网络服务 |
3 | 多用户有网络服务 |
4 | 保留 |
5 | 图形界面 |
6 | 重启 |
切换运行级别
1 | init [0/1/2/3/4/5/6] |
指令帮助
都是英文,看不明白就百度
1 | man 命令 |
文件目录类
pwd
显示当前工作目录绝对路径
ls
1 | 基本语法: |
cd
1 | 回到自己的家目录 |
mkdir
1 | mkdir 指令用于创建目录 |
rmdir
1 | 删除空目录, 非空目录无法删除,需要用到 rm -rf 要删除的目录 |
touch
1 | 创建空文件 |
cp
1 | 拷贝文件到指定目录 |
rm
1 | 移出文件或目录 |
mv
1 | 移动文件或重命名 |
cat
1 | 查看文件内容, |
more
1 | more指令是一个基于VI编辑器的文本过滤器,它以全屏的方式按页显示文本文件内容。more指令中内置了若干快捷键 |
操作 | 功能说明 |
---|---|
空格 | 下一页 |
enter | 下一行 |
q | 立刻离开,退出预览 |
ctrl+F | 滚下一屏 |
ctrl+B | 返回上一屏 |
= | 输出当前行号 |
:f | 输出文件名和当前行的行号 |
less
1 | less 指令用来显示分屏查看文件内容,与more类似,按需加载显示内容,效率高 |
操作 | 功能说明 |
---|---|
空格 | 向下翻一页 |
pagedown | 下一页 |
pageup | 上一页 |
/字串 | 向下搜索【字串】,n:下找,N:上找 |
?字串 | 向上搜索【字串】,n:下找,N:上找 |
q | 离开查看 |
输出重定向(>)和追加(>>)
重定向会覆盖原先内容,追加不会
1 | 列表中的内容写入文件a.txt |
echo
输出内容到控制台
1 | 基本语法 |
head
head用于显示文件的开头部分内容,默认显示文件前10行内容
1 | 基本语法 |
tail
用于输出文件中尾部的内容,默认情况下tail指令显示文件的后10行内容
1 | 基本语法 |
ln
软李艾i你姐也叫符号连接,类似于windows里的快捷方式,主要是存放了链接其他文件的路径
1 | 基本语法 |
history
查看已执行过的历史命令,也可以执行历史指令
1 | 基本语法 |
时间日期类的指令
date 指令-显示当前日期
1 | 基础语法 |
设置时间
1 | 基本语法 |
cal
查看日历指令
1 | 基本语法 |
搜索查找类
find
将指令从指定目录向下递归遍历其个个子目录,将满足条件的文件或者目录 显示在终端
1 | 基本语法 |
locate
locaate指令可以快速定位文件路径。locate指令利用事先建立的系统中所有文件名称及路径的locate数据库实现快速定位给定的文件。Locate指令无需遍历整个文件系统,查询速度较快。为了保证查询结果的准确度,管理员必须定期更新locate时刻。
1 | 基本语法 |
特别说明
由于locate指今基于数据库进行查询,所以第一次运行前,必须使用updatedb指令创建locate数据库。
grep 和 |
grep 过滤查找,管道符 “|”, 表示将前一个命令的处理结果输出传递给后面的命令处理
1 | 基本语法 |
压缩和解压类
gzip/gunzip
gzip 用于压缩文件,gunzip 用于解压
1 | 基本语法 |
zip/unzip
zip 用于压缩文件,unzip用于解压文件。项目发包中常用
1 | 基本语法 |
tar
tar 是打包指令,最后打包文件是 .tar.gz的文件
1 | 基本语法 |
1、压缩多个文件
1 | tar -zcvf a.tar.gz a1.txt a2.txt |
2、压缩目录
1 | tar -zcvf myhome.tar.gz /home/ |
3、解压到当前目录
1 | tar -zxvf a.tar.gz |
4、解压到指定目录
1 | 指定目录必须已存在 |
定时任务调度
crontab 进行定时任务的设置。
系统在某个时间执行的特定的命令或程序。
分类:
1、系统工作,如病毒扫描
2、个别用户工作,比如 MySQL数据库备份
1 | 基本语法 |
快速入门
设置任务调度文件: /etc/crontab
设置个人任务调度: crontab -e
输入任务:
1 | 每小时的每分钟执行 ls-l /etc/>> /tmp/to.txt |
项目 | 含义 | 范围 |
---|---|---|
第1个* | 1h中的第几分钟 | 0-59 |
第2个* | 一天中的第几个小时 | 0-23 |
第3个* | 一个月当中的第几天 | 1-31 |
第4个* | 一年中的地几个月 | 1-12 |
第5个* | 一周当中的星期几 | 0-7(0,7都代表星期日) |
特殊参数说明
特殊符号 | 含义 |
---|---|
* | 任意时间 |
, | 代表不连续时间。如”0 6,8 * * * 命令”,每天6:00,8:00执行一次 |
- | 代表连续时间范围。如”0 5 * * 1-6 命令”,代表周一到周6凌晨5点0分执行 |
*/n | 代表隔多久执行一次。如”*/10 * * * * 命令”,每隔10分钟执行一次 |
调度任务实例
每个一分钟,就将当前日期信息,追加到 /xxx/mydate 文件中
编写一个文件 mytask1.sh
1
date >> /xxx/mydate
给脚本可执行权限
crontab -e
*/1 * * * * /xxx/mytask1.sh
相关指令
- contab -r 终止任务调度
- contab -l 列出当前有哪些任务调度
- service contab restart 重启任务调度
磁盘分区、挂载
分区方式:
- mbr分区
- 最多支持4个主分区
- 系统只能安装在主分区
- 扩展分区要占一个主分区
- MBR最大只支持2TB,但拥有最好兼容性
- gpt分区
- 支持无限多个分区(操作系统可能会限制,如windows下最多128个)
- 支持最大18EB的大容量(EB=1024PB,pb=1024TB)
- windows7 64位以后才支持gpt
硬盘说明:
对于Linux硬盘分为 IDE硬盘和SCSI硬盘,目前基本上是SCSI硬盘
对于IDE硬盘:驱动标识符 “hdx~”
1 | hd 表名分区类型就是IDE |
对于SCSI硬盘使用 “sd”表示分区所在设备的类型,其余跟 IDE硬盘一样
查看系统分区和挂载
1 | lsblk -f |
Linux挂载今典案例
在Linux中增加一个新的硬盘 sdb1(2G),并挂载到/home/newdisk
如何增加一块硬盘
虚拟机添加硬盘(需重启)
分区 fdisk /dev/sdb
输入 n 新增分区,然后输入p,分区类型为主分区,然后输入w,保存退出
格式化 mkfs -t ext4 /dev/sdb1
挂载 先创建一个 /home/newdisk,挂载 mount /dev/sdb1 /home/newdisk
1
2mount 设备名称 挂载名录
umount 设备名称 挂载名录设置永久挂载(重启后任然生效)
1
2
3
4vim /etc/fstab
添加
/dev/sdb1 /home/newdisk ext4 defaults 0 0
磁盘情况查询
查询系统磁盘使用情况
1 | df -h |
查询指定目录的磁盘占用情况
1 | 默认当前目录 |
常用指令
统计/home 文件夹下文件个数
1
ls -l /home | grep "^-" | wc -l
统计/home 文件夹下目录个数
1
ls -l /home | grep "^d" | wc -l
统计/home 文件夹下文件个数,包括子文件
1
ls -lR /home | grep "^-" | wc -l
统计/home 文件夹下目录个数,包括文件夹里的
1
ls -lR /home | grep "^d" | wc -l
以树状显示目录结构
1
tree
网络配置
查看虚拟网络IP和网关
VMware 编辑-> 虚拟网络编辑器
为防止IP每次登录动态分配,设置静态IP
修改配置文件来指定IP,并可连接到外网
1 | eth0 代表第一块网卡,eth1代表第二块 |
进程管理
显示系统执行的进程
ps命令是用来查看目前系统中,有哪些正在执行,以及他们执行的情况,可不加任何参数。
1 | | grep nginx 过滤查询进程信息 |
字段 | 说明 |
---|---|
PID | 进程识别号 |
TTY | 终端机号 |
TIME | 此进程所消CPU时间 |
CMD | 正在执行的命令或进程号 |
TT | 终端名称 |
STAT | S-睡眠,s-先导进程,N-优先级低,R-正在运行,D-短期等待,Z-僵死进程,T-被跟踪或者停止 |
CPU | cpu 进程占用 |
RSS | 物理内存占用 |
VSZ | 虚拟内存占用大小 |
查询某进程父进程
1 |
|
终止进程
基本语法
1 | 通过进程号杀死进程 |
实践案例
踢掉某个非法登录用户
1
2ps -aux | grep sshd
kill xxx_id(第二列参数)终止远程登录服务sshd,在适当时候重启sshd服务
1
2ps -aux | grep sshd
kill xxx_id(第二列参数)终止多个gedit编辑器
1
killall gedit
强制杀掉一个终端
1
kill -9 gedit
查看进程树
1
2
3pstree
-p: 显示进程PID
-u: 显示进程的所属用户
查看CPU、内存和硬盘详细信息
服务管理
服务本质就是进程,但是运行在后台的,通常都会监听某个端口,等待其他程序知识。比如 mysql,sshd防火墙等,又称为守护进程,是Linux中非常重要的知识点。
管理指令
service/systemctl 命令设置后立马生效,但是重启后修改会重置。
1 | service 服务名 start| stop | restart | reload | status |
查看关闭重启防火墙情况
1 | systemctl status firewalld |
1.查看防火墙此时运行状态。方式有两种具体如下:
1 | [root@localhost student]# firewall-cmd --state |
2.查看防火墙是否开机自启。
1 | [root@localhost student]# systemctl is-enabled |
3.查看接口区域,这里以ens33为例。
1 | [root@localhost student]# firewall-cmd --get-zone-of-interface=ens33 |
4.查看绑定区域的接口。
1 | [root@localhost student]# firewall-cmd --get-active-zones |
5.查看所有开放端口。
1 | root@zq-virtual-machine:/home/zq# netstat -aptn |
2.1 开启防火墙
1.执行systemctl start firewalld.service命令开启防火墙,默认是开启的。
1 | [root@localhost student]# systemctl start firewalld.service |
2.2 关闭防火墙
1.执行systemctl stop firewalld.service命令关闭防火墙。
1 | systemctl stop firewalld.service |
2.3 重启防火墙
1.执行systemctl restart firewalld.service命令重启防火墙。
1 | systemctl restart firewalld.service |
2.4 开机自启防火墙
1.执行systemctl enable firewalld.service命令设置防火墙开机自启。
1 | systemctl enable firewalld.service |
打开端口/服务
3.1 打开端口
临时打开端口
1.执行firewall-cmd –zone=public –add-port=80/tcp命令打开80/tcp。这里需要注意,这是临时的打开端口,重启后无效。
1 | [root@localhost student]# firewall-cmd --zone=public --add-port=80/tcp |
2.执行systemctl restart firewalld.service命令重启防火墙。
1 | [root@localhost student]# systemctl restart firewalld.service |
注意:当开放端口设置完成后必须要重启,否则不生效!!!
永久打开端口
1.执行firewall-cmd –permanent –zone=public –add-port=80/tcp命令永久打开80/tcp。
1 | firewall-cmd --permanent --zone=public --add-port=80/tcp |
2.执行systemctl restart firewalld.service命令重启防火墙。
1 | systemctl restart firewalld.service |
注意:当开放端口设置完成后必须要重启,否则不生效!!!
3.2 打开服务
临时打开服务
1.执行firewall-cmd –zone=public –add-service=http命令公共区域中临时打开服务HTTP。
1 | firewall-cmd --zone=public --add-service=http |
永久打开服务
1.执行firewall-cmd –permanent –zone=public –add-service=http命令公共区域中临时打开服务HTTP。
1 | firewall-cmd --permanent --zone=public --add-service=http |
查看系统服务
方式1:
1 | <7 |
方式2:
1 | <7 |
进程监控
top 命令,与ps相似,不同的是top会隔一段时间跟新正在运行的进程
1 | top [选项] |
快捷键
操作 | 功能 |
---|---|
P | 以CPU使用率排序,默认值 |
M | 以内存使用率排序 |
N | 以PID排序 |
q | 退出 |
终止指定索引
top指令后,输入k,回车,在输入要结束的进程ID号
监控网络状态
查看系统网络情况 netstat
1 | 基本用法 |
查看服务名为 sshd 的服务信息
1 | netstat -anp | grep sshd |
chkconfig 指令
通过 chkconfig 命令可以给每个服务器各运行级别设置自启动/关闭
1 | 查看服务 |
软件包管理
RPM和YUM
rpm包的管理
1 | 查询已安装包 XX |
一个rpm包名: firefox-45.0.1-1.el6.centos.x86_64.rpm
名称:firefox版本号: 45.0.1-1
适用操作系统: el6.centos
.x86 64表示centos6.x的64位系统。如果是i686、i386表示32位系统,noarch表示通用。
rpm 包管理的其他查询命令
1 | rpm-qa :查询所安装的所有rpm软件包 |
yum 包管理
Yum 是一个 shell 前端软件包管理器。基于 RPM 包管理,能够从指定的服务器自动下载 RPM 包并且安装,可以自动处理依赖性关系,并且一次安装所有依赖的软件包。
apt 是 ubuntu linux 版本用的包管理命令, mac 包管理使用 brew
1 | 查看yum仓库中所有可以安装的rpm包 |
包的默认yum下载的路径:
1 | vim /etc/yum.conf |
Linux 安装JDK
上传解压到 /usr/java/jdk1.8_131。 配置环境变量
/etc/profile
1 | # jdk |
配置完成需要注销重新登录
安装jdk11版本及以上版本
此时解压后的文件夹中没有jre 文件夹
进入解压后的jdk目录执行
1 | ./bin/jlink --module-path jmods --add-modules java.desktop --output jre |
- 本文作者: 王不留行
- 本文链接: https://wyf195075595.github.io/2023/05/04/programming/linux/linux基础命令/
- 版权声明: 本博客所有文章除特别声明外,均采用 MIT 许可协议。转载请注明出处!