大家好!我是 Guide 哥,Java 后端开发。一个会一点前端,喜欢烹饪的自由少年。
今天这篇文章中简单介绍一下一个 Java 程序员必知的 Linux 的一些概念以及常见命令。
如果文章有任何需要改善和完善的地方,欢迎在评论区指出,共同进步!笔芯!
system/linux?id=_1-%E4%BB%8E%E8%AE%A4%E8%AF%86%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F%E5%BC%80%E5%A7%8B)
正式开始 Linux 之前,简单花一点点篇幅科普一下操作系统相关的内容。
system/linux?id=_11-%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F%E7%AE%80%E4%BB%8B)
我通过以下四点介绍什么是操作系统:
内核(Kernel)在后文中会提到。
system/linux?id=_12-%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F%E7%AE%80%E5%8D%95%E5%88%86%E7%B1%BB)
system/linux?id=_121-windows)
目前最流行的个人桌面操作系统 ,不做多的介绍,大家都清楚。界面简单易操作,软件生态非常好。
玩玩电脑游戏还是必须要有 Windows 的,所以我现在是一台 Windows 用于玩游戏,一台 Mac 用于平时日常开发和学习使用。
system/linux?id=_122-unix)
最早的多用户、多任务操作系统 。后面崛起的 Linux 在很多方面都参考了 Unix。
目前这款操作系统已经逐渐逐渐退出操作系统的舞台。
system/linux?id=_123-linux)
Linux 是一套免费使用、开源的类 Unix 操作系统。 Linux 存在着许多不同的发行版本,但它们都使用了 Linux 内核 。
严格来讲,Linux 这个词本身只表示 Linux 内核,在 GNU/Linux 系统中,Linux 实际就是 Linux 内核,而该系统的其余部分主要是由 GNU 工程编写和提供的程序组成。单独的 Linux 内核并不能成为一个可以正常工作的操作系统。 很多人更倾向使用 “GNU/Linux” 一词来表达人们通常所说的 “Linux”。
严格来讲,Linux 这个词本身只表示 Linux 内核,在 GNU/Linux 系统中,Linux 实际就是 Linux 内核,而该系统的其余部分主要是由 GNU 工程编写和提供的程序组成。单独的 Linux 内核并不能成为一个可以正常工作的操作系统。
很多人更倾向使用 “GNU/Linux” 一词来表达人们通常所说的 “Linux”。
system/linux?id=_124-mac-os)
苹果自家的操作系统,编程体验和 Linux 相当,但是界面、软件生态以及用户体验各方面都要比 Linux 操作系统更好。
操作系统的内核(Kernel)](https://snailclimb.gitee.io/javaguide/#/docs/operating- system/linux?id=_13-%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F%E7%9A%84%E5%86%85%E6%A0%B8%EF%BC%88kernel%EF%BC%89)
我们先来看看维基百科对于内核的解释,我觉得总结的非常好!
内核 (英语:Kernel,又称核心)在计算机科学中是一个用来管理软件发出的数据 I/O(输入与输出)要求的电脑程序,将这些要求转译为数据处理的指令并交由中央处理器(CPU)及电脑中其他电子组件进行处理,是现代操作系统中最基本的部分。它是为众多应用程序提供对计算机硬件的安全访问的一部分软件,这种访问是有限的,并由内核决定一个程序在什么时候对某部分硬件操作多长时间。 直接对硬件操作是非常复杂的。所以内核通常提供一种硬件抽象的方法,来完成这些操作。有了这个,通过进程间通信机制及系统调用,应用进程可间接控制所需的硬件资源(特别是处理器及 IO 设备)。 早期计算机系统的设计中,还没有操作系统的内核这个概念。随着计算机系统的发展,操作系统内核的概念才渐渐明晰起来了!
内核 (英语:Kernel,又称核心)在计算机科学中是一个用来管理软件发出的数据 I/O(输入与输出)要求的电脑程序,将这些要求转译为数据处理的指令并交由中央处理器(CPU)及电脑中其他电子组件进行处理,是现代操作系统中最基本的部分。它是为众多应用程序提供对计算机硬件的安全访问的一部分软件,这种访问是有限的,并由内核决定一个程序在什么时候对某部分硬件操作多长时间。 直接对硬件操作是非常复杂的。所以内核通常提供一种硬件抽象的方法,来完成这些操作。有了这个,通过进程间通信机制及系统调用,应用进程可间接控制所需的硬件资源(特别是处理器及 IO 设备)。
早期计算机系统的设计中,还没有操作系统的内核这个概念。随着计算机系统的发展,操作系统内核的概念才渐渐明晰起来了!
简单概括两点:
Unit)](https://snailclimb.gitee.io/javaguide/#/docs/operating- system/linux?id=_14-%E4%B8%AD%E5%A4%AE%E5%A4%84%E7%90%86%E5%99%A8%EF%BC%88cpu%EF%BC%8Ccentral- processing-unit%EF%BC%89)
关于 CPU 简单概括三点:
Kernel(内核)](https://snailclimb.gitee.io/javaguide/#/docs/operating- system/linux?id=_15-cpu-vs-kernel%E5%86%85%E6%A0%B8)
很多人容易无法区分操作系统的内核(Kernel)和中央处理器(CPU),你可以简单从下面两点来区别:
下图清晰说明了应用程序、内核、CPU 这三者的关系。
system/linux?id=_16-%E7%B3%BB%E7%BB%9F%E8%B0%83%E7%94%A8)
介绍系统调用之前,我们先来了解一下用户态和系统态。
根据进程访问资源的特点,我们可以把进程在系统上的运行分为两个级别:
说了用户态和系统态之后,那么什么是系统调用呢?
我们运行的程序基本都是运行在用户态,如果我们调用操作系统提供的系统态级别的子功能咋办呢?那就需要系统调用了!
也就是说在我们运行的用户程序中,凡是与系统态级别的资源有关的操作(如文件管理、进程控制、内存管理等),都必须通过系统调用方式向操作系统提出服务请求,并由操作系统代为完成。
这些系统调用按功能大致可分为如下几类:
我在网上找了一个图,通过这个图可以很清晰的说明用户程序、系统调用、内核和硬件之间的关系。( 太难了~木有自己画 )
system/linux?id=_2-%E5%88%9D%E6%8E%A2-linux)
system/linux?id=_21-linux-%E7%AE%80%E4%BB%8B)
我们上面已经简单了 Linux,这里只强调三点。
system/linux?id=_22-linux-%E8%AF%9E%E7%94%9F)
1989 年,Linus Torvalds 进入芬兰陆军新地区旅,服 11 个月的国家义务兵役,军衔为少尉,主要服务于计算机部门,任务是弹道计算。服役期间,购买了安德鲁·斯图尔特·塔能鲍姆所著的教科书及 minix 源代码,开始研究操作系统。1990 年,他退伍后回到大学,开始接触 Unix。
Minix 是一个迷你版本的类 Unix 操作系统,由塔能鲍姆教授为了教学之用而创作,采用微核心设计。它启发了 Linux 内核的创作。
1991 年,Linus Torvalds 开源了 Linux 内核。Linux 以一只可爱的企鹅作为标志,象征着敢作敢为、热爱生活。
发行版本有哪些?](https://snailclimb.gitee.io/javaguide/#/docs/operating- system/linux?id=_23-%E5%B8%B8%E8%A7%81-linux-%E5%8F%91%E8%A1%8C%E7%89%88%E6%9C%AC%E6%9C%89%E5%93%AA%E4%BA%9B%EF%BC%9F)
Linus Torvalds 开源的只是 Linux 内核,我们上面也提到了操作系统内核的作用。一些组织或厂商将 Linux 内核与各种软件和文档包装起来,并提供系统安装界面和系统配置、设定与管理工具,就构成了 Linux 的发行版本。
内核主要负责系统的内存管理,硬件设备的管理,文件系统的管理以及应用程序的管理。
Linux 的发行版本可以大体分为两类:
对于初学者学习 Linux ,推荐选择 CentOS 。
system/linux?id=_3-linux-%E6%96%87%E4%BB%B6%E7%B3%BB%E7%BB%9F%E6%A6%82%E8%A7%88)
文件系统简介](https://snailclimb.gitee.io/javaguide/#/docs/operating- system/linux?id=_31-linux-%E6%96%87%E4%BB%B6%E7%B3%BB%E7%BB%9F%E7%AE%80%E4%BB%8B)
在 Linux 操作系统中,所有被操作系统管理的资源,例如网络接口卡、磁盘驱动器、打印机、输入输出设备、普通文件或是目录都被看作是一个文件。 也就是说在 Linux 系统中有一个重要的概念: 一切都是文件 。
其实这是 UNIX 哲学的一个体现,在 UNIX 系统中,把一切资源都看作是文件,Linux 的文件系统也是借鉴 UNIX 文件系统而来。
system/linux?id=_32-inode-%E4%BB%8B%E7%BB%8D)
inode 是 linux/unix 文件系统的基础。那么,inode 是什么?有什么作用呢?
硬盘的最小存储单位是扇区(Sector),块(block)由多个扇区组成。文件数据存储在块中。块的最常见的大小是 4kb,约为 8 个连续的扇区组成(每个扇区存储 512 字节)。一个文件可能会占用多个 block,但是一个块只能存放一个文件。
虽然,我们将文件存储在了块(block)中,但是我们还需要一个空间来存储文件的 元信息 metadata :如某个文件被分成几块、每一块在的地址、文件拥有者,创建时间,权限,大小等。这种 存储文件元信息的区域就叫 inode ,译为索引节点: i(index)+node 。 每个文件都有一个 inode,存储文件的元信息。
可以使用 stat 命令可以查看文件的 inode 信息。每个 inode 都有一个号码,Linux/Unix 操作系统不使用文件名来区分文件,而是使用 inode 号码区分不同的文件。
stat
简单来说:inode 就是用来维护某个文件被分成几块、每一块在的地址、文件拥有者,创建时间,权限,大小等信息。
简单总结一下:
system/linux?id=_33-linux-%E6%96%87%E4%BB%B6%E7%B1%BB%E5%9E%8B)
Linux 支持很多文件类型,其中非常重要的文件类型有: 普通文件 , 目录文件 , 链接文件 , 设备文件 , 管道文件 , Socket 套接字文件 等。
system/linux?id=_34-linux-%E7%9B%AE%E5%BD%95%E6%A0%91)
所有可操作的计算机资源都存在于目录树这个结构中,对计算资源的访问,可以看做是对这棵目录树的访问。
Linux 的目录结构如下:
Linux 文件系统的结构层次鲜明,就像一棵倒立的树,最顶层是其根目录:
常见目录说明:
system/linux?id=_4-linux-%E5%9F%BA%E6%9C%AC%E5%91%BD%E4%BB%A4)
下面只是给出了一些比较常用的命令。推荐一个 Linux 命令快查网站,非常不错,大家如果遗忘某些命令或者对某些命令不理解都可以在这里得到解决。
Linux 命令大全:http://man.linuxde.net/
system/linux?id=_41-%E7%9B%AE%E5%BD%95%E5%88%87%E6%8D%A2%E5%91%BD%E4%BB%A4)
cd usr
cd ..(或cd../)
cd /
cd ~
cd -
目录的操作命令(增删改查)](https://snailclimb.gitee.io/javaguide/#/docs/operating- system/linux?id=_42-%E7%9B%AE%E5%BD%95%E7%9A%84%E6%93%8D%E4%BD%9C%E5%91%BD%E4%BB%A4%E5%A2%9E%E5%88%A0%E6%94%B9%E6%9F%A5)
mkdir 目录名称
ls/ll
find 目录 参数
find .
/home
find /home -name "*.txt"
find /home -iname "*.txt"
find . \( -name "*.txt" -o -name "*.pdf" \)
find . -name "*.txt" -o -name "*.pdf"
mv 目录名称 新目录名称
mv 目录名称 目录的新位置
cp -r 目录名称 目录拷贝的目标位置
rm [-rf] 目录
rm -rf
文件的操作命令(增删改查)](https://snailclimb.gitee.io/javaguide/#/docs/operating- system/linux?id=_43-%E6%96%87%E4%BB%B6%E7%9A%84%E6%93%8D%E4%BD%9C%E5%91%BD%E4%BB%A4%E5%A2%9E%E5%88%A0%E6%94%B9%E6%9F%A5)
touch 文件名称
cat/more/less/tail 文件名称
tail -f 文件
tail -f catalina-2016-11-11.log
vim 文件
vim 文件------>进入文件----->命令模式------>按i进入编辑模式----->编辑文件 ------->按Esc进入底行模式----->输入:wq/q!
rm -rf 文件
system/linux?id=_44-%E5%8E%8B%E7%BC%A9%E6%96%87%E4%BB%B6%E7%9A%84%E6%93%8D%E4%BD%9C%E5%91%BD%E4%BB%A4)
1)打包并压缩文件:
Linux 中的打包文件一般是以.tar 结尾的,压缩的命令一般是以.gz 结尾的。而一般情况下打包和压缩是一起进行的,打包并压缩后的文件的后缀名一般.tar.gz。 命令:tar -zcvf 打包压缩后的文件名 要打包压缩的文件 ,其中:
tar -zcvf 打包压缩后的文件名 要打包压缩的文件
比如:假如 test 目录下有三个文件分别是:aaa.txt bbb.txt ccc.txt,如果我们要打包 test 目录并指定压缩后的压缩包名称为 test.tar.gz 可以使用命令: tar -zcvf test.tar.gz aaa.txt bbb.txt ccc.txt 或 tar -zcvf test.tar.gz /test/
tar -zcvf test.tar.gz aaa.txt bbb.txt ccc.txt
tar -zcvf test.tar.gz /test/
2)解压压缩包:
命令:`tar [-xvf] 压缩文件``
其中:x:代表解压
示例:
tar -xvf test.tar.gz
tar -xvf test.tar.gz -C /usr
system/linux?id=_45-linux-%E7%9A%84%E6%9D%83%E9%99%90%E5%91%BD%E4%BB%A4)
操作系统中每个文件都拥有特定的权限、所属用户和所属组。权限是操作系统用来限制资源访问的机制,在 Linux 中权限一般分为读(readable)、写(writable)和执行(excutable),分为三组。分别对应文件的属主(owner),属组(group)和其他用户(other),通过这样的机制来限制哪些用户、哪些组可以对特定的文件进行什么样的操作。
通过 ls -l 命令我们可以 查看某个目录下的文件或目录的权限
ls -l
示例:在随意某个目录下ls -l
第一列的内容的信息解释如下:
下面将详细讲解文件的类型、Linux 中权限以及文件有所有者、所在组、其它组具体是什么?
文件的类型:
Linux 中权限分为以下几种:
文件和目录权限的区别:
对文件和目录而言,读写执行表示不同的意义。
对于文件:
对于目录:
需要注意的是: 超级用户可以无视普通用户的权限,即使文件目录权限是 000,依旧可以访问。
在 linux 中的每个用户必须属于一个组,不能独立于组外。在 linux 中每个文件有所有者、所在组、其它组的概念。
ls ‐ahl
我们再来看看如何修改文件/目录的权限。
修改文件/目录的权限的命令:chmod
chmod
示例:修改/test 下的 aaa.txt 的权限为文件所有者有全部权限,文件所有者所在的组有读写权限,其他用户只有读的权限。
chmod u=rwx,g=rw,o=r aaa.txt 或者 chmod 764 aaa.txt
chmod u=rwx,g=rw,o=r aaa.txt
chmod 764 aaa.txt
补充一个比较常用的东西:
假如我们装了一个 zookeeper,我们每次开机到要求其自动启动该怎么办?
chmod +x zookeeper
chkconfig --add zookeeper
chkconfig --list
system/linux?id=_46-linux-%E7%94%A8%E6%88%B7%E7%AE%A1%E7%90%86)
Linux 系统是一个多用户多任务的分时操作系统,任何一个要使用系统资源的用户,都必须首先向系统管理员申请一个账号,然后以这个账号的身份进入系统。
用户的账号一方面可以帮助系统管理员对使用系统的用户进行跟踪,并控制他们对系统资源的访问;另一方面也可以帮助用户组织文件,并为用户提供安全性保护。
Linux 用户管理相关命令:
useradd 选项 用户名
userdel 选项 用户名
usermod 选项 用户名
passwd 用户名
passwd -S 用户名
passwd -d 用户名
useradd 命令用于 Linux 中创建的新的系统用户。useradd可用来建立用户帐号。帐号建好之后,再用passwd设定帐号的密码.而可用userdel删除帐号。使用useradd指令所建立的帐号,实际上是保存在 /etc/passwd文本文件中。
useradd
passwd
userdel
/etc/passwd
passwd命令用于设置用户的认证信息,包括用户密码、密码过期时间等。系统管理者则能用它管理系统用户的密码。只有管理者可以指定用户名称,一般用户只能变更自己的密码。
系统用户组的管理](https://snailclimb.gitee.io/javaguide/#/docs/operating- system/linux?id=_47-linux-%E7%B3%BB%E7%BB%9F%E7%94%A8%E6%88%B7%E7%BB%84%E7%9A%84%E7%AE%A1%E7%90%86)
每个用户都有一个用户组,系统可以对一个用户组中的所有用户进行集中管理。不同 Linux 系统对用户组的规定有所不同,如 Linux 下的用户属于与它同名的用户组,这个用户组在创建用户时同时创建。
用户组的管理涉及用户组的添加、删除和修改。组的增加、删除和修改实际上就是对/etc/group文件的更新。
/etc/group
Linux 系统用户组的管理相关命令:
groupadd 选项 用户组
groupdel 用户组
groupmod 选项 用户组
system/linux?id=_48-%E5%85%B6%E4%BB%96%E5%B8%B8%E7%94%A8%E5%91%BD%E4%BB%A4)
pwd
sudo + 其他命令
grep 要搜索的字符串 要搜索的文件 --color
ps -ef
ps -aux
ps aux|grep redis
pgrep redis -a
kill -9 进程的pid
net-tools
iproute2
shutdown
shutdown -h now
shutdown +5 "System will shutdown after 5 minutes"
reboot
reboot -w
原文链接:https://www.cnblogs.com/javaguide/p/13497712.html