参考教程

B站视频:尚硅谷大数据Linux教程(大数据linux开发)

视频评论区的学习笔记

Linux的文件目录结构

在Linux的世界里,一切皆文件。

20200824201738718

  • /bin (/usr/bin 、/usr/local/bin):是Binary的缩写,这个目录存放着最经常使用的命令。

  • /sbin (/usr/sbin 、/usr/local/sbin):s就是Super User的意思,这里存放的是系统管理员使用的系统管理程序。

  • /home :存放普通用户的主目录, 在linux中每个用户都有一一个自己的目录,一般该目录名是以用户的账号命名的。

  • /root:该目录为系统管理员,也称作超级权限者的用户主目录。

  • /lib:系统开机所需要最基本的动态连接共享库,其作用类似于Windows里的DLL文件。几乎所有的应用程序都需要用到这些共享库。

  • /lost+found:这个目录一般情况下是空的,当系统非法关机后,这里就存放了一些文件。

  • /etc:所有的系统管理所需要的配置文件和子目录my.conf。

  • /usr:这是一个非常重要的目录,用户的很多应用程序和文件都放在这个目录下,类似于windows下的program files目录。

  • /boot:存放的是启动Linux时使用 的一些核心文件,包括一些连接文件以及镜像文件。

  • /proc:这个目录是一个虚拟的目录,它是系统内存的映射,访问这个目录来获取系统信息。

  • /srv:service缩写,该目录存放一些服务启动之后需要提取的数据。

  • /sys:这是linux2.6内核的一个很大的变化。该目录下安装了2.6内核中新出现的一个文件系统。

  • /tmp:这个目录是用来存放一些临时文件的。

  • /dev:类似于windows的设备管理器,把所有的硬件用文件的形式存储。

  • /media:linux系统会自动识别一些设备,例如U盘、光驱等等,当识别后,linux会把识别的设备挂载到这个目录下。

  • /mnt:系统提供该目录是为了让用户临时挂载别的文件系统的,我们可以将外部的存储挂载在/mnt/上,然后进入该目录就可以查看里的内容了。

  • /opt:这是给主机额外安装软件所摆放的目录。如安装ORACLE数据库就可放到该目录下。默认为空。

  • /usr/local:这是另一个给主机额外安装软件所安装的目录。一般是通过编译源码方式安装的程序。

  • /var:这个目录中存放着在不断扩充着的东西,习惯将经常被修改的目录放在这个目录下,包括各种日志文件。

  • /selinux [security-enhanced linux] 360:SELinux是一种安全子系统,它能控制程序只能访问特定文件。

Vi和Vim编辑器

20200824202314177

退出编辑器:

  • :w 将缓冲区写入文件,即保存修改
  • :wq 保存修改并退出
  • :x 保存修改并退出
  • :q 退出,如果对缓冲区进行过修改,则会提示
  • :q! 强制退出,放弃修改

部分常用快捷键:

  • 拷贝当前行 yy, 拷贝当前行向下的5行 5yy, 粘贴 p
  • 删除当前行 dd , 删除当前行向下的5行 5dd
  • 查找,命令行下 /关键字,回车查找,再输入n查找下一个
  • 设置文件的行号 :set nu,取消文件的行号 :set nonu
  • 使用快捷键到底文档的最末行 G, 最首行 gg
  • 撤销 u
  • 将光标移动到指定行 行数+shift+g

更多常用快捷键

用户与组

QQ截图20201109103544

  • 用户至少要属于一个组

用户和组的相关文件:

  • /etc/passwd 文件——用户(user)的配置文件,记录用户的各种信息
    每行的含义:用户名:口令:用户标识号:组标识号:注释性描述:主目录:登录Shell
  • /etc/shadow 文件——口令的配置文件
    每行的含义:登录名:加密口令:最后一次修改时间:最小时间间隔:最大时间间隔:警告时间:不活动时间:失效时间:保留
  • /etc/group 文件——组(group)的配置文件,记录Linux包含的组的信息
    每行的含义:组名:口令:组标识号:组内用户列表(一般是看不到的)

运行级别

