乐趣区

关于spring:后端程序员必备的-Linux-基础知识常见命令近万字总结

大家好!我是 Guide 哥,Java 后端开发。一个会一点前端,喜爱烹饪的自在少年。

明天这篇文章中简略介绍一下一个 Java 程序员必知的 Linux 的一些概念以及常见命令。

如果文章有任何须要改善和欠缺的中央,欢送在评论区指出,共同进步!笔芯!

1. 从意识操作系统开始

正式开始 Linux 之前,简略花一点点篇幅科普一下操作系统相干的内容。

1.1. 操作系统简介

我通过以下四点介绍什么是操作系统:

  1. 操作系统(Operating System,简称 OS)是治理计算机硬件与软件资源的程序,是计算机的基石。
  2. 操作系统实质上是一个运行在计算机上的软件程序,用于治理计算机硬件和软件资源。 举例:运行在你电脑上的所有应用程序都通过操作系统来调用零碎内存以及磁盘等等硬件。
  3. 操作系统存在屏蔽了硬件层的复杂性。 操作系统就像是硬件应用的负责人,兼顾着各种相干事项。
  4. 操作系统的内核(Kernel)是操作系统的外围局部,它负责零碎的内存治理,硬件设施的治理,文件系统的治理以及应用程序的治理

内核(Kernel)在后文中会提到。

1.2. 操作系统简略分类

1.2.1. Windows

目前最风行的集体桌面操作系统,不做多的介绍,大家都分明。界面简略易操作,软件生态十分好。

玩玩电脑游戏还是必须要有 Windows 的,所以我当初是一台 Windows 用于玩游戏,一台 Mac 用于平时日常开发和学习应用。

1.2.2. Unix

最早的多用户、多任务操作系统。前面崛起的 Linux 在很多方面都参考了 Unix。

目前这款操作系统曾经逐步逐步退出操作系统的舞台。

1.2.3. Linux

Linux 是一套收费应用、开源的类 Unix 操作系统。 Linux 存在着许多不同的发行版本,但它们都应用了 Linux 内核

严格来讲,Linux 这个词自身只示意 Linux 内核,在 GNU/Linux 零碎中,Linux 理论就是 Linux 内核,而该零碎的其余部分次要是由 GNU 工程编写和提供的程序组成。独自的 Linux 内核并不能成为一个能够失常工作的操作系统。

很多人更偏向应用“GNU/Linux”一词来表白人们通常所说的“Linux”。

1.2.4. Mac OS

苹果自家的操作系统,编程体验和 Linux 相当,然而界面、软件生态以及用户体验各方面都要比 Linux 操作系统更好。

1.3. 操作系统的内核(Kernel)

咱们先来看看维基百科对于内核的解释,我感觉总结的十分好!

内核 (英语:Kernel,又称外围)在计算机科学中是一个用来管理软件收回的数据 I/O(输出与输入)要求的电脑程序,将这些要求转译为数据处理的指令并交由中央处理器(CPU)及电脑中其余电子组件进行解决,是古代操作系统中最根本的局部。它是为泛滥应用程序提供对计算机硬件的平安拜访的一部分软件,这种拜访是无限的,并由内核决定一个程序在什么时候对某局部硬件操作多长时间。 间接对硬件操作是非常复杂的。所以内核通常提供一种硬件形象的办法,来实现这些操作。有了这个,通过过程间通信机制及零碎调用,利用过程可间接管制所需的硬件资源(特地是处理器及 IO 设施)。

晚期计算机系统的设计中,还没有操作系统的内核这个概念。随着计算机系统的倒退,操作系统内核的概念才慢慢清晰起来了!

简略概括两点:

  1. 操作系统的内核(Kernel)是操作系统的外围局部,它负责零碎的内存治理,硬件设施的治理,文件系统的治理以及应用程序的治理。
  2. 操作系统的内核是连贯应用程序和硬件的桥梁,决定着操作系统的性能和稳定性。

1.4. 中央处理器(CPU,Central Processing Unit)

