Linux 是免费可自由传播的类 Unix 操作系统,是一个基于 POSIX 和 Unix 的多用户、多任务、支持多线程和多 CPU 的操作系统。
Linux 和Unix 都是功能强大的操作系统,都是应用广泛的服务器操作系统,两者的区别:
相比于 Unix,Linux 操作系统更受广大计算机爱好者的喜爱,主要原因是Linux 具有Unix 的全部功能,并且能够在普通 PC 计算机上实现全部的 Unix 特性,开源免费的特性,更容易普及使用!
Linux 系统的核心是内核。内核控制着计算机系统上的所有硬件和软件,在必要时分配硬件,并根据需要执行软件。
Linux 组件:内核,shell和GUI,系统实用程序和应用程序。 Linux 比其他操作系统更具优势的是每个方面都附带其他功能,所有代码都可以免费下载。
CLI:命令行界面(command-line interface,简称 CLI)是在图形用户界面得到普及之前使用最为广泛的用户界面。
GUI:图形用户界面(Graphical User Interface,简称 GUI,又称图形用户接口)是指采用图形方式显示的计算机操作用户界面。
用户空间和内核空间是程序执行的两种不同的状态,我们可以通过两种方式完成用户空间到内核空间的转移:1)系统调用;2)硬件中断。
比较重要的是 /var/log/messages 日志文件。
该日志文件是许多进程日志文件的汇总,从该文件可以看出任何入侵企图或成功的入侵。另外,如果系统里有 ELK 日志集中收集,它也会被收集进去。
交换空间是 Linux 使用的一定空间,用于临时保存一些并发运行的程序。当 RAM 没有足够的内存来容纳正在执行的所有程序时,就会发生这种情况。
root 帐户就像一个系统管理员帐户,允许你完全控制系统。你可以在此处创建和维护用户帐户,为每个帐户分配不同的权限。每次安装 Linux 时都是默认帐户。
LILO 是 Linux 的引导加载程序。它主要用于将 Linux 操作系统加载到主内存中,以便它可以开始运行。
这个问题,一般不会问。更多是实际使用时,需要知道。 Linux 文件系统的结构层次鲜明,就像一棵倒立的树,最顶层是其根目录:
Linux的目录结构
/bin:存放二进制可执行文件(ls,cat,mkdir等),常用命令一般都在这里;
/etc:存放系统管理和配置文件;
/home:存放所有用户文件的根目录,是用户主目录的基点,比如用户user的主目录就是/home/user,可以用~user表示;
**/usr **:用于存放系统应用程序/opt:额外安装的可选应用程序包所放置的位置。一般情况下,我们可以把tomcat等都安装到这里;
/proc:虚拟文件系统目录,是系统内存的映射。可直接访问这个目录来获取系统信息;
/root:超级用户(系统管理员)的主目录(特权阶级o);
/sbin: 存放二进制可执行文件,只有root才能访问。这里存放的是系统管理员使用的系统级别的管理命令和程序。如ifconfig等;
/dev:用于存放设备文件;
/mnt:系统管理员安装临时文件系统的安装点,系统提供这个目录是让用户临时挂载其他的文件系统;
/boot:存放用于系统引导时使用的各种文件;
**/lib **:存放着和系统运行相关的库文件 ;
/tmp:用于存放各种临时文件,是公用的临时文件存储点;
/var:用于存放运行时需要改变数据的文件,也是某些大文件的溢出区,比方说各种服务的日志文件(系统启动日志等。)等;
/lost+found:这个目录平时是空的,系统非正常关机而留下“无家可归”的文件(windows下叫什么.chk)就在这里。
Sector
:文件储存在硬盘上,硬盘的最小存储单位叫做"扇区"(Sector)。每个扇区储存512字节(相当于0.5KB)。
block
:操作系统读取硬盘的时候,不会一个个扇区地读取,这样效率太低,而是一次性连续读取多个扇区,即一次性读取一个"块"(block)。这种由多个扇区组成的"块",是文件存取的最小单位。"块"的大小,最常见的是4KB,即连续八个 sector 组成一个 block。
inode
:文件数据都储存在"块"中,那么很显然,我们还必须找到一个地方储存文件的元信息,比如文件的创建者、文件的创建日期、文件的大小等等。这种储存文件元信息的区域就叫做 inode,中文译名为"索引节点"。
每一个文件都有对应的inode,里面包含了与该文件有关的一些信息。
由于 Linux 下的文件是通过索引节点(inode)来识别文件,硬链接可以认为是一个指针,指向文件索引节点的指针,系统并不为它重新分配 inode 。每添加一个一个硬链接,文件的链接数就加 1 。
不足:1)不可以在不同文件系统的文件间建立链接;2)只有超级用户才可以为目录创建硬链接。
软链接克服了硬链接的不足,没有任何文件系统的限制,任何用户可以创建指向目录的符号链接。因而现在更为广泛使用,它具有更大的灵活性,甚至可以跨越不同机器、不同网络对文件进行链接。
不足:因为链接文件包含有原文件的路径信息,所以当原文件从一个目录下移到其他目录中,再访问链接文件,系统就找不到了,而硬链接就没有这个缺陷,你想怎么移就怎么移;还有它要系统分配额外的空间用于建立新的索引节点和保存原文件的路径。
实际场景下,基本是使用软链接。总结区别如下:
在开始学习 Linux 命令之前,有一些快捷方式,是必须要提前掌握的,它将贯穿整个 Linux 使用生涯。
+ 通过上下方向键 ↑ ↓ 来调取过往执行过的 Linux 命令;
+ 命令或参数仅需输入前几位就可以用 Tab 键补全;
+ Ctrl + R :用于查找使用过的命令(history 命令用于列出之前使用过的所有命令,然后输入 ! 命令加上编号( !2 )就可以直接执行该历史命令);
+ Ctrl + L:清除屏幕并将当前行移到页面顶部;
+ Ctrl + C:中止当前正在执行的命令;
+ Ctrl + U:从光标位置剪切到行首;
+ Ctrl + K:从光标位置剪切到行尾;
+ Ctrl + W:剪切光标左侧的一个单词;
+ Ctrl + Y:粘贴 Ctrl + U | K | Y 剪切的命令;
+ Ctrl + A:光标跳到命令行的开头;
+ Ctrl + E:光标跳到命令行的结尾;
+ Ctrl + D:关闭 Shell 会话;
+ 改变文件的所属群组:chgrp
+ 改变文件拥有者:chown
+ 改变文件的权限:chmod
+ 查看版本信息等
+ uname -r
+ lsb_release -a
+ 变换目录:cd
+ 显示当前所在目录:pwd
+ 建立新目录:mkdir
+ 删除『空』的目录:rmdir
+ 档案与目录的显示:ls
+ 复制档案或目录:cp
+ 移除档案或目录:rm
+ 移动档案与目录,或更名:mv
+ 取得路径的文件名与目录名:basename,dirname
+ 由第一行开始显示档案内容:cat
+ 从最后一行开始显示:tac(可以看出 tac 是 cat 的倒着写)
+ 显示的时候,顺道输出行号:nl
+ 一页一页的显示档案内容:more
+ 与 more 类似,但是比 more 更好的是,他可以往前翻页:less
+ 只看头几行:head
+ 只看尾几行:tail
+ 修改档案时间或新建档案:touch
+ 档案预设权限:umask
+ 配置文件档案隐藏属性:chattr
+ 显示档案隐藏属性:lsattr
+ 观察文件类型:file
+ 寻找【执行挡】:which
+ 寻找特定档案:whereis
+ 寻找特定档案:locate
+ 寻找特定档案:find
+ 压缩文件和读取压缩文件:gzip,zcat
+ 压缩文件和读取压缩文件:bzip2,bzcat
+ 压缩文件和读取压缩文件:tar
?
:可替代单个字符。*
:可替代任意多个字符。D 不可中断 Uninterruptible(usually IO)
R 正在运行,或在队列中的进程
S 处于休眠状态
T 停止或被追踪
Z 僵尸进程
W 进入内存交换(从内核 2.6 开始无效)
X 死掉的进程
ps -aux
:bsd 格式显示;ps -ef
:标准格式显示ps -ef | grep pid
首先,我们可以通过`uptime`,`w` 或者 `top` 命令看到 CPU 的平均负载
CPU 负载很高,利用率却很低,说明处于等待状态的任务很多,负载越高,代表可能很多僵死的进程。通常这种情况是IO密集型的任务,大量请求在请求相同的IO,导致任务队列堆积。
同样,可以先通过top命令观察(截图只是示意,不代表真实情况),假设发现现在确实是高负载低使用率。
然后,再通过命令ps -axjf
查看是否存在状态为D+
状态的进程,这个状态指的就是不可中断的睡眠状态的进程。处于这个状态的进程无法终止,也无法自行退出,只能通过恢复其依赖的资源或者重启系统来解决。
这表示 CPU 的任务并不多,但是任务执行的时间很长,通常是计算密集型任务,生成了大量耗时短的计算任务。
直接 top 命令找到使用率最高的任务,定位到去看看就行了。如果代码没有问题,那么过段时间CPU使用率就会下降的。