QQ截图20201109145201

常用的运行级别是3和5。在主界面下的运行级别就是5,用Xshell等远程连接工具登录就是3。如果要修改默认的运行级别,可通过vim来修改/ect/inittab文件中的 id:5:initdefault: 这一行中的数字。或者直接在终端的命令行输入:init 5。

找回root密码

启动时->快速输入 enter->输入 e-> 进入到编辑界面-> 选择中间有 kernel 项->输入 e(edit)-> 在该行的最后写入 1 [表示修改内核,临时生效]-> 输入 enter->输入 b [boot]-> 进入到单用模式,即可直接设置root新密码。

前提:必须在操作系统所在电脑中操作,远程登陆不行。

常用指令

帮助指令

man [命令或者配置文件]

help [命令]

文件目录类指令

pwd

该命令行的意思就是print working directory,显示当前工作目录的绝对路径。

ls [选项] 显示当前目录下的文件和目录

选项:

  • -a :显示当前目录所有的文件和目录,包括隐藏的 (文件名以.开头就是隐藏,默认是不显示的)
  • -l : 以列表的方式显示信息
  • -h : 显示文件大小时,以 k , m, G 单位显示

touch [文件名] [文件名] ……

创建一个或者多个空文件,如果文件存在,则刷新文件的修改时间

rm -rf [空目录或者非空目录]

删除空或者非空目录,其中选项r表示文件与子目录全部删除,f表示全部删除,不需要询问

cat [选项 -n表示显示行号] 要查看的文件

以只读形式打开文件

为浏览方便,带上管道命令| more

说明:
如果需要一行行,输入 enter;
如果需要翻页,输入空格键;
如果需要退出,输入 q。

more [文件名]

基于vi编辑器的文本过滤器,以全屏幕的方式按页显示文本文件的内容。

说明:
空格键 代表向下翻一页;
enter 代表向下翻一行;
q 代表立刻离开 more ,不再显示该文件内容;
ctrl+F 表示向下滚动一屏;
ctrl+B 表示返回上一屏;
= 输出当前行的行号;
:f 输出文件名和当前行的行号

less [文件名]

和more的功能类似,但不是一次性将整个文件加载进来再显示,而是根据需要再显示,看大型的日志文件一般推荐less。

说明:
空格键、[pagedown] 代表向下翻一页;
[pageup] 代表向上翻一页;
enter 代表向下翻一行;
/[字符串] 代表向下搜寻[字符串] n:向下查找 N:向上查找;
?[字符串] 代表向上搜寻[字符串] n:向上查找 N:向下查找;
q 离开less这个程序;

>与>>

>:输出重定向指令 (会将原来的文件的内容跟覆盖)

>> :追加指令 (不会覆盖原来文件的内容,而是追加到文件的尾部)

[命令] >/>> 文件:就是把前面指令在终端里显示的内容写入到后面的文件中,若文件名不存在则创建该文件。

示例:

  • ls -l >sharm.txt (功能描述:列表的内容写入文件sharm.txt中(覆盖写))
  • ls -l >>sharm.txt (功能描述:列表的内容追加到文件sharm.txt的末尾)

echo $PATH

输出当前的环境变量

head [-n 行数] [文件]

用于显示文件的开头部分内容,默认情况显示文件的前10行内容

tail [-n 行数] [文件]