对于 CPU 简略概括三点:

  1. CPU 是一台计算机的运算外围(Core)+ 管制外围(Control Unit),能够称得上是计算机的大脑。
  2. CPU 次要包含两个局部:控制器 + 运算器。
  3. CPU 的根本任务就是执行指令,对计算机来说最终都是一串由“0”和“1”组成的序列。

1.5. CPU vs Kernel(内核)

很多人容易无奈辨别操作系统的内核(Kernel)和中央处理器(CPU),你能够简略从上面两点来区别:

  1. 操作系统的内核(Kernel)属于操作系统层面,而 CPU 属于硬件。
  2. CPU 次要提供运算,解决各种指令的能力。内核(Kernel)次要负责系统管理比方内存治理,它屏蔽了对硬件的操作。

下图清晰阐明了应用程序、内核、CPU 这三者的关系。

1.6. 零碎调用

介绍零碎调用之前,咱们先来理解一下用户态和零碎态。

依据过程拜访资源的特点,咱们能够把过程在零碎上的运行分为两个级别:

  1. 用户态(user mode) : 用户态运行的过程或能够间接读取用户程序的数据。
  2. 零碎态(kernel mode): 能够简略的了解零碎态运行的过程或程序简直能够拜访计算机的任何资源,不受限制。

说了用户态和零碎态之后,那么什么是零碎调用呢?

咱们运行的程序根本都是运行在用户态,如果咱们调用操作系统提供的零碎态级别的子性能咋办呢?那就须要零碎调用了!

也就是说在咱们运行的用户程序中,但凡与零碎态级别的资源无关的操作(如文件治理、过程管制、内存治理等),都必须通过零碎调用形式向操作系统提出服务申请,并由操作系统代为实现。

这些零碎调用按性能大抵可分为如下几类:

  • 设施治理:实现设施的申请或开释,以及设施启动等性能。
  • 文件治理:实现文件的读、写、创立及删除等性能。
  • 过程管制:实现过程的创立、撤销、阻塞及唤醒等性能。
  • 过程通信:实现过程之间的消息传递或信号传递等性能。
  • 内存治理:实现内存的调配、回收以及获取作业占用内存区大小及地址等性能。

我在网上找了一个图,通过这个图能够很清晰的阐明用户程序、零碎调用、内核和硬件之间的关系。(_太难了~ 木有本人画_)

2. 初探 Linux

2.1. Linux 简介

咱们下面曾经简略了 Linux,这里只强调三点。

  • 类 Unix 零碎:Linux 是一种自在、开放源码的相似 Unix 的操作系统
  • Linux 实质是指 Linux 内核:严格来讲,Linux 这个词自身只示意 Linux 内核,独自的 Linux 内核并不能成为一个能够失常工作的操作系统。所以,就有了各种 Linux 发行版。
  • Linux 之父:一个编程畛域的传奇式人物,真大佬!我辈崇拜敬佩之楷模。他是 Linux 内核 的最早作者,随后发动了这个开源我的项目,负责 Linux 内核的首要架构师。他还发动了 Git 这个开源我的项目,并为次要的开发者。

2.2. Linux 诞生

1989 年,Linus Torvalds 进入芬兰陆军新地区旅,服 11 个月的国家义务兵役,军衔为少尉,次要服务于计算机部门,工作是弹道计算。退役期间,购买了安德鲁·斯图尔特·塔能鲍姆所著的教科书及 minix 源代码,开始钻研操作系统。1990 年,他入伍后回到大学,开始接触 Unix。

Minix 是一个迷你版本的类 Unix 操作系统,由塔能鲍姆传授为了教学之用而创作,采纳微外围设计。它启发了 Linux 内核的创作。

1991 年,Linus Torvalds 开源了 Linux 内核。Linux 以一只可恶的企鹅作为标记,象征着敢作敢为、热爱生活。

2.3. 常见 Linux 发行版本有哪些?

