1.Linux文件结构
- linux的目录中有且只有一个根目录"/"
- linux的各个目录存放的内容是规划好,不能乱放文件。
- linux是以文件的形式管理我们的设备,因此linux系统,一切皆为文件。
- /bin:Binary的缩写,用来存放常用命令的,比如复制、粘贴
- /dev:用来存放设备的,比如cpu、disk,类似于windows的设备管理器
- /etc:存放配置文件
- /home:用于存放普通用户的主目录,其子目录名是用用户的账号命名的
- /lib:动态库,存放so文件
- /media:挂载多媒体设备,比如usb、软盘之类的
- /mnt:用于让用户临时挂载别的文件系统的,例如在虚拟机中,我们可以设置一个windows和linux的共享文件夹,这个文件夹在linux中就被挂载在mnt中
- /opt:存放一些要安装的软件
- /proc:这是一个虚拟的目录,它是系统内存的映射,访问这个目录来获取系统信息。
- /srv:service的缩写,该目录存放一些服务启动之后需要提取的数据。
- /root:系统管理员的用户主目录
- /sbin:Super User的意思,存放的是自由系统管理员使用的系统管理程序
- /selinux:SELinux是一种安全子系统,它能控制程序只能访问特定文件
- /sys:系统文件夹
- /tmp:用来存放临时文件的
- /usr:用户文件,一般安装的文件或应用程序放在这
- /usr/local:这是另一个给主机额外安装软件所安装的目录。一般是通过编译原码方式安装的程序
- /var:存放一些不断扩充的东西,或者说经常被修改的东西,比如存放一些诸如日志之类的东西
- /boot:存放的是启动Linux时使用的一些核心文件,包括一些连接文件以及镜像文件
2.远程登录到Linux的软件XShell
如果希望安装好XShell后就可以远程访问Linux系统的话,那么有一个前提是,Linux启动了sshd服务,该服务会监听22号端口
- 首先,在Linux中执行
ifconfig
,得到你的Linux服务器所在的端口
- 获得端口后,打开我们安装的XShell,新建连接,将我们获得的ip地址填入主机那一栏,协议选择SSH协议,端口号选择22号,
- 然后填写用户名,密码记住,这个用户是Linux的用户名,我这里直接使用的root,管理员登陆,配置完后点击连接即可连接到Linux了
3.远程上传下载文件的软件Xftp
Xftp是一个基于Windows平台的功能强大的SFTP、FTP文件传输软件,使用了Xftp后,Windows用户能够安全地在UNIX/Linux和Windows PC之间传输文件
- 同XShell一样,在Linux的sshd端口开放的情况下打开Xftp软件,新建连接,主机栏填写你的服务器ip地址,协议选用SFTP协议,端口号选择22,帐号密码自定义
- 切换到选项栏,将编码方式改为utf-8,否则可能出现乱码问题
4.vi和vim编辑器
所有的 Linux系统都会内建vi 文本编辑器。
Vim具有程序编辑的能力,可以看做是Vi的增强版本,可以主动的以字体颜色辨别语法的正确性,方便程序设计。代码补完、编译及错误跳转等方便编程的功能特别丰富,在程序员中被广泛使用。
4.1.正常模式
在正常模式下,我们可以使用快捷键。
以vim打开一个档案就直接进入一般模式了(这是默认的模式)。在这个模式中,你可以使用『上下左右』按键来移动光标,你可以使用『删除字符』或『删除整行』来处理档案内容,也可以使用『复制、粘贴』来处理你的文件数据。
4.2.插入模式/编辑模式
在模式下,程序员可以输入内容。
按下 i,I, o, O, a,A, r,R等任何一个字母之后才会进入编辑模式,一般来说按i即可
4.3.命令行模式
在这个模式当中,可以提供你相关指令,完成读取、存盘、替换、离开 vim 、显示行号等的动作则是在此模式中达成的!
:q
:退出
:q!
:强制退出
:wq
:写入并退出
:w
:写入
4.4.例子
vim hello.java
进入vim的正常模式并创建hello.java文件,按i
进入插入模式,编辑好内容后按esc进入到命令行模式,输入:wq
写入并退出即Write And Quit
缩写,再次输入vim hello.java
进入文件发现修改成功,输入:q!
强制退出
4.5.vim常用快捷键
- 拷贝当前行
yy
,拷贝当前行向下的5行5yy
,粘贴p
- 删除当前行
dd
,删除当前行向下的5行5dd
- 在文件中查找某个单词,输入
/要查找的单词
,然后回车,按n
查找下一个- 设置文件的行号
:set nu
,取消文件的行号:set nonu
- 使用
gg
快捷到达文档开头,使用G
到达文档末尾u
撤销输入- 先输入行号,再输入
shift+g
可快速到达某行;也可以使用:行号
加回车跳转
更多快捷键
5.关机&重启指令
shutdown -h now
立即关机
shutdown -h 1
一分钟后关机
shutdown -r now
立即重启halt
等价于关机reboot
等价于重启syn
把内从的数据同步到磁盘
6.用户登陆和注销
- 登录时尽量少使用root帐号登陆,因为它是系统管理员,最大的权限,避免操作失误。可以利用普通帐号登陆,登录后再用
su -用户名
命令才切换成系统管理员的身份。 - 在提示符下输入
logout
即可注销用户
logout注销指令在图形运行级别无效,在运行级别3下有效
7.用户管理
- Linux系统是一个多用户多任务的操作系统,任何一个要使用系统资源的用户,都必须首先向系统管理员申请一个账号,然后以这个账号的身份进入系统。
- Linux 的用户需要至少要属于一个组。
7.1.添加用户
useradd 用户名
添加一个用户,这样添加用户所在的家目录名默认和用户名相同
useradd -d 指定目录 用户名
添加一个用户的同时也指定用户所在的家目录
passwd 用户名
给指定用户修改密码
7.2.删除用户
userdel 用户名
删除用户
userdel -r 用户名
删除用户以及用户主目录
在实际开发中,一般不会删除用户主目录,否则其产生的代码会消失
7.3.查询用户&切换用户
id 用户名
查询用户,返回值分别是uid
用户id号,gid
所在组的id号,组
所在组的组名
su - 用户名
切换用户,从权限高的用户比如root切换到权限低的用户是不需要输入密码的,反之需要;当需要返回原用户时,用exit
即可。
who am i
/whoami
可以查看自己是用的哪个用户登陆的
7.4.用户组
用户组类似于角色,系统可以对有共性的多个用户进行统一管理
groupadd 组名
创建组
useradd -g 组名 用户名
在创建用户的时候直接分配到组中
groupdel 组名
删除组
usermod -g 组名 用户名
更改用户的组
usermod -d 目录名 用户名
改变用户登陆的初始目录
7.5.相关配置文件
-
/etc/paswd文件
这是用户的配置文件,记录用户的各种信息
每行的含义: 用户名 口令 用户id 组id 注释性描述 主目录 Shell
-
/etc/shadow文件
这是口令的配置文件
每行的含义:登录名 加密口令 最后一次修改时间 最小时间间隔 最大时间间隔 警告时间 不活动时间 失效时间 标志 -
/etc/group文件
这是组配置文件
每行的含义:组名 口令 组id 组内用户列表
8.运行级别&通过运行级别找回密码
0:关机
1:单用户(找回丢失密码)
2:多用户无网络服务
3:多用户有网络服务
4:保留
5:图形界面
6:重启
常用的运行级别是3和5,要修改默认的运行级别可改文件/ect/inittab
的id:5:initdefault:
这一行中的数字,可使用init 数字
这一命令切换
如果我们不小心忘记了root密码,我们可以进入到单用户模式,然后修改root密码,单用户模式root是不需要密码就可以登录
- 开机时在引导界面按ctrl键进入一个界面
- 在该界面输入e会进入一个新的界面
- 在新的界面选中第二行(编辑内核)再输入e
- 这在行的末尾加入一个
1
,表示我们要进入单用户模式,完成后输入回车键- 输入b,启动Linux,这时就会进入单用户模式
- 在单用户模式,直接使用
passwd root
指令就可以修改root密码了
9.文件目录类指令
pwd
显示当前工作目录的绝对路径ls 选项 目录或文件
查看当前目录内容
-a
显示当前目录所有目录和文件,包括隐藏的
-l
以列表的方式显示信息cd 参数
切换到指定目录
cd ;
/cd ~
切换到家目录
cd ..
切换到上一级目录mkdir 选项 目录名
创建目录
-p
创建多级目录rmdir 目录名
删除(空)目录
rm -rf 目录名
可以删除非空目录
r表示递归 f表示强制touch
创建一个空文件cp 选项 source dest
拷贝文件到指定目录
\cp
可以强制覆盖 不出现确认提示
-r
递归复制整个文件夹rm 选项 要删除的文件或目录名
删除文件或目录
-r
递归删除整个文件夹
-f
强制删除不提示mv
移动文件与目录 或 重命名
重命名:mv oldName newName
,都在当前目录时重命名
移动文件:mv /temp/hello.txt /root
,不在同一目录时,移动文件cat 选项 文件名
查看文件内容
-n
显示行号
如果文件内容太多,可使用cat 选项 文件名 | more
分页显示less 要查看的文件
less指令用来分屏查看文件内容,它的功能与more指令类似,但是比more指令更加强大,支持各种显示终端。less指令在显示文件时,并不是一次将整个文件加载后显示,而是根据显示需要加载内容,对于显示大型文件具有较高的效率命令 > 文件名
输出重定向,它会将内容写入到文件中(覆盖写)
命令 >> 文件名
追加,它会将内容追加到文件的末尾echo 选项 输出内容
输出内容到控制台,如echo $PATH
可输出Linux的环境变量路径head 文件名
用于显示文件开头部分内容,默认情况下head指令显示文件10行内容
head -n 5 文件名
查看文件头五行内容tail 文件名
查看文件后10行的内容
tail -n 5 文件名
查看文件后5行的内容
tail -f 文件名
实时追踪该文档的所有更新ln -s 原文件或目录 软链接名
给原文创建一个软链接,相当于windows中的快捷方式
rm -rf 软链接
可删除软链接,但软链接名后不能带/
history
查看已经执行过的历史命令
history 5
查看已经执行过的最后5条命令
!5
可以重新执行history中第5条命令tree 目录路径
将目录以树状图的形式表达出来,如果tree指令无法使用,可使用yum install tree
进行安装
10.时间日期类指令
date
显示当前时间
date +%Y
显示当前年份
date +%m
显示当前月份
date +%d
显示当前是哪一天
date +%Y-%m-%d %H:%M:%s
显示年月日时分秒
date -s "2021-10-12 9:31:00"
设置系统日期,注意引号cal
显示当前日历
cal 2021
可以显示2021年一整年的日历
11.搜索查找类指令
find 搜索范围 选项
从指定目录向下递归遍历各个子目录,将满足条件的文件或目录显示在终端
-name 文件名
按照指定的文件名查找文件
-user 用户名
查找属于指定用户名所有文件
-size 文件大小
按照指定文件的大小查找文件,文件大小+20M
表示大于20M的文件,+1k
表示大于1k的文件,M大写,k小写,+
表示大于,-
小于,不写是等于locate 搜索文件
可以快速定位文件路径,locate指令利用事先建立的系统中所有文件名称及路径的locate数据库事先快速定位给定的文件。查询速度较快,但由于locate指令基于数据库进行查询,所以第一次运行前,必须用updatedb
指令创建locate数据库grep 选项 查找内容 源文件
过滤查找,管道符|
,表示将前一个命令的处理结果传递给后面的命令处理
-n
显示匹配行及行号
-i
忽略字母大小写
举个例子cat hello.txt | grep hello -ni
将cat输出的hello.txt的内容交给grep处理,找到其中有hello的行忽视大小写同时输出行号
12.压缩和解压缩类指令
gzip 文件名
压缩文件,只能将文件压缩为*.gz文件,压缩后原文件也会消失
gunzip 文件名.gz
解压缩zip 选项 压缩后的文件名 压缩目标路径
压缩文件
-r
递归压缩,即压缩目录
unzip 选项 文件名.zip
解压缩
-d 目录
指定解压后文件的存放目录tar 选项 xxx.tar.gz 打包的内容
tar指令是打包指令,最后打包的是.tar.gz文件
-c
产生.tar打包文件
-v
显示详细信息
-f
指定压缩后的文件名
-z
打包同时压缩
-x
解包.tar文件
zip create verbase filename zcvf
一般来说,压缩的时候可以直接使用tar -zcvf 打包后的文件名.tar.gz 打包的内容
来打包文件,需要注意的是,打包的内容是可以同时包含多个文件的,而-zcvf
前三个字母的顺序是可以随意变动的,但如果要设置打包后的文件名,f必须在最后面才行
反之,解压则是tar -zxvf 需要解压的文件名 -C 解压的目标路径
,其中-C 解压的目标路径
可以去掉,这样就会解压到当前目录
13.组管理&权限管理
在Linux中每个用户必须属于一个组,不能独立于组外。在Linux中每个文件有所有者、所在组、其他组的概念。
组管理的部分内容可查看7.4
13.1. 所有者
一般为文件的创建者,谁创建了文件,就自然成为该文件的所有者,同时该文件的所在组也是用户的所在组,哪怕使用chown
更改了文件的所有者,其所在组也不会改变。
ls -ahl
all human long,查看文件所有者
chown 用户名 文件名
修改文件所有者
chgrp 组名 文件名
修改文件所在组
chown 新用户名:新组名 文件名
同时修改文件的所有者和所有组
-R
如果是目录,则使其下所有子文件或目录递归生效
13.2.权限
解析
ll
指令信息
输入ll
后可查看当前目录文件信息
例如drwxr-xr-x 2 root root 38 Oct 13 06:08 test2
其中drwxr-xr-x
表示文件的权限
- 第1位表示文件的类型
-
普通文件
l
软链接
c
字符设备,比如鼠标、键盘
b
块文件,比如硬盘
d
目录- 第234位表示文件所有者权限
r
可读
w
可写
x
可被执行,如果是目录就是可进入
值得注意的是,rwx还可以用数字来表示,r=4,w=2,x=1因此rwx=4+2+1=7- 第567位表示文件所在组的用户的权限,同2
- 第89 10位表示文件其他组用户的权限,同2
数字
2
所在的位置,表示硬链接的数,如果是目录,则表示该目录的子目录的个数
第一个root
表示用户名、第二个root
表示文件所在组名
38
表示文件大小,如果是目录的话,则是4096
时间
是最后修改时间
test2
是文件名
权限管理
chmod
修改文件或目录的权限
u
:所有者 、g
:所有组 、o
:其他人 、a
:所有人(u、g、o的集合)
第一种权限修改方式:+、-、=变更权限
chmod u=rwx g=rx o=x 文件目录名
chmod g+w 文件目录名
chmod a-x文件目录名
第二种权限修改方式:使用数字
chmod 755 文件目录名
等价于chmod u=rwx g=rx o=rx
14.crond任务调度
任务调度是指系统在某个时间执行的特定的命令或程序
crontab 选项
-e
编辑crontabl定时任务
-l
查询crontab定时任务
-r
删除当前用户所有的定时任务
*/1 0,5 * * 1-6 ls -al /home >> /tmp/to.txt
为每月的周一到周六的0点和5点每分钟执行一次命令将home文件的信息写入to.txt文件
复杂任务的执行
- 首先创建一个shell脚本
- 将你要执行的命令写入shell脚本
- 更改shell脚本的执行权限
- 编辑crontab定时任务
*/1 * * * * shell脚本路径
service crond restart
重启任务调度
15.Linux磁盘分区和挂载
分区基础知识
- mbr分区:
1.最多支持四个主分区
2.系统只能安装在主分区
3.扩展分区要占一个主分区
4.MBR最大只支持2TB,但拥有最好的兼容性
- gtp 分区:
1.支持无限多个主分区(但操作系统可能限制,比如 windows下最多128个分区)
2.最大支持18EB的大容量(1EB=1024 PB,1PB=1024 TB )
3.windows7 64位以后支持gtp
lsblk -f
查看系统的分区和挂载的情况
lsblk,老师不离开,方便记忆
例:
- 最前方的vda1,vd表示磁盘类型,a表示第一个vd磁盘,1表示这个磁盘上的第一个主分区或扩展分区
- xfs为分区类型
- 那一长串字符是表示uuid,唯一标识符
- /为挂载点
如果想看到分区大小,直接使用
lsblk
即可
挂载
- 添加一块硬盘(物理)
- 分区
fdisk /dev/sdb
sdb是什么可参考上面的一段引用(vda1)- 格式化
mkfs -t ext4 /dev/sdb1
这段话的意思是把文件格式化成ext4类型- 挂载
mount /dev/sdb1 目标文件
即,将已经格式化好的分区和已有文件进行挂载,但值得注意的是,这种挂载如果系统重启,就会自动解除,因此需要进行第五步- 自动挂载(永久挂载)
需要自动挂载的话,我们需要修改/etc/fstab
中的内容
在这个文件中,这些决定了开机时,Linux的自动挂载,修改好并保存后,使用mount -a
指令,即可实现自动挂载
想要解除挂载,使用umount 设备名/目录名即可
例如umount /dev/sdb1
或umount newdisk
磁盘情况查询
df -h
查询系统整体磁盘使用情况du -h /目录名
查询指定目录的磁盘占用情况,默认为当前目录
-s
指定目录占用大小汇总
-h
人看的东西human
-a
all所有文件
-c
汇总
--max-depth=1
子目录深度
例:du -ach --max-depth=1 /home
查询home文件的磁盘占用情况,显示所有的深度为1的文件占用情况以及汇总
16.网络配置
- 自动获取
说明:登录后,通过界面来设置自动获取ip
特点:Linux启动后会自动获取ip,缺点是每次自动获取的ip地址可能不一样
- 指定固定的ip
说明:直接修改配置文件来指定IP,并可以连接到外网
vim /etc/sysconfig/network-scipts/ifcfg-eth0
末端的0表示第一块网卡,如果有两块网卡 那就是eth0 eth1
ONBOOT设置为yes
BOOTPROTO设置为static,表示以静态的方式获取ip
IPADDR为指定的ip
GATEWAY为网关
DNS1与网关保持一致
配置完毕后使用service network restart
重启服务
17.进程管理
ps
查看进程的使用,一般用ps -aux
-a
显示当前终端的所有进程信息
-u
以用户的格式显示进程信息
-x
显示后台进程运行的参数
指令说明
- USER:用户名称
- PID:进程号
- %CPU:进程占用CPU的百分比
- %MEM:进程占用物理内存的百分比
- VSZ:进程占用的虚拟内存大小(单位:KB)
- RSS:进程占用的物理内存大小(单位:KB)
- TT:终端名称,缩写.
- STAT:进程状态,其中S-睡眠,s-表示该进程是会话的先导进程,N-表示进程拥有比普通优先级更低的优先级,R-正在运行,D-短期等待,Z-僵死进程,T-被跟踪或者被停止等等
- STARTED:进程的启动时间
- TIME:CPU时间,即进程使用CPU的总时间
- COMMAND:启动进程所用的命令和参数,如果过长会被截断显示
ps -ef
以全格式显示当前所有的进程
-e
显示所有的进程
-f
全格式
指令说明
- UID:用户ID
- PID:进程ID
- PPID:父进程ID
- C:CPU用于计算执行优先级的因子。数值越大,表明进程是CPU密集型运算,执行优先级会降低;数值越小,表明进程是IO密集型运算,执行优先级会提高
- STIME:进程启动的时间
- TTY:完整的终端名称
- TIME:CPU时间
- CMD:启动进程所用的命令和参数
kill 选项 进程号
通过进程号杀死进程
killall 进程名称
通过进程名称杀死进程,也支持通配符,这在系统因负载过大而变得很慢时很有用
-9
强迫进程立即终止
pstree
可以以树状的形式查看进程关系
-u
显示进程的所属用户
-p
显示进程的PID
18.服务管理
服务(service)本质就是进程,但是是运行在后台的,通常都会监听某个端口,等待其他程序的请求,因此又称为守护进程。
service 服务名 [ start | stop | restart | reload | status ]
[启动 关闭 重启 重载 状态]
要想查看服务名,可以通过setup->系统服务
或/etc/init.d/服务名称
来查看
在CentOS7.0以后,不再使用service,而是systemctl
systemctl [选项] 服务名
选项:
start
启动
status
查看状态
disable
停止
stop
禁用
如果要测试这个端口是否已经启动,可以使用telnet 端口号
来测试
这种方式只是临时生效,当重启系统后,还是回归以前对服务的设置。
如果希望设置某个服务自启动或关闭永久生效,要使用systemctl
指令,这个指令可以给每个服务的的各个运行级别设置自启动/关闭
systemctl list-unit-files | grep xxx
查看是否加入开机启动
systemctl enable 服务名
设置服务开机启动
systemctl disable 服务名
设置服务禁止开机启动
systemctl list-dependencies
查看当前运行级别启用了哪些服务
动态监控进程
top 选项
-d
指定top命令每隔几秒更新,默认是3秒在top命令的交互模式当中可以执行的命令
-i
使top命令不显示任何闲置或僵死进程
-p
通过指定监控进程id来仅仅监控某个进程的状态
交互操作(注意大小写)
操作 功能 P 以cpu使用率排序,默认就是此项 M 以内存的使用率排序 N 以PID排序 q 退出top U 监控特定用户 k 杀死某个进程(根据id)
监控网络服务
netstat 选项
查看所有的网络服务
-an
按一定顺序排列输出
-p
显示哪个进程在调用
19.防火墙
防火墙的服务可以使用上文的systemctl
来进行相关操作
firewall-cmd --zone=public --add-port=端口号/tcp --permanent
添加一个端口,permanent表示永久生效,没有此参数重启后失效
firewall-cmd --reload
重新载入防火墙
firewall-cmd --zone= public --query-port=端口号/tcp
查看某端口是否存在
firewall-cmd --zone= public --remove-port=端口号/tcp --permanent
删除该端口
firewall-cmd --list-all
查看开放的端口