用于输出文件中尾部的内容,默认情况显示文件的后10行内容

  • tail -f 文件(功能描述:实时追踪该文档的所有更新,命令需要一直运行着,工作经常用

ln -s [原文件或目录] [软链接名]

给原文件创建一个软链接,软链接也成为符号链接,类似于windows 里的快捷方式,主要存放了链接其他文件的路径,当使用pwd查看目录时,仍然看到的是软链接所在目录。

history

查看已经执行过得历史命令,也可以执行历史命令

history 个数n:显示最近使用过的n个指令

!编号:在已经输入history的前提下,执行对应历史编号的指令

搜索查找类

find [搜索范围] [选项] [文件]

find指令是将从指定目录向下递归地遍历其各个子目录,将满足条件的文件或者目录显示在终端。

20200825100316937

  • -size +n大于/-n小于/n等于

locate [文件名]

locate指令可以快速定位文件路径。locate指令利用事先建立的系统中所有文件名称及路径的locate数据库实现快速定位给定的文件。Locate指令无需遍历整个文件系统,查询速度较快。为了保证查询结果的准确度,管理员必须定期更新locate时刻。由于locate指令基于数据库进行查询,所以第一次运行前,必须使用updatedb指令创建locate数据库。

grep 与管道符“|”

grep:过滤查找,grep [选项] 查找内容 源文件

grep的选项:
-n 显示匹配行及行号;
-i 忽略字母大小写;

|:将前一命令的结果传到后一命令上

示例:

  • grep -n if /home/hello.txt
  • cat /home/hello.txt |grep -n if
  • 两者的作用相同,均是在hello.txt文件中找到if的行号,就像英文中的主动与被动语法

压缩和解压类

gzip与gunzip(会删除原文件)

gzip为压缩文件命令,只能将文件压缩为*.gz文件(不能压缩文件夹)

gunzip为解压文件命令

zip与unzip

可以压缩/解压缩文件&文件夹

zip [选项] xxx.zip 待压缩的内容

选项:

-r 递归压缩,即压缩目录

unzip [选项] 解压后存放的目录 xxx.zip

选项:

-d 指定压缩后文件的存放目录

示例:

  • zip -r nn.zip /home/temp/ 将/home目录下的temp文件夹压缩成名为nn.zip的文件,同时保留原文件,注意,要写全,如/home/temp/
  • unzip -d /home/haha nn.zip 将nn.zip文件解压到/home/haha中,如果没有该目录,则自动创建该目录

tar

tar是打包指令,最后打包后的文件是 .tar.gz 的文件。该命令可以压缩,也可以解压缩

2020082510084565

示例:

  • tar -zcvf a.tar.gz haha.txt mimi.txt 将haha.txt和mimi.txt合并打包为a.tar.gz文件
  • tar -zcvf myhome.tar.gz /home/ 将/home文件夹下的所有东西打包成一个myhome.tar.gz文件
  • tar -zxvf a.tar.gz 将z.tar.gz压缩文件解压到该原目录下
  • tar -zxvf a.tar.gz -C /opt/tmp 将a.tar.gz压缩文件解压到/opt/tmp文件夹下,该文件夹需要事先创建

文件权限管理

每个文件的权限概念:

  • 所有者
  • 所在组
  • 其他组

修改文件所有者:chown 用户名 文件名

修改文件所在组:chgrp 组名 文件名

同时修改所有者和所在组:chown 用户名:组名 文件名

参数-R:对目录使其下所有子文件或目录递归生效

ls -alh查看文件信息:

1
-rwxrw-r-- 1 root police 1213 Feb 2 09:39 abc.txt
  • 第0位确定文件类型,其中-:普通文件;d:目录;l:连接文件;c:字符设备文件[键盘,鼠标];b:块设备文件[硬盘]
  • 第1-3位确定所有者(该文件的所有者)拥有该文件的权限(r:读权限;w:写权限;x:执行权限)
  • 第4-6位确定所属组(同用户组的)拥有该文件的权限
  • 第7-9位确定其他用户拥有该文件的权限
  • 1:如果是文件,表示硬链接的数目(一般都是1);如果是目录,则表示有多少个子目录
  • root表示所有者名称
  • police表示所属组名称
  • 1213:表示文件存储的大小,如果是目录,则统一为4096
  • Feb 2 09:39表示文件最后的修改时间

rwx权限详情

  • rwx作用到文件

    • [r]代表可读(read):可以读取,查看
    • [w]代表可写(write):可以修改,但是不代表可以删除该文件,删除一个文件的前提条件是对该文件所在的目录有写权限,才能删除该文件
    • [x]代表可执行(execute):可以被执行
  • rwx作用到目录

    • [r]代表可读(read):可以读取,ls查看目录内容
    • [w]代表可写(write):可以修改,目录内创建+删除+重命名目录
    • [x]代表可执行(execute):可以进入该目录

修改文件权限:chmod

  • 通过+、-、=变更权限(**u:所有者 g:所有组 o:其他人 a:所有人(u,g,o的总和)**)

    • chmod u=rwx,g=rx,o=x 文件/目录 :给所有者rwx, 给所在组的用户rx, 给其他人x
    • chmod o+w 文件/目录 :给其它用户增加w的权限
    • chmod a-x文件/目录:表示:给所有用户去掉x权限
  • 通过数字变更权限(r=4 w=2 x=1 rwx=4+2+1=7

    • chmod u=rwx,g=rx,o=x 文件/目录&chmod 751 文件/目录 两者的功能是相同的

任务调度

需要自动执行某一个脚本(代码):需要任务调度

任务调度的两种方式:
1)直接通过命令行来调度
2)通过调用脚本来调度
本质上两者是相同的,只不过当内容太多时,放在脚本中比较方便。