Linus Torvalds 开源的只是 Linux 内核,咱们下面也提到了操作系统内核的作用。一些组织或厂商将 Linux 内核与各种软件和文档包装起来,并提供零碎装置界面和系统配置、设定与管理工具,就形成了 Linux 的发行版本。

内核次要负责零碎的内存治理,硬件设施的治理,文件系统的治理以及应用程序的治理。

Linux 的发行版本能够大体分为两类:

  • 商业公司保护的发行版本,以驰名的 Red Hat 为代表,比拟典型的有 CentOS。
  • 社区组织保护的发行版本,以 Debian 为代表,比拟典型的有 Ubuntu、Debian。

对于初学者学习 Linux , 举荐抉择 CentOS。

3. Linux 文件系统概览

3.1. Linux 文件系统简介

在 Linux 操作系统中,所有被操作系统治理的资源,例如网络接口卡、磁盘驱动器、打印机、输入输出设施、一般文件或是目录都被看作是一个文件。 也就是说在 Linux 零碎中有一个重要的概念:一切都是文件

其实这是 UNIX 哲学的一个体现,在 UNIX 零碎中,把所有资源都看作是文件,Linux 的文件系统也是借鉴 UNIX 文件系统而来。

3.2. inode 介绍

inode 是 linux/unix 文件系统的根底。那么,inode 是什么? 有什么作用呢?

硬盘的最小存储单位是扇区 (Sector),块(block) 由多个扇区组成。文件数据存储在块中。块的最常见的大小是 4kb,约为 8 个间断的扇区组成(每个扇区存储 512 字节)。一个文件可能会占用多个 block,然而一个块只能寄存一个文件。

尽管,咱们将文件存储在了块 (block) 中,然而咱们还须要一个空间来存储文件的 元信息 metadata:如某个文件被分成几块、每一块在的地址、文件拥有者,创立工夫,权限,大小等。这种 存储文件元信息的区域就叫 inode,译为索引节点:i(index)+node。每个文件都有一个 inode,存储文件的元信息。

能够应用 stat 命令能够查看文件的 inode 信息。每个 inode 都有一个号码,Linux/Unix 操作系统不应用文件名来辨别文件,而是应用 inode 号码辨别不同的文件。

简略来说:inode 就是用来保护某个文件被分成几块、每一块在的地址、文件拥有者,创立工夫,权限,大小等信息。

简略总结一下:

  • inode:记录文件的属性信息,能够应用 stat 命令查看 inode 信息。
  • block:理论文件的内容,如果一个文件大于一个块时候,那么将占用多个 block,然而一个块只能寄存一个文件。(因为数据是由 inode 指向的,如果有两个文件的数据寄存在同一个块中,就会乱套了)

3.3. Linux 文件类型

Linux 反对很多文件类型,其中十分重要的文件类型有: 一般文件 目录文件 链接文件 设施文件 管道文件 Socket 套接字文件 等。

  • 一般文件(-):用于存储信息和数据,Linux 用户能够依据拜访权限对一般文件进行查看、更改和删除。比方:图片、声音、PDF、text、视频、源代码等等。
  • 目录文件(d,directory file):目录也是文件的一种,用于示意和管理系统中的文件,目录文件中蕴含一些文件名和子目录名。关上目录事实上就是关上目录文件。
  • 符号链接文件(l,symbolic link):保留了指向文件的地址而不是文件自身。
  • 字符设施(c,char):用来拜访字符设施比方硬盘。
  • 设施文件(b,block):用来拜访块设施比方硬盘、软盘。
  • 管道文件(p,pipe) : 一种非凡类型的文件,用于过程之间的通信。
  • 套接字(s,socket):用于过程间的网络通信,也能够用于本机之间的非网络通信。

3.4. 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)就在这里。

4. Linux 根本命令

上面只是给出了一些比拟罕用的命令。举荐一个 Linux 命令快查网站,十分不错,大家如果忘记某些命令或者对某些命令不了解都能够在这里失去解决。

