Linux基础知识学习笔记
Linux学习笔记
文章目录
- Linux学习笔记
- 前言
- 一、macOS下的Linux环境搭建
- 1.在docker中初始化CentOS
- 2.docker中CentOS的联网问题
- 二、Linux的目录结构
- 1.各个文件的含义
- 2.注意
- 3.总结
- 三、远程操作Linux
- 1.远程登录SSH
- 2.远程文件传输SFTP
- 四、Linux命令
- 1.vi和vim编辑器
- 正常模式
- 输入模式
- 命令行模式
- 2.开机,关机,重启,登录,注销
- 3.用户管理
- 4.用户组管理
- 5.用户管理的相关文件
- 五、Linux实用指令
- 1.指定运行级别
- 2.帮助指令
- 3.文件目录类指令
- 4.时间日期类指令
- 5.搜索查找类指令
- 6.压缩和解压指令
- 六、组管理和权限管理
- 1.Linux的组管理
- 2.权限管理
- 3.修改权限
- 通过chmod指令可以修改文件或者目录的权限
- 通过chown修改文件所有者
- 通过chgrp修改文件的所有组
- 七、Linux任务调度
- 1.crontab定时任务
- 八、Linux磁盘分区和挂载
- 1.基本分区方式
- 2.Linux分区
- 3.Linux新增一块硬盘
- 4.磁盘查询指令
- 九、Linux网络配置
- 1.指定固定ip
- 十、Linux进程管理
- 1.显示系统执行的进程
- 2.终止进程
- 3.后台服务管理
- 4.查看服务名
- 5.修改服务运行级别
- 6.动态监控进程
- 7.监控网络状态
- 十一、RPM和YUM
- 1.介绍
- 2.rpm包的管理
- 3.软件包管理器yum
- 后记
前言
第一次学习Linux,跟随B站韩顺平的Linux教程,这个文档作为记录
一、macOS下的Linux环境搭建
1.在docker中初始化CentOS
手头的MacBook内存不够,Linux也只是初步接触和学习,所以决定通过Docker搭建一个轻量化的Linux环境。
过程参考
Docker 安装 CentOS
以终端方式打开CentOS
docker run -i -t centos:6.8 /bin/bash
其中
-t: 在新容器内指定一个伪终端或终端。
-i: 允许你对容器内的标准输入 (STDIN) 进行交互。
/bin/bash:放在镜像名后的是命令,这里我们希望有个交互式 Shell,因此用的是 /bin/bash。
运行后我们可以使用
cat /proc/version
命令来查看Linux版本信息
2.docker中CentOS的联网问题
docker中的CentOS非常精简,需要下载网络方面的配置net-tools才能联网,但是centos6的默认源在2012年-12月左右被官方搞掉了,所以需要替换为阿里云Vault镜像
sed -i "s|enabled=1|enabled=0|g" /etc/yum/pluginconf.d/fastestmirror.conf
mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
curl -o /etc/yum.repos.d/CentOS-Base.repo https://www.xmpan.com/Centos-6-Vault-Aliyun.repo
接下来安装net-tools
yum -y install net-tools
然后安装iputils
yum install -y iputils
现在就可以愉快的开ping了
ping -c 10 www.qq.com
这里-c 10代表执行10次,不然要按ctrl+z停下来,结果如下
二、Linux的目录结构
Linux的目录是一个树状结构,在Linux中,一切皆文件。
1.各个文件的含义
- /bin:
bin 是 Binaries (二进制文件) 的缩写, 这个目录存放着最经常使用的命令。
- /boot:
这里存放的是启动 Linux 时使用的一些核心文件,包括一些连接文件以及镜像文件。
- /dev :
dev 是 Device(设备) 的缩写, 该目录下存放的是 Linux 的外部设备,在 Linux 中访问设备的方式和访问文件的方式是相同的。
- /etc:
etc 是 Etcetera(等等) 的缩写,这个目录用来存放所有的系统管理所需要的配置文件和子目录。
- /home:
用户的主目录,在 Linux 中,每个用户都有一个自己的目录,一般该目录名是以用户的账号命名的,如上图中的 alice、bob 和 eve。
- /lib:
lib 是 Library(库) 的缩写这个目录里存放着系统最基本的动态连接共享库,其作用类似于 Windows 里的 DLL 文件。几乎所有的应用程序都需要用到这些共享库。
- /lost+found:
这个目录一般情况下是空的,当系统非法关机后,这里就存放了一些文件。
- /media:
linux 系统会自动识别一些设备,例如U盘、光驱等等,当识别后,Linux 会把识别的设备挂载到这个目录下。
- /mnt:
系统提供该目录是为了让用户临时挂载别的文件系统的,我们可以将光驱挂载在 /mnt/ 上,然后进入该目录就可以查看光驱里的内容了。共享文件夹
- /opt:
opt 是 optional(可选) 的缩写,这是给主机额外安装软件所摆放的目录。比如你安装一个ORACLE数据库则就可以放到这个目录下。默认是空的。
- /proc:
proc 是 Processes(进程) 的缩写,/proc 是一种伪文件系统(也即虚拟文件系统),存储的是当前内核运行状态的一系列特殊文件,这个目录是一个虚拟的目录,它是系统内存的映射,我们可以通过直接访问这个目录来获取系统信息。
这个目录的内容不在硬盘上而是在内存里,我们也可以直接修改里面的某些文件,比如可以通过下面的命令来屏蔽主机的ping命令,使别人无法ping你的机器:
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all
- /root:
该目录为系统管理员,也称作超级权限者的用户主目录。
- /sbin:
s 就是 Super User 的意思,是 Superuser Binaries (超级用户的二进制文件) 的缩写,这里存放的是系统管理员使用的系统管理程序。
- /selinux:
这个目录是 Redhat/CentOS 所特有的目录,Selinux 是一个安全机制,类似于 windows 的防火墙,但是这套机制比较复杂,这个目录就是存放selinux相关的文件的。
- /srv:
该目录存放一些服务启动之后需要提取的数据。
- /sys:
这是 Linux2.6 内核的一个很大的变化。该目录下安装了 2.6 内核中新出现的一个文件系统 sysfs 。
sysfs 文件系统集成了下面3种文件系统的信息:针对进程信息的 proc 文件系统、针对设备的 devfs 文件系统以及针对伪终端的 devpts 文件系统。
该文件系统是内核设备树的一个直观反映。
当一个内核对象被创建的时候,对应的文件和目录也在内核对象子系统中被创建。
- /tmp:
tmp 是 temporary(临时) 的缩写这个目录是用来存放一些临时文件的。
- /usr:
usr 是 unix shared resources(共享资源) 的缩写,这是一个非常重要的目录,用户的很多应用程序和文件都放在这个目录下,类似于 windows 下的 program files 目录。
- /usr/bin:
系统用户使用的应用程序。
- /usr/sbin:
超级用户使用的比较高级的管理程序和系统守护程序。
- /usr/src:
内核源代码默认的放置目录。
- /var:
var 是 variable(变量) 的缩写,这个目录中存放着在不断扩充着的东西,我们习惯将那些经常被修改的目录放在这个目录下。包括各种日志文件。
- /run:
是一个临时文件系统,存储系统启动以来的信息。当系统重启时,这个目录下的文件应该被删掉或清除。如果你的系统上有 /var/run 目录,应该让它指向 run。
2.注意
在 Linux 系统中,有几个目录是比较重要的,平时需要注意不要误删除或者随意更改内部文件。
/etc: 上边也提到了,这个是系统中的配置文件,如果你更改了该目录下的某个文件可能会导致系统不能启动。
/bin, /sbin, /usr/bin, /usr/sbin: 这是系统预设的执行文件的放置目录,比如 ls 就是在 /bin/ls 目录下的。
值得提出的是,/bin, /usr/bin 是给系统用户使用的指令(除root外的通用户),而/sbin, /usr/sbin 则是给 root 使用的指令。
/var: 这是一个非常重要的目录,系统上跑了很多程序,那么每个程序都会有相应的日志产生,而这些日志就被记录到这个目录下,具体在 /var/log 目录下,另外 mail 的预设放置也是在这里。
3.总结
- Linux的目录中有且只有一个根目录“/”
- Linux的各个目录功能是预先规划好的,不要乱放乱动。
- Linux一切皆文件
三、远程操作Linux
Linux是部署在服务区上的系统,所以大部分操作都需要在本地远程操作,比如登录,文件传输。
到了这一步还是需要云服务器了,以下使用腾讯云。
1.远程登录SSH
Mac可以通过终端直接远程登录,不需要其他软件。
2.远程文件传输SFTP
可以看到还有sftp协议可以传文件,自己添加服务器地址和用户名后选择相应的协议链接,输入密码就行。
文件传输有sftp和scp两种方法,但scp有个弊端,每次执行指令需要输入服务器登陆密码重新连接服务器,频繁的文件操作就略显麻烦啦!幸运的是Mac自带还有另外一个文件上传、下载客户端SFTP,只要成功连接,后续就可以get、put进行文件下载、上传啦!
vim相关命令:
cd [dir], 将服务器的当前目录更改为[dir](change directory);
pwd, 查看服务器当前目录(Print Working Directory)
lpwd,查看本地当前目录(local Print Working Directory)
ls,列举服务器当前目录下的文件列表(list files)
lls: 列举本地当前目录文件列表
mkdir [dir], 服务器上当前目录下,新建目录[dir](make directory)
sftp专用命令:
put/get [dir],文件上传/下载
put -r 文件夹/. 上传文件夹 注意后面有一个点
get -r 文件夹/ 下载文件夹
四、Linux命令
1.vi和vim编辑器
Vim是从 vi 发展出来的一个文本编辑器。代码补完、编译及错误跳转等方便编程的功能特别丰富,在程序员中被广泛使用。
简单的来说, vi 是老式的字处理器,不过功能已经很齐全了,但是还是有可以进步的地方。 vim 则可以说是程序开发者的一项很好用的工具。
基本上 vi/vim 共分为三种模式,分别是命令模式(正常模式)(Command mode),输入模式(编辑模式)(Insert mode)和底线命令模式(命令行模式)(Last line mode)。
正常模式
用户刚刚启动 vi/vim,便进入了命令模式。
此状态下敲击键盘动作会被Vim识别为命令,而非输入字符。比如我们此时按下i,并不会输入一个字符,i被当作了一个命令。
以下是常用的几个命令:
i 切换到输入模式,以输入字符。
x 删除当前光标所在处的字符。
: 切换到底线命令模式,以在最底一行输入命令。
若想要编辑文本:启动Vim,进入了命令模式,按下i,切换到输入模式。
命令模式只有一些最基本的命令,因此仍要依靠底线命令模式输入更多命令。
输入模式
在命令模式下按下i就进入了输入模式。
在输入模式中,可以使用以下按键:
- 字符按键以及Shift组合,输入字符
- ENTER,回车键,换行
- BACK SPACE,退格键,删除光标前一个字符
- DEL,删除键,删除光标后一个字符
- 方向键,在文本中移动光标
- HOME/END,移动光标到行首/行尾
- Page Up/Page Down,上/下翻页
- Insert,切换光标为输入/替换模式,光标将变成竖线/下划线
- ESC,退出输入模式,切换到命令模式
命令行模式
在命令模式下按下:(英文冒号)就进入了底线命令模式。
底线命令模式可以输入单个或多个字符的命令,可用的命令非常多。
在底线命令模式中,基本的命令有(已经省略了冒号):
q 退出程序
w 保存文件
按ESC键可随时退出底线命令模式。
更多快捷键详情参考vim指令
2.开机,关机,重启,登录,注销
- shutdown -h now 立即关机
- shutdown -h 1 一分钟后关机
- shutdown -r now 立即重启
- halt 关机
- reboot 重启
- sync 把内存数据同步到磁盘上=>保存,随时保存好习惯
登录时尽量少用root账号,因为权限太高了怕误操作,因此最好用普通用户登录,再用su-用户名
(switch user)切换成系统管理员身份,从低权限用户切换到高权限用户需要密码,反之则不需要,返回原来的用户时,exit
- logout 注销用户
3.用户管理
Linux中的用户是按分组管理的,不同的组别有不同的权限等级,用户都在/home/组名/用户名
路径下
添加用户
- useradd [选项] 用户名
若不指定用户组,则建立一个和用户名同名的用户组 - useradd -d [登录目录] 用户名
这样就能指定登录时的起始目录 - useradd -g [用户组] 用户名
指定用户所属群组
指定密码
- passwd 用户名
删除用户
- userdel 用户名:删除用户,保留用户组
- userdel -r 用户名:删除用户和用户组(一般不用)
查询用户信息
- id 用户名
- whoami (查询自己的信息)
4.用户组管理
增加组
- groupadd 组名
删除组
- groupdel 组名
修改用户的组别
- usermod -g 组名 用户名
5.用户管理的相关文件
/etc/passwd文件:用户的配置文件,记录用户信息,每一条信息包含:
用户名,密码(已加密),用户ID,组ID,注释性描述,组目录,登录Shell
/etc/shadow文件:口令配置文件,记录加密过的密码
/etc/group文件:组配置文件,记录组信息,每一条包含:
组名,密码,组ID,组内用户列表
五、Linux实用指令
1.指定运行级别
Linux有7种运行级别:
0:关机
1:单用户【找回丢失密码】
2:多用户状态没有网络服务
3:多用户状态有网络服务
4:系统未使用保留给用户
5:图形界面
6:系统重启
常用运行级别是3和5,要修改默认的运行级别需要更改/etc/inittab文件的id:5:initdefault:这一行中的数字,使用命令:
init [0~6]
但是当前的腾讯云服务器的版本CentOS7已经不支持这样操作了,当你想打开/etc/inittab文件时,会得到如下结果
大意是inittab现在已经不适用了,你在里面修改系统级别也没用,现在查询当前系统级别用systemctl get-default
,修改当前系统级别用systemctl set-default TARGET.target
2.帮助指令
当我们对某个指令不熟悉时,有几种方法可以得到帮助
man获得帮助信息(manual的缩写)
- man [命令或配置文件]
help获得帮助信息:获得Shell内置命令的帮助信息
- help [命令]
Linux命令大全这东西它不香吗?
3.文件目录类指令
mkdir指令创建目录:(makd directory)
- mkdir [选项] 目录路径
选项-p:创建多级目录
rmdir指令删除目录:(remove directory)
- rmdir [选项] 目录路径
注意只能删除空目录,如果需要删除非空目录,需要使用rm -rf [目录路径]
touch指令创建空文件
- touch [文件名称]
copy指令拷贝文件到指定目录
- cp [选项] source dest
选项 -r :递归复制整个文件夹
注意:1.使用相对目录时,一定要注意当前所在的目录位置。2.再次复制时会发生覆盖,需要逐个确认,批量操作会很麻烦,若不想确认可以在cp前加\,代表强制覆盖。
rm指令删除文件或目录
- rm [选项] 文件或目录
选项-r:递归删除整个文件,-f:强制删除不提示
mv指令移动文件与目录或重命名
- mv 老文件名 新文件名:(重命名)
- mv 老路径 新路径:(移动文件)
cat指令查看文件内容:(只能看不能修改)
- cat [选项] 文件名
选项-n:显示行号
指令一般搭配 | more来分页显示
more指令按页查看文件
- more 文件名
打开后空格翻页,回车下一行,q离开
less指令分屏查看文件内容
- less 文件名
less比more更强大,支持各种显示终端,适合大文件,按需加载,效率更高
>输出重定向(覆盖)指令和>>追加指令
- ls -l >文件名 :(列表的内容覆盖写入文件中)
- ls -al >>文件名 :(列表的内容追加到文件的末尾)
- cat 文件1>文件2:将文件1覆盖到文件2
- echo “内容” >> 文件 :将内容追加到文件末尾
echo指令输出内容到控制台
- echo [选项] 输出内容
head指令显示文件开头内容
- head 文件:默认查看前10行
- head -n 5 文件:查看前5行
tail指令显示文件结尾内容
- tail 文件 :默认显示最后10行内容
- tail -n 5 文件:显示最后5行内容
- tail -f 文件:实时追踪这个文档的所有更新,用作监控
ln指令软链接:存放了链接其他文件的路径(类似于快捷方式)
- ln -s [源文件或目录] 软链接名称
history指令查看已执行过的历史指令
- history :显示所有的历史指令
- history 10:显示最后10条指令
- history 执行过后,再输入![num]就会执行第num条指令
4.时间日期类指令
date指令显示当前日期
- date:显示当前时间
- date "+%Y %m %d %H:%M:%S ":自定义显示
注意大小写和前面的➕号
date设置时间
- date -s “字符串时间”
cal命令显示日历
- cal :默认显示当前月的日历
- cal 2020: 显示2020全年的日历
5.搜索查找类指令
find指令:从指定目录向下递归子目录,查找满足条件的文件或目录显示在终端
- find [搜索范围] 选项
选项-name:按名称查找;-user:按用户查找;-size:按大小查找(+n大于,-n小于,n等于)
locate指令:快速定位文件路径
- loacte 文件名
locate指令基于数据库进行查询,所以第一次运行之前需要使用updatedb指令创建locate数据库,且管理员需要定期更新locate时刻。
CentOS7需要安装yum install mlocate
才能使用locate指令
grep指令和管道符号|:grep过滤查找,管道符表示将前一个指令的结果输出传递给后面的指令处理
- grep [选项] 查找内容 源文件
选项-n:显示匹配行和行号;-i:忽略字母大小写
一般搭配cat使用,先cat读取文件内容,再grep选择需要的内容
6.压缩和解压指令
gzip和gunzip指令
- gzip 文件:将文件压缩为.gz文件
- gunzip 文件.gz:解压.gz文件
注意:当使用gzip后,不会保留原文件
zip和unzip指令:更常用
- zip [选项] name.zip:压缩
- unzip [选项] name.zip:解压
选项-r:压缩目录;-d<目录>:解压后存放到指定目录
tar指令:打包文件,形成.tar.gz文件
- tar [选项] name.tar.gz 打包的内容
选项-c:产生.tar打包文件;-v:显示详细信息;-f:指定压缩后的文件名;-z:打包同时压缩;-x:解压.tar文件
六、组管理和权限管理
1.Linux的组管理
在Linux中的每个用户必须属于一个用户组,不能独立于组外。在Linux中每个文件都有所有者,所在组,其他组的概念 。
所有者:一般是文件的创建者
所在组:一般就是文件所有者的所在组
其他组:系统的其他用户都是文件的其他组
文件的组操作
- ls -ahl:查看文件的所有者和所在组
- chown 用户名 文件名:修改文件的所有者
- chgrp 组名 文件名:修改文件的所在组
用户的组操作
- usermod -g 组名 用户名:改变用户所在组
- usermod -d 目录名 用户名:改变用户登录的初始目录
2.权限管理
输入指令ls -l后显示当前目录下所有文件的详细属性
第0位确定文件类型:-:普通文件;d:目录 l:软链接 c:字符设备(键盘鼠标) b:块文件,硬盘
第1-3位确定所有者拥有的该文件或目录的权限:r读w写(文件不一定能删除,需要对文件所在的目录有权限才能对文件删除)x执行或可进入目录
第4-6位文件所在组的用户权限
第7-9位文件其他组的用户权限
第10位表示文件的硬链接个数或者子目录个数
第一个root用户名
第二个root组名
后面的数字表示文件大小(字节),文件夹大小4096字节
后面的日期表示最后修改时间
最后的是文件名
3.修改权限
通过chmod指令可以修改文件或者目录的权限
u:所有者;g:所有组;o:其他组 a:所有人
r=4,w=2,x=1,可以用数字和操作
- chmod u=rwx,g=rx o=x 文件目录名:编辑任意权限
- chmod o+w 文件目录名:给其他组新增写权限
- chmod a-x 文件目录名:给所有人取消执行权限
- chmod 640 文件名:所有者可以rw,所有组可以r,其他组没有权限
通过chown修改文件所有者
- chown 新拥有者 文件名
- chown 新拥有者:新组名 文件名:改变用户的所有者和所有组
参数-r目录递归生效
通过chgrp修改文件的所有组
- chgrp 新所有组 文件名
参数-r目录递归生效
七、Linux任务调度
1.crontab定时任务
- crontab 选项
选项-e:编辑定时任务;-l查询任务;-r删除当前用户所有的任务 - service crond restart:重启任务调度
简单任务编写
- 设置任务调度文件:etc/crontab
- 设置个人调度任务,执行crontab -e
- 输入任务到调度文件,比如*/1 * * * * ls -l /etc/ >> /tmp/to.txt,意思是每小时的每分钟都执行ls -l /etc/ >> /tmp/to.txt指令,其中几个星号的含义如下