命令:crontab [选项]

参数:

  • -e 编辑crontab定时任务
  • -l 查询crontab任务
  • -r 删除当前用户所有的crontab任务

调度任务格式:占位符(可含参数)+待执行命令

5个占位符说明(记得每个占位符之间要空格):

QQ截图20201208023744

特殊符号作为参数:

  • 星号 * :代表任何时间。比如第一个“*”代表一小时中每分钟都执行一次的意思。
  • 逗号,:代表不连续的时间。比如“0 8,12,16 * * * 命令”,就代表在每天的8点0分,12点0分,16点0分都执行一次命令。
  • 杠号 - :代表连续的时间范围。比如“0 5 * * 1-6命令”,代表在周一到周六的凌晨5点0分执行命令。
  • */n: 代表每隔多久执行一次。比如“*/10 * * * * 命令”,代表每隔10分钟就执行一遍命令。

注意:星期几和几号最好不要同时出现,因为它们定义的都是天,非常容易让管理员混乱。

service crond restart:重启任务调度

磁盘分区与挂载

分区的方式

mbr分区:

  • 最多支持四个主分区
  • 系统只能安装在主分区
  • 扩展分区要占一个主分区
  • MBR最大只支持2TB,但拥有最好的兼容性

gpt分区(✔):

  • 支持无限多个主分区(但操作系统可能限制,比如windows下最多128个分区)
  • 最大支持18EB的大容量(1EB=1024PB,1PB=1024TB)
  • windows7 64位以后支持gtp

Linux与Windows分区的区别

Windows:

img

Linux:

  • 对Linux来说无论有几个分区,分给哪一目录使用,它归根结底就只有一个根目录,一个独立且唯一的文件结构,Linux中每个分区都是用来组成整个文件系统的一部分。
  • Linux采用了一种叫“载入(mount)”的处理方法,它的整个文件系统中包含了一整套的文件和目录,且将一个分区和一个目录联系起来。这时要载入的一个分区将使它的存储空间在一个目录下获得。

Linux下磁盘的说明

Linux硬盘分IDE硬盘和SCSI硬盘,目前基本上是SCSI硬盘。

  • 对于IDE硬盘,驱动器标识符为“hdx”,其中“hd”表明分区所在设备的类型,这里是指IDE硬盘了。“x”为盘号(a为基本盘,b为基本从属盘,c为辅助主盘,d为辅助从属盘),“~”代表分区,前四个分区用数字1到4表示,它们是主分区或扩展分区,从5开始就是逻辑分区。例:hda3表示为第一个IDE硬盘上的第三个主分区或扩展分区,hdb2表示为第二个IDE硬盘上的第二个主分区或扩展分区。
  • 对于SCSI硬盘则标识为“sdx~”,SCSI硬盘是用“sd”来表示分区所在设备的类型的,其余则和IDE硬盘的表示方法一样。sdb1 [表示第2块scsi 硬盘的第1个分区]

列出所有可用块设备的信息并且显示它们之间的依赖关系的指令:lsblk -f

记:老师不离开