Linux 命令大全:http://man.linuxde.net/

4.1. 目录切换命令

  • cd usr 切换到该目录下 usr 目录
  • cd ..(或 cd../) 切换到上一层目录
  • cd / 切换到零碎根目录
  • cd ~ 切换到用户主目录
  • cd - 切换到上一个操作所在目录

4.2. 目录的操作命令(增删改查)

  • mkdir 目录名称 减少目录。
  • ls/ll(ll 是 ls -l 的别名,ll 命令能够看到该目录下的所有目录和文件的详细信息):查看目录信息。
  • find 目录 参数 寻找目录(查)。示例:① 列出当前目录及子目录下所有文件和文件夹: find .;② 在/home 目录下查找以.txt 结尾的文件名:find /home -name "*.txt" , 疏忽大小写: find /home -iname "*.txt";③ 当前目录及子目录下查找所有以.txt 和.pdf 结尾的文件:find . \(-name "*.txt" -o -name "*.pdf" \)find . -name "*.txt" -o -name "*.pdf"
  • mv 目录名称 新目录名称 批改目录的名称(改)。留神:mv 的语法不仅能够对目录进行重命名而且也能够对各种文件,压缩包等进行 重命名的操作。mv 命令用来对文件或目录重新命名,或者将文件从一个目录移到另一个目录中。前面会介绍到 mv 命令的另一个用法。
  • mv 目录名称 目录的新地位 挪动目录的地位 — 剪切(改)。留神:mv 语法不仅能够对目录进行剪切操作,对文件和压缩包等都可执行剪切操作。另外 mv 与 cp 的后果不同,mv 如同文件“搬家”,文件个数并未减少。而 cp 对文件进行复制,文件个数减少了。
  • cp -r 目录名称 目录拷贝的指标地位 拷贝目录(改),-r 代表递归拷贝。留神:cp 命令不仅能够拷贝目录还能够拷贝文件,压缩包等,拷贝文件和压缩包时不 用写 -r 递归。
  • rm [-rf] 目录 : 删除目录(删)。留神:rm 不仅能够删除目录,也能够删除其余文件或压缩包,为了加强大家的记忆,无论删除任何目录或文件,都间接应用rm -rf 目录 / 文件 / 压缩包。

4.3. 文件的操作命令(增删改查)

  • touch 文件名称: 文件的创立(增)。
  • cat/more/less/tail 文件名称:文件的查看(查)。命令 tail -f 文件 能够对某个文件进行动静监控,例如 tomcat 的日志文件,会随着程序的运行,日志会变动,能够应用 tail -f catalina-2016-11-11.log 监控 文 件的变动。
  • vim 文件 批改文件的内容(改)。vim 编辑器是 Linux 中的弱小组件,是 vi 编辑器的加强版,vim 编辑器的命令和快捷方式有很多,但此处不一一论述,大家也无需钻研的很透彻,应用 vim 编辑批改文件的形式根本会应用就能够了。在理论开发中,应用 vim 编辑器次要作用就是批改配置文件,上面是个别步骤:vim 文件 ------> 进入文件 -----> 命令模式 ------> 按 i 进入编辑模式 -----> 编辑文件 -------> 按 Esc 进入底行模式 -----> 输出:wq/q!(输出 wq 代表写入内容并退出,即保留;输出 q! 代表强制退出不保留)。
  • rm -rf 文件 删除文件(删)。

4.4. 压缩文件的操作命令

1)打包并压缩文件:

Linux 中的打包文件个别是以.tar 结尾的,压缩的命令个别是以.gz 结尾的。而个别状况下打包和压缩是一起进行的,打包并压缩后的文件的后缀名个别.tar.gz。命令:tar -zcvf 打包压缩后的文件名 要打包压缩的文件,其中:

  • z:调用 gzip 压缩命令进行压缩
  • c:打包文件
  • v:显示运行过程
  • f:指定文件名

