前言
学过操作系统的人都知道,windows系统是单用户多线程OS,Linux是多用户多线程OS。正是优于Linux系统的优越性,可以满足多个用户 多个任务并发执行,服务器都采用的是Linux系统。南国不才,截止到写这篇博客为止,在这短暂的大数据学习中也算是对CentOS系统从一无所知到慢慢了解,本篇博客开始,南国就根据自己之前的学习经历,记录一下在Linux系统中学习中的知识点。这里的博客内容 大多是依据CentOS 7来写,如有和Ubuntu在某些地方不同,还请读者知道,以免引起不必要的误会。
1.Linux的文件目录结构
/ 根目录
├── bin 存放用户二进制文件
├── boot 存放内核引导配置文件
├── dev 存放设备文件
├── etc 存放系统配置文件
├── home 用户主目录
├── lib 动态共享库
├── lost+found 文件系统恢复时的恢复文件
├── media 可卸载存储介质挂载点
├── mnt 文件系统临时挂载点
├── opt 附加的应用程序包
├── proc 系统内存的映射目录,提供内核与进程信息
├── root root 用户主目录
├── sbin 存放系统二进制文件
├── srv 存放服务相关数据
├── sys sys 虚拟文件系统挂载点
├── tmp 存放临时文件
├── usr 存放用户应用程序
└── var 存放邮件、系统日志等变化文件
Linux 与其他类 UNIX 系统一样并不区分文件与目录:目录是记录了其他文件名的文件。使用命 令 mkdir 创建目录时,若期望创建的目录的名称与现有的文件名(或目录名)重复,则会创建失败。
2.常用的linux操作
快捷键:
1.Tab:命令和文件名补全;
2.Ctrl+C:中断正在运行的程序;
3.Ctrl+D:结束键盘输入(End Of File,EOF)
Linux查看系统的基本命令:
1.uname -a (查看Linux当前操作系统内核信息,操作系统位数)
2.getconf LONG_BIT(判断当前系统是32还是64位)
3.cat /proc/cpuinfo (Linux查看cpu相关信息,包括型号,主频,内核信息等)
4.CentOS查看系统版本:cat /etc/redhat-release
Ubuntu查看系统版本:lsb_release -a
5.CentOS7 防火墙 使用firewalld打开关闭防火墙
firewalld的基本使用
启动: systemctl start firewalld
关闭: systemctl stop firewalld
查看状态: systemctl status firewalld
开机禁用 : systemctl disable firewalld
开机启用 : systemctl enable firewalld
6.shutdown [-krhc] 时间 [信息]
-k : 不会关机,只是发送警告信息,通知所有在线的用户
-r : 将系统的服务停掉后就重新启动
-h : 将系统的服务停掉后就立即关机
-c : 取消已经在进行的 shutdown 指令内容
CentOS7中关机 还可以采用poweroff
7.who: 查看当前有没有其他用户在线
8.sudo:允许一般用户使用root执行的命令,不过只有在 /etc/sudoers 配置文件中添加的用户才能使用该指令。
vim三个模式
在CentOS系统中,也可用vi表示,一般而言 我们是使用例如:vi new.txt在当前文件路径下创建一个新文件。
它有三个模式:
- 一般指令模式(Command mode):VIM 的默认模式,可以用于移动游标查看内容;
- 编辑模式(Insert mode):按下 “i” 等按键之后进入,可以对文本进行编辑;
- 指令列模式(Bottom-line mode):按下 “:” 按键之后进入,用于保存退出等操作。
在指令列模式下,有以下命令用于离开或者保存文件。
命令 | 作用 |
---|---|
:w | 写入磁盘 |
:w! | 当文件为只读时,强制写入磁盘。到底能不能写入,与用户对该文件的权限有关 |
:q | 离开 |
:q! | 强制离开不保存 |
:wq | 写入磁盘后离开 |
:wq! | 强制写入磁盘后离开 |
3.文件
1.文件属性
用户分为三种:文件拥有者、群组以及其它人,对不同的用户有不同的文件权限。
使用ls命令可查看某个目录下的所有文件和文件子目录;ll命令看到文件的全部信息。如下图:
总用量 0
drwxr-xr-x. 2 xjh xjh 178 11月 14 2014 native
[xjh@msiPC lib]$ ls
native
对于ll显示出来的信息做如下解释:
drwxr-xr-x:文件类型以及权限,第 1 位为文件类型字段,后 9 位为文件权限字段
(2019.0809更新)
实例中,第一个属性用"d"表示。"d"在Linux中代表该文件是一个目录文件。
在Linux中第一个字符代表这个文件是目录、文件或链接文件等等。
- 当为[ d ]则是目录
- 当为[ - ]则是文件;
- 若是[ l ]则表示为链接文档(link file);
- 若是[ b ]则表示为装置文件里面的可供储存的接口设备(可随机存取装置);
- 若是[ c ]则表示为装置文件里面的串行端口设备,例如键盘、鼠标(一次性读取装置)。
接下来的字符中,以三个为一组,且均为『rwx』 的三个参数的组合。其中,[ r ]代表可读(read)、[ w ]代表可写(write)、[ x ]代表可执行(execute)。 要注意的是,这三个权限的位置不会改变,如果没有权限,就会出现减号[ - ]而已。
每个文件的属性由左边第一部分的10个字符来确定(如下图)。
所以,上图中的链接数
xjh:文件拥有者
xjh:所属群组
178:文件大小
14 2014:文件最后被修改的时间
native:文件名
2.文件与目录的基本操作
注意下面带有[]的内容 表示非必需,可以根据功能需要 增加或不增加
1. ls
列出文件或者目录的信息,目录的信息就是其中包含的文件。
ls [-aAdfFhilnrRSt] file|dir
-a :列出全部的文件
-d :仅列出目录本身
-l :以长数据串行列出,包含文件的属性与权限等等数据
2. cd
更换当前目录。
cd [相对路径或绝对路径]
3. mkdir
创建目录。
mkdir [-mp] 目录名称
-m :配置目录权限
-p :递归创建目录
4. rmdir
删除目录,目录必须为空。
rmdir [-p] 目录名称
-p :递归删除目录
5. touch
更新文件时间或者建立新文件。
touch [-acdmt] filename
-a : 更新 atime
-c : 更新 ctime,若该文件不存在则不建立新文件
-m : 更新 mtime
-d : 后面可以接更新日期而不使用当前日期,也可以使用 --date=“日期或时间”
-t : 后面可以接更新时间而不使用当前时间,格式为[YYYYMMDDhhmm]
6. cp
复制文件。
如果源文件有两个以上,则目的文件一定要是目录才行。
cp [-adfilprsu] source destination
-a :相当于 -dr --preserve=all 的意思,至于 dr 请参考下列说明
-d :若来源文件为链接文件,则复制链接文件属性而非文件本身
-i :若目标文件已经存在时,在覆盖前会先询问
-p :连同文件的属性一起复制过去
-r :递归持续复制
-u :destination 比 source 旧才更新 destination,或 destination 不存在的情况下才复制
–preserve=all :除了 -p 的权限相关参数外,还加入 SELinux 的属性, links, xattr 等也复制了
7. rm
删除文件。
rm [-fir] 文件或目录
-r :递归删除
8. mv
移动文件。
mv [-fiu] source destination
mv [options] source1 source2 source3 … directory
-f : force 强制的意思,如果目标文件已经存在,不会询问而直接覆盖
9.pwd
显示当前文件路径。
3.修改文件权限
可以将一组权限用数字来表示,此时一组权限的 3 个位当做二进制数字的位,从左到右每个位的权值为 4、2、1,即每个权限对应的数字权值为 r : 4、w : 2、x : 1。
chmod [-R] xyz dirname/filename
示例:将 .bashrc 文件的权限修改为 -rwxr-xr–。
chmod 754 .bashrc
也可以使用符号来设定权限。
chmod [ugoa] [±=] [rwx] dirname/filename
- u:拥有者
- g:所属群组
- o:其他人
- a:所有人
- +:添加权限
- -:移除权限
- =:设定权限
示例:为 .bashrc 文件的所有用户添加写权限。
chmod a+w .bashrc
一般而言 我们修改某个权限时选用的时用数字表示。
文件默认权限
- 文件默认权限:文件默认没有可执行权限,因此为 666,也就是 -rw-rw-rw- 。
- 目录默认权限:目录必须要能够进入,也就是必须拥有可执行权限,因此为 777 ,也就是 drwxrwxrwx。
可以通过 umask 设置或者查看文件的默认权限,通常以掩码的形式来表示,例如 002 表示其它用户的权限去除了一个 2 的权限,也就是写权限,因此建立新文件时默认的权限为 -rw-rw-r–。
目录的权限
文件名不是存储在一个文件的内容中,而是存储在一个文件所在的目录中。因此,拥有文件的 w 权限并不能对文件名进行修改。
目录存储文件列表,一个目录的权限也就是对其文件列表的权限。因此,目录的 r 权限表示可以读取文件列表;w 权限表示可以修改文件列表,具体来说,就是添加删除文件,对文件名进行修改;x 权限可以让该目录成为工作目录,x 权限是 r 和 w 权限的基础,如果不能使一个目录成为工作目录,也就没办法读取文件列表以及对文件列表进行修改了。
4. 获取文件内容
1.cat
取得文件内容。
cat [-AbEnTv] filename
-n :打印出行号,连同空白行也会有行号,-b 不会
2. tac
是 cat 的反向操作,从最后一行开始打印。
3. more
和 cat 不同的是它可以一页一页查看文件内容,比较适合大文件的查看。
4. less
和 more 类似,但是多了一个向前翻页的功能。
5. head
取得文件前几行。
head [-n number] filename
-n :后面接数字,代表显示几行的意思
6. tail
是 head 的反向操作,只是取得是后几行。
7. od
以字符或者十六进制的形式显示二进制文件。
5. Linux中软链接和硬链接的区别
我们知道文件都有文件名与数据,这在 Linux 上被分成两个部分**:用户数据 (user data) 与元数据 (metadata)**。
- 用户数据,即文件数据块 (data block),数据块是记录文件真实内容的地方;
- 元数据,则是文件的附加属性,如文件大小、创建时间、所有者等信息;
在 Linux 中,元数据中的 inode 号(inode 是文件元数据的一部分但其并不包含文件名,inode 号即索引节点号)才是 \文件的唯一标识而非文件名。文件名仅是为了方便人们的记忆和使用,系统或程序通过 inode 号寻找正确的文件数据块
为解决文件的共享使用,Linux 系统引入了两种链接:硬链接 (hard link) 与软链接(又称符号链接,即 soft link 或 symbolic link)。链接为 Linux 系统解决了文件的共享使用,还带来了隐藏文件路径、增加权限安全及节省存储等好处。若一个 inode 号对应多个文件名,则称这些文件为 硬链接。换言之,硬链接就是同一个文件使用了多个别名。
由于硬链接是有着相同 inode 号仅文件名不同的文件,因此硬链接存在以下几点特性:
- 文件有相同的 inode 及 data block;
- 只能对已存在的文件进行创建;
- 不能交叉文件系统进行硬链接的创建;
- 不能对目录进行创建,只可对文件创建;
- 删除一个硬链接文件并不影响其他有相同 inode 号的文件。
ln -s source dist # 建立软连接 ln source dist # 建立硬连接
关于二者的区别:
- 硬链接: 与普通文件没什么不同,inode 都指向同一个文件在硬盘中的区块。建立硬链接时,链接文件和被链接文件必须位于同一个文件系统中,并且不能建立指向目录的硬链接
- 软链接: 保存了其代表的文件的绝对路径,是另外一种文件,在硬盘上有独立的区块,访问时替换自身路径。(简单地理解为 Windows 中常见的快捷方式)
4.压缩与打包
1.压缩文件名
Linux系统中有很多压缩文件名,常见的如下所示:
扩展名 | 压缩程序 |
---|---|
*.Z | compress |
*.zip | zip |
*.gz | gzip |
*.bz2 | bzip2 |
*.xz | xz |
*.tar | tar 程序打包的数据,没有经过压缩 |
*.tar.gz | tar 程序打包的文件,经过 gzip 的压缩 |
*.tar.bz2 | tar 程序打包的文件,经过 bzip2 的压缩 |
*.tar.xz | tar 程序打包的文件,经过 xz 的压缩 |
2.压缩指令
1. gzip
gzip 是 Linux 使用最广的压缩指令,可以解开 compress、zip 与 gzip 所压缩的文件。
经过 gzip 压缩过,源文件就不存在了。
有 9 个不同的压缩等级可以使用。
可以使用 zcat、zmore、zless 来读取压缩文件的内容。
$ gzip [-cdtv#] filename
-c :将压缩的数据输出到屏幕上
-d :解压缩
-t :检验压缩文件是否出错
-v :显示压缩比等信息
-# : # 为数字的意思,代表压缩等级,数字越大压缩比越高,默认为 6
2. bzip2
提供比 gzip 更高的压缩比。
查看命令:bzcat、bzmore、bzless、bzgrep。
$ bzip2 [-cdkzv#] filename
-k :保留源文件
3. xz
提供比 bzip2 更佳的压缩比。
可以看到,gzip、bzip2、xz 的压缩比不断优化。不过要注意的是,压缩比越高,压缩的时间也越长。
查看命令:xzcat、xzmore、xzless、xzgrep。
$ xz [-dtlkc#] filename
3.打包
压缩指令只能对一个文件进行压缩,而打包能够将多个文件打包成一个大文件。tar 不仅可以用于打包,也可以使用 gip、bzip2、xz 将打包文件进行压缩。
$ tar [-z|-j|-J] [cv] [-f 新建的 tar 文件] filename… ==打包压缩
$ tar [-z|-j|-J] [tv] [-f 已有的 tar 文件] ==查看
$ tar [-z|-j|-J] [xv] [-f 已有的 tar 文件] [-C 目录] ==解压缩
-z :使用 zip;
-j :使用 bzip2;
-J :使用 xz;
-c :新建打包文件;
-t :查看打包文件里面有哪些文件;
-x :解打包或解压缩的功能;
-v :在压缩/解压缩的过程中,显示正在处理的文件名;
-f : filename:要处理的文件;
-C 目录 : 在特定目录解压缩。
使用方式 | 命令 |
---|---|
打包压缩 | tar -jcv -f filename.tar.bz2 要被压缩的文件或目录名称 |
查 看 | tar -jtv -f filename.tar.bz2 |
解压缩 | tar -jxv -f filename.tar.bz2 -C 要解压缩的目录 |
5.进程管理
查看进程
1. ps
查看某个时间点的进程信息
示例一:查看自己的进程: ps -l
示例二:查看系统所有进程: ps aux
示例三:查看特定的进程: ps aux | grep threadx
2. pstree
查看进程树
示例:查看所有进程树: pstree -A
3. top
实时显示进程信息
示例:两秒钟刷新一次: top -d 2
4. netstat
查看占用端口的进程
示例:查看特定端口的进程: netstat -anp | grep port
5.杀进程kill
使用kill命令结束进程:kill xxx
常用:kill -9 324
Linux下还提供了一个killall命令,可以直接使用进程的名字而不是进程标识号,例如:# killall -9 NAME
kill进程杀不掉的原因:
- 进程已经成为僵死进程,当它的父进程将它回收或将它的父进程kill掉即可在ps输出看不到了;
- 进程正处在内核状态中,Linux进程运行时分内核和用户两种状态,当进程进入内核状态后,会屏蔽所有信号,包括SIGKIL,所以这个时候kill -9也变得无效了
关于在CentOS系统中关于进程的更多shell指令操作,可参考CentOS查看进程、杀死进程、启动进程等常用命令