硬盘分区:fdisk /dev/sdb
选项:
m 显示命令列表
p 显示磁盘分区 同 fdisk –l
n 新增分区
d 删除分区
w 写入并退出
(示例说明:开始分区后输入n,新增分区,然后选择p,分区类型为主分区。两次回车默认剩余全部空间。最后输入w写入分区并退出,若不保存退出输入q)

格式化分区:mdfs -t ext4 /dev/sdb1 [把 /dev/sdb1 分区格式化为ext4这种类型]

挂载:mount /dev/sdb1 /home/newdisk [注:挂载时(包括卸载umount时),当前目录不要在/home/newdisk ]

实现永久挂载,需要配置Linux的分区表,实现启动时,自动挂载:vim /etc/fstab,加入一行:

1
/dev/sdb1	/home/newdisk	ext4	defaults	0 0

添加后执行mount -a立即生效。

查询系统整体磁盘使用情况:df -h

查询指定目录的磁盘占用情况(默认为当前目录):du -h 目录
其他参数:
-s 指定目录占用大小汇总
-h 带计量单位
-a 含文件
–max-depth=1 子目录深度
-c 列出明细的同时,增加汇总值

实例:

统计/home 文件夹下文件的个数:ls –l /home/ | grep “^-” | wc -l
统计/home 文件夹下目录的个数:ls –l /home/ | grep “^d” | wc -l
统计/home 文件夹下文件的个数,包括子文件夹里的:ls –lR /home/ | grep “^-” | wc -l
统计/home 文件夹下目录的个数,包括子文件夹里的:ls –lR /home/ | grep “^d” | wc -l
以树状显示目录结构:tree

Linux网络配置

配置固定的IP地址

vim /etc/sysconfig/network-scripts/ifcfg-eth0

1
2
3
4
5
ONBOOT=yes
BOOTPROTO=static #以静态方式获取ip
IPADDR=192.168.184.130 #设置ip地址
GATEWAY=192.168.184.2 #网关
DNS1=192.168.184.2 #DNS和网关保持一致即可

保存后重启网络生效:service network restart

修改主机名

查看当前主机名:hostname

修改Linux主机名:vim /etc/hostname,在文件里直接写入名字

添加ip与主机的映射:vim /etc/hosts,加入一行:

1
ip地址	主机名

进程管理

概念

  1. 在Linux中,每个执行的程序(代码)都称为一个进程,每一个进程都分配一个ID号。
  2. 每一个进程,都会对应一个父进程,而这个父进程可以复制多个子进程。
  3. 每个进程都可能以两种方式存在的:前台与后台。所谓前台进程就是用户目前的屏幕上可以进行操作的。后台进程则是实际在操作,但由于屏幕上无法看到的进程,通常使用后台方式执行。
  4. 一般系统的服务都是以后台进程的方式存在,而且都会常驻在系统中,直到关机才才结束。

查看进程

ps -aux
-a: 显示当前终端的所有进程信息
-u: 以用户的格式显示进程信息
-x: 显示后台进程运行的参数

1
2
3
4
5
6
7
8
9
10
11
USER:用户名
PID:进程ID
%CPU:占用CPU的百分比
%MEM:占用物理内存的百分比
VSZ:占用的虚拟内存大小(KB)
RSS:占用的物理内存大小(KB)
TTY:使用终端
STAT:进程的状态(S-睡眠,s-表示该进程是会话的先导进程,N-表示进程拥有比普通优先级更低的优先级,R-正在运行,D-短期等待,Z-僵死进程,T-被跟踪或者被停止等等)
START:进程的启动时间
TIME:进程使用CPU的总时间
COMMAND:启动进程所用的命令和参数,如果过长会被截断显示,或者命令ps -ef 以全格式显示当前所有的进程

查找是否有某个进程:ps -aux | grep xxx

以全格式显示当前所有的进程:ps -ef (PPID可查看父进程;C为CPU用于计算执行优先级的因子,数值越大表明进程是CPU密集型运算,优先级降低,数值越小表明进程是I/O密集型运算,优先级提高)

终止进程

kill [选项] 进程号:通过进程号杀死进程,常用选项:-9,表示强制终止

killall 进程名称:通过进程名称杀死进程,也支持通配符,这在系统因负载过大而变得很慢时很有用

进程树

pstree:以树状图的形式来显示进程

选项:
-p :显示进程的PID
-u :显示进程的所属用户

服务管理

服务(service)本质就是进程,但是运行在后台的,通常都会监听某个端口,等待其它程序的请求,比如(mysql,sshd,防火墙等),因此又称为守护进程。

service管理指令:systemctl 服务名 [start|stop|restart|reload|status]

监听某个端口是否在运行中:telnet ip [端口]

查看服务名

方式1:setup进入系统服务
方式2:ls -l /etc/init.d/列出服务列表

运行级别

查看或者修改默认级别: vim /etc/inittab
Linux系统有7种运行级别(runlevel):常用的是级别3和5

  • 运行级别0:系统停机状态,系统默认运行级别不能设为0,否则不能正常启动
  • 运行级别1:单用户工作状态,root权限,用于系统维护,禁止远程登陆
  • 运行级别2:多用户状态(没有NFS),不支持网络
  • 运行级别3:完全的多用户状态(有NFS),登陆后进入控制台命令行模式
  • 运行级别4:系统未使用,保留
  • 运行级别5:X11控制台,登陆后进入图形GUI模式
  • 运行级别6:系统正常关闭并重启,默认运行级别不能设为6,否则不能正常启动

服务自启动

查看服务:chkconfig --list | grep xxx(用grep筛选想要的)

通过服务名查看:chkconfig xxx --list

修改服务在某个级别下自启动:chkconfig --level 5 xxx on/off

若要在所有级别下都修改某个服务的自启动,不加level这个词:chkconfig xxx on/off

设计好之后,一定要reboot

监控服务

top

选项:
-d 秒数:指定top命令每隔几秒更新,默认是3秒。
-i:使top不显示任何闲置或者僵死进程。
-p:通过指定监控进程ID来仅仅监控某个进程的状态。

在这里插入图片描述

进入交互式模式后的操作:
P:以CPU使用率排序,默认为此
M:以内存的使用率排序
N:以PID排序
q:退出top
u:再输入用户名,监视特定用户
k:再输入进程ID号,终止指定的进程

监控网络服务

netstat

选项:
-an 按一定顺序排列输出
-p 显示哪个进程在调用

RPM包&YUM管理

RPM包

概念

一种用于互联网下载包的打包及安装工具,包含在某些Linux 分发版中,生成具有.RPM 扩展名的文件。RPM是RedHat Package Manage(r RedHat软件包管理工具)的缩写,类似windows的setup.exe,这一文件格式名称虽然打上了RedHat的标志,但理念是通用的。Linux的分发版本(suse,redhat,centos等等)都有采用,可以算是公认的行业标准了。

查询

  • rpm -qa 查询所安装的所有rpm软件包
  • rpm -qa | grep xxx 查询具体某一个软件包
  • rpm -q 软件包名 查询该软件包是否安装
  • rpm -qi 软件包名 查询该软件包的信息
  • rpm -ql 软件包名 查询该软件安装后形成了哪些文件,这些文件放在哪些文件
  • rpm -qf 文件全路径名 查询某个文件属于哪个rpm包

RPM包名称基本格式

一个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 -e 软件包名 卸载软件包
  • rpm -e --nodeps 软件包名 强制删除

安装软件包

rpm -ivh RPM包全路径名称

参数说明:

  • i=install 安装
  • v=verbose 提示
  • h=hash 进度条

YUM

yum是一个Shell软件包管理器,基于RPM包管理,能够从指定的服务器自动下载RPM包并且安装,可以自动处理依赖性关系,并且一次安装所有依赖的软件包。

yum的基本指令:

  • yum list|grep xx软件列表 查询yum服务器是否有需要安装的软件
  • yum install xxx 安装指定的yum包(默认会安装最新版本的软件)

面试题

  • 写出6个Linux常用命令:netstat, top, lsblk, find, ps, chkconfig

  • 查看内存:top

  • 磁盘存储:df -lh

  • IO读写:iotop

  • 端口占用:netstat -tunlp

  • 进程:ps -aux | grep xxx