比方:如果 test 目录下有三个文件别离是:aaa.txt bbb.txt ccc.txt,如果咱们要打包 test 目录并指定压缩后的压缩包名称为 test.tar.gz 能够应用命令:tar -zcvf test.tar.gz aaa.txt bbb.txt ccc.txttar -zcvf test.tar.gz /test/

2)解压压缩包:

命令:tar [-xvf] 压缩文件`

其中:x:代表解压

示例:

  • 将 /test 下的 test.tar.gz 解压到当前目录下能够应用命令:tar -xvf test.tar.gz
  • 将 /test 下的 test.tar.gz 解压到根目录 /usr 下:tar -xvf test.tar.gz -C /usr(- C 代表指定解压的地位)

4.5. Linux 的权限命令

操作系统中每个文件都领有特定的权限、所属用户和所属组。权限是操作系统用来限度资源拜访的机制,在 Linux 中权限个别分为读 (readable)、写(writable) 和执行 (excutable),分为三组。别离对应文件的属主(owner),属组(group) 和其余用户(other),通过这样的机制来限度哪些用户、哪些组能够对特定的文件进行什么样的操作。

通过 ls -l 命令咱们能够 查看某个目录下的文件或目录的权限

示例:在随便某个目录下ls -l

第一列的内容的信息解释如下:

上面将具体解说文件的类型、Linux 中权限以及文件有所有者、所在组、其它组具体是什么?

文件的类型:

  • d:代表目录
  • -:代表文件
  • l:代表软链接(能够认为是 window 中的快捷方式)

Linux 中权限分为以下几种:

  • r:代表权限是可读,r 也能够用数字 4 示意
  • w:代表权限是可写,w 也能够用数字 2 示意
  • x:代表权限是可执行,x 也能够用数字 1 示意

文件和目录权限的区别:

对文件和目录而言,读写执行示意不同的意义。

对于文件:

权限名称 可执行操作
r 能够应用 cat 查看文件的内容
w 能够批改文件的内容
x 能够将其运行为二进制文件

对于目录:

权限名称 可执行操作
r 能够查看目录下列表
w 能够创立和删除目录下文件
x 能够应用 cd 进入目录

须要留神的是:超级用户能够忽视普通用户的权限,即便文件目录权限是 000,仍旧能够拜访。

在 linux 中的每个用户必须属于一个组,不能独立于组外。在 linux 中每个文件有所有者、所在组、其它组的概念。

  • 所有者(u):个别为文件的创建者,谁创立了该文件,就人造的成为该文件的所有者,用 ls ‐ahl 命令能够看到文件的所有者 也能够应用 chown 用户名 文件名来批改文件的所有者。
  • 文件所在组 (g):当某个用户创立了一个文件后,这个文件的所在组就是该用户所在的组用 ls ‐ahl 命令能够看到文件的所有组也能够应用 chgrp 组名 文件名来批改文件所在的组。
  • 其它组(o):除开文件的所有者和所在组的用户外,零碎的其它用户都是文件的其它组。

咱们再来看看如何批改文件 / 目录的权限。

批改文件 / 目录的权限的命令:chmod

示例:批改 /test 下的 aaa.txt 的权限为文件所有者有全副权限,文件所有者所在的组有读写权限,其余用户只有读的权限。

chmod u=rwx,g=rw,o=r aaa.txt 或者 chmod 764 aaa.txt

补充一个比拟罕用的货色:

如果咱们装了一个 zookeeper,咱们每次开机到要求其主动启动该怎么办?

  1. 新建一个脚本 zookeeper
  2. 为新建的脚本 zookeeper 增加可执行权限,命令是:chmod +x zookeeper
  3. 把 zookeeper 这个脚本增加到开机启动项外面,命令是:chkconfig --add zookeeper
  4. 如果想看看是否增加胜利,命令是:chkconfig --list

4.6. Linux 用户治理

Linux 零碎是一个多用户多任务的分时操作系统,任何一个要应用系统资源的用户,都必须首先向系统管理员申请一个账号,而后以这个账号的身份进入零碎。

用户的账号一方面能够帮忙系统管理员对应用零碎的用户进行跟踪,并管制他们对系统资源的拜访;另一方面也能够帮忙用户组织文件,并为用户提供安全性爱护。

Linux 用户治理相干命令:

  • useradd 选项 用户名: 增加用户账号
  • userdel 选项 用户名: 删除用户帐号
  • usermod 选项 用户名: 批改帐号
  • passwd 用户名: 更改或创立用户的明码
  • passwd -S 用户名 : 显示用户账号密码信息
  • passwd -d 用户名: 革除用户明码

useradd 命令用于 Linux 中创立的新的零碎用户。useradd可用来建设用户帐号。帐号建好之后,再用 passwd 设定帐号的明码.而可用 userdel 删除帐号。应用 useradd 指令所建设的帐号,实际上是保留在 /etc/passwd文本文件中。

passwd命令用于设置用户的认证信息,包含用户明码、明码过期工夫等。零碎管理者则能用它管理系统用户的明码。只有管理者能够指定用户名称,个别用户只能变更本人的明码。

4.7. Linux 零碎用户组的治理

每个用户都有一个用户组,零碎能够对一个用户组中的所有用户进行集中管理。不同 Linux 系统对用户组的规定有所不同,如 Linux 下的用户属于与它同名的用户组,这个用户组在创立用户时同时创立。

用户组的治理波及用户组的增加、删除和批改。组的减少、删除和批改实际上就是对 /etc/group 文件的更新。

Linux 零碎用户组的治理相干命令:

  • groupadd 选项 用户组 : 减少一个新的用户组
  • groupdel 用户组: 要删除一个已有的用户组
  • groupmod 选项 用户组 : 批改用户组的属性

4.8. 其余常用命令

  • pwd 显示以后所在位置
  • sudo + 其余命令:以零碎管理者的身份执行指令,也就是说,经由 sudo 所执行的指令就如同是 root 亲自执行。
  • grep 要搜寻的字符串 要搜寻的文件 --color 搜寻命令,–color 代表高亮显示
  • ps -ef/ps -aux 这两个命令都是查看以后零碎正在运行过程,两者的区别是展现格局不同。如果想要查看特定的过程能够应用这样的格局:ps aux|grep redis(查看包含 redis 字符串的过程),也可应用 pgrep redis -a。留神:如果间接用 ps((Process Status))命令,会显示所有过程的状态,通常联合 grep 命令查看某过程的状态。
  • kill -9 过程的 pid 杀死过程(-9 示意强制终止。)先用 ps 查找过程,而后用 kill 杀掉
  • 网络通信命令:

    • 查看以后零碎的网卡信息:ifconfig
    • 查看与某台机器的连贯状况:ping
    • 查看以后零碎的端口应用:netstat -an
  • net-tools 和 iproute2: net-tools起源于 BSD 的 TCP/IP 工具箱,起初成为老版本 LinuxLinux 中配置网络性能的工具。但自 2001 年起,Linux 社区曾经对其进行保护。同时,一些 Linux 发行版比方 Arch Linux 和 CentOS/RHEL 7 则曾经齐全摈弃了 net-tools,只反对iproute2。linux ip 命令相似于 ifconfig,但性能更弱小,旨在代替它。更多详情请浏览如何在 Linux 中应用 IP 命令和示例
  • shutdown shutdown -h now:指定当初立刻关机;shutdown +5 "System will shutdown after 5 minutes":指定 5 分钟后关机,同时送出正告信息给登入用户。
  • reboot reboot 重开机。reboot -w 做个重开机的模仿(只有纪录并不会真的重开机)。

我是 Guide 哥,一 Java 后端开发,会一点前端,自在的少年。咱们下期再见!

作者介绍: Github 70k Star 我的项目 JavaGuide(公众号同名)作者。每周都会在公众号更新一些本人原创干货。公众 hao 后盾回复“1”支付 Java 工程师必备学习材料 + 面试突击 pdf。

退出移动版