系统学习Linux笔记
笔记中命令在无特殊说明情况下以CentOS 7为准
(参考视频:https://www.bilibili.com/video/BV1WY4y1H7d3?p=1)
一、基础篇
1.1 Linux文件系统目录结构
- /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。
1.2 文件基本属性
1.2.1 基本属性
在 Linux 中第一个字符代表这个文件是目录、文件或链接文件等等。
- 当为 d 则是目录
- 当为 - 则是文件;
- 若是 l 则表示为链接文档(link file);
- 若是 b 则表示为装置文件里面的可供储存的接口设备(可随机存取装置);
- 若是 c 则表示为装置文件里面的串行端口设备,例如键盘、鼠标(一次性读取装置)。
接下来的字符中,以三个为一组,且均为 rwx 的三个参数的组合。其中, r 代表可读(read)、 w 代表可写(write)、 x 代表可执行(execute)。 要注意的是,这三个权限的位置不会改变,如果没有权限,就会出现减号 - 。
每个文件的属性由左边第一部分的 10 个字符来确定(如下图)。
从左至右用 0-9 这些数字来表示。
第 0 位确定文件类型,第 1-3 位确定属主(该文件的所有者)拥有该文件的权限。第4-6位确定属组(所有者的同组用户)拥有该文件的权限,第7-9位确定其他用户拥有该文件的权限。
其中,第 1、4、7 位表示读权限,如果用 r 字符表示,则有读权限,如果用 - 字符表示,则没有读权限;
第 2、5、8 位表示写权限,如果用 w 字符表示,则有写权限,如果用 - 字符表示没有写权限;第 3、6、9 位表示可执行权限,如果用 x 字符表示,则有执行权限,如果用 - 字符表示,则没有执行权限。
1.2.2 Linux文件属主和属组
1、chgrp:更改文件属组
语法:
chgrp [-R] 属组名 文件名
参数选项
- -R:递归更改文件属组,就是在更改某个目录文件的属组时,如果加上-R的参数,那么该目录下的所有文件的属组都会更改。
2、chown:更改文件属主,也可以同时更改文件属组
语法:
chown [–R] 属主名 文件名 chown [-R] 属主名:属组名 文件名
进入 /root 目录(~)将install.log的拥有者改为bin这个账号:
[root@www ~] cd ~
[root@www ~]# chown bin install.log
[root@www ~]# ls -l
- rw-r--r-- 1 bin users 68495 Jun 25 08:53 install.log
将install.log的拥有者与群组改回为root:
[root@www ~]# chown root:root install.log
[root@www ~]# ls -l
- rw-r--r-- 1 root root 68495 Jun 25 08:53 install.log
3、chmod:更改文件9个属性
Linux文件属性有两种设置方法,一种是数字,一种是符号。
Linux 文件的基本权限就有九个,分别是 owner/group/others(拥有者/组/其他) 三种身份各有自己的 read/write/execute 权限。
先复习一下刚刚上面提到的数据:文件的权限字符为: -rwxrwxrwx , 这九个权限是三个三个一组的!其中,我们可以使用数字来代表各个权限,各权限的分数对照表如下:
- r:4
- w:2
- x:1
每种身份(owner/group/others)各自的三个权限(r/w/x)分数是需要累加的,例如当权限为: -rwxrwx--- 分数则是:
- owner = rwx = 4+2+1 = 7
- group = rwx = 4+2+1 = 7
- others= --- = 0+0+0 = 0
所以等一下我们设定权限的变更时,该文件的权限数字就是 770。变更权限的指令 chmod 的语法是这样的:
chmod [-R] xyz 文件或目录
选项与参数:
- xyz : 就是刚刚提到的数字类型的权限属性,为 rwx 属性数值的相加。
- -R : 进行递归(recursive)的持续变更,以及连同次目录下的所有文件都会变更
举例来说,如果要将 .bashrc 这个文件所有的权限都设定启用,那么命令如下:
[root@www ~]# ls -al .bashrc
- rw-r--r-- 1 root root 395 Jul 4 11:45 .bashrc
[root@www ~]# chmod 777 .bashrc
[root@www ~]# ls -al .bashrc
- rwxrwxrwx 1 root root 395 Jul 4 11:45 .bashrc
那如果要将权限变成 -rwxr-xr-- 呢?那么权限的分数就成为 [4+2+1][4+0+1][4+0+0]=754。
4、符号类型改变文件权限
还有一个改变权限的方法,从之前的介绍中我们可以发现,基本上就九个权限分别是:
- user:用户
- group:组
- others:其他
那么我们就可以使用 u, g, o 来代表三种身份的权限。
此外, a 则代表 all,即全部的身份。读写的权限可以写成 r, w, x,也就是可以使用下表的方式来看:
chmod | u g o a | +(加入) -(除去) =(设定) | r w x | 文件或目录 |
如果我们需要将文件权限设置为 -rwxr-xr-- ,可以使用 chmod u=rwx,g=rx,o=r 文件名 来设定:
# touch test1 // 创建 test1 文件
\# ls -al test1 // 查看 test1 默认权限
- rw-r--r-- 1 root root 0 Nov 15 10:32 test1
\# chmod u=rwx,g=rx,o=r test1 // 修改 test1 权限
\# ls -al test1
- rwxr-xr-- 1 root root 0 Nov 15 10:32 test1
而如果是要将权限去掉而不改变其他已存在的权限呢?例如要拿掉全部人的可执行权限,则:
# chmod a-x test1
\# ls -al test1
- rw-r--r-- 1 root root 0 Nov 15 10:32 test1
1.3 vim文本编辑
1.3.1 vim的三种模式
基本上 vi/vim 共分为三种模式,分别是命令模式、编辑模式和一般模式
1.3.2 vim快捷命令
参考外部网站:https://www.runoob.com/linux/linux-vim.html
1.4 网络配置
1.4.1 VMware的三种网络连接模式
桥接模式:虚拟机直接连接外部网络(对外部网络可见),主机起到网桥的作用,虚拟机的地位和主机相同,从路由器分配独立的IP地址。
NAT模式:主机和虚拟机构建一个专用网络,使用NAT对虚拟机进行IP转换(虚拟机对外部网络不可见)。此时虚拟机单独组成一个局域网,此时主机和虚拟机并不在一个网段,无法进行通信,所以又虚拟一个网卡(VMnet8)来连接至虚拟机所在的局域网。
仅主机模式:这种模式仅仅只让虚拟机与主机通信,不连接至Internet
1.4.2 配置静态IP
参考博客文章:在虚拟机中设置静态IP(centos为例)
1.4.3 配置主机名
hostname #查看当前主机名
vim /etc/hostname #修改主机名
#修改后重启即可显示新主机名
#方法二
hostnamectl set-hostname ...
#实时生效
#修改hosts文件
vim /etc/hosts
1.5 系统管理
1.5.1 service 服务管理
一个正在执行的程序或命令,称为“进程”
启动后一直存在、常驻内存的进程,一般称为“服务”
systemctl start|stop|restart|status servicename #基本语法
/usr/lib/systemd/system/ #服务所在目录
¶1.5.2 系统的运行级别
¶1. CentOS 7的运行级别简化为:
multi-user.target == 原运行级别3(多用户有网,无GUI)
garphical.target == 原运行级别5(多用户有网,有GUI)
¶2. 查看当前默认运行级别
1 | systemctl get-default |
¶3. 切换运行级别
1 | init 3 //switch runlevel 3 |
¶1.5.3 配置服务开机自启
¶1. CentOS 7之前
1 | chkconfig --list //Centos 7之前查看自启服务(SysV) |
¶2. CentOS 7之后
1 | systemctl list-unit-files //查看开机自启服务 |
¶3.练习_设置防火墙
1 | systemctl status firewalld.service //CentOS 7之前防火墙为iptables |
¶1.5.4 关机重启
选项 | 功能 |
-H | 相当于--halt,停机 |
-r | shurdown -r == reboot 重启 |
参数 | 功能 |
now | 立刻执行 |
时间 | 多少时间后执行(单位是分钟) |
¶二、实操篇
¶2.1 帮助命令
¶1. 基本语法
1 | man [命令或配置文件] //获取帮助信息(全) |
¶2. 内置命令和外部命令
-
Linux中命令分为内置命令(cd、exit等),外部命令(ls)。直接使用man查询内置命令会显示Bash(内置命令内嵌在Bash中),查询内置命令时可以使用
man -f [命令]
-
便捷查询:
- 内置命令:
help [命令]
(help只能查询内置命令) - 外置命令:
[命令] --help
- 内置命令:
¶3. 常用快捷键
快捷键 | 功能 |
---|---|
ctrl+c | 停止进程 |
ctrl+l | 清屏,等同于clear |
↑,↓ | 查询执行过的命令 |
tab | 补全命令或文件名 |
¶2.2 常用基本命令——文件目录类
1. pwd: 显示当前工作目录的绝对路径
1 | [hiyoung@VM-4-10-centos ~]$ pwd |
2. cd: 切换路径
1 | #使用绝对路径切换 |