大数据学习笔记——Linux相关操作
参考教程
B站视频:尚硅谷大数据Linux教程(大数据linux开发)
Linux的文件目录结构
在Linux的世界里,一切皆文件。
/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编辑器
退出编辑器:
- :w 将缓冲区写入文件,即保存修改
- :wq 保存修改并退出
- :x 保存修改并退出
- :q 退出,如果对缓冲区进行过修改,则会提示
- :q! 强制退出,放弃修改
部分常用快捷键:
- 拷贝当前行 yy, 拷贝当前行向下的5行 5yy, 粘贴 p
- 删除当前行 dd , 删除当前行向下的5行 5dd
- 查找,命令行下 /关键字,回车查找,再输入n查找下一个
- 设置文件的行号 :set nu,取消文件的行号 :set nonu
- 使用快捷键到底文档的最末行 G, 最首行 gg
- 撤销 u
- 将光标移动到指定行 行数+shift+g
用户与组
- 用户至少要属于一个组
用户和组的相关文件:
- /etc/passwd 文件——用户(user)的配置文件,记录用户的各种信息
每行的含义:用户名:口令:用户标识号:组标识号:注释性描述:主目录:登录Shell - /etc/shadow 文件——口令的配置文件
每行的含义:登录名:加密口令:最后一次修改时间:最小时间间隔:最大时间间隔:警告时间:不活动时间:失效时间:保留 - /etc/group 文件——组(group)的配置文件,记录Linux包含的组的信息
每行的含义:组名:口令:组标识号:组内用户列表(一般是看不到的)
运行级别
常用的运行级别是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指令是将从指定目录向下递归地遍历其各个子目录,将满足条件的文件或者目录显示在终端。
- -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 的文件。该命令可以压缩,也可以解压缩
示例:
- 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, 给其他人xchmod 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个占位符说明(记得每个占位符之间要空格):
特殊符号作为参数:
- 星号 * :代表任何时间。比如第一个“*”代表一小时中每分钟都执行一次的意思。
- 逗号,:代表不连续的时间。比如“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:
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 | ONBOOT=yes |
保存后重启网络生效:service network restart
修改主机名
查看当前主机名:hostname
修改Linux主机名:vim /etc/hostname
,在文件里直接写入名字
添加ip与主机的映射:vim /etc/hosts
,加入一行:
1 | ip地址 主机名 |
进程管理
概念
- 在Linux中,每个执行的程序(代码)都称为一个进程,每一个进程都分配一个ID号。
- 每一个进程,都会对应一个父进程,而这个父进程可以复制多个子进程。
- 每个进程都可能以两种方式存在的:前台与后台。所谓前台进程就是用户目前的屏幕上可以进行操作的。后台进程则是实际在操作,但由于屏幕上无法看到的进程,通常使用后台方式执行。
- 一般系统的服务都是以后台进程的方式存在,而且都会常驻在系统中,直到关机才才结束。
查看进程
ps -aux
:
-a: 显示当前终端的所有进程信息
-u: 以用户的格式显示进程信息
-x: 显示后台进程运行的参数
1 | USER:用户名 |
查找是否有某个进程: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
:退出topu
:再输入用户名,监视特定用户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