同步操作将从 SnailClimb/JavaGuide 强制同步,此操作会覆盖自 Fork 仓库以来所做的任何修改,且无法恢复!!!
确定后同步将在后台操作,完成时将刷新页面,请耐心等待。
title | category | tag | head | |||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|
Linux 基础知识总结 |
计算机基础 |
|
|
简单介绍一下 Java 程序员必知的 Linux 的一些概念以及常见命令。
通过以下三点可以概括 Linux 到底是什么:
1989 年,Linus Torvalds 进入芬兰陆军新地区旅,服 11 个月的国家义务兵役,军衔为少尉,主要服务于计算机部门,任务是弹道计算。服役期间,购买了安德鲁·斯图尔特·塔能鲍姆所著的教科书及 minix 源代码,开始研究操作系统。1990 年,他退伍后回到大学,开始接触 Unix。
Minix 是一个迷你版本的类 Unix 操作系统,由塔能鲍姆教授为了教学之用而创作,采用微核心设计。它启发了 Linux 内核的创作。
1991 年,Linus Torvalds 开源了 Linux 内核。Linux 以一只可爱的企鹅作为标志,象征着敢作敢为、热爱生活。
Linus Torvalds 开源的只是 Linux 内核,我们上面也提到了操作系统内核的作用。一些组织或厂商将 Linux 内核与各种软件和文档包装起来,并提供系统安装界面和系统配置、设定与管理工具,就构成了 Linux 的发行版本。
内核主要负责系统的内存管理,硬件设备的管理,文件系统的管理以及应用程序的管理。
Linux 的发行版本可以大体分为两类:
对于初学者学习 Linux ,推荐选择 CentOS,原因如下:
在 Linux 操作系统中,一切被操作系统管理的资源,如网络接口卡、磁盘驱动器、打印机、输入输出设备、普通文件或目录等,都被视为文件。这是 Linux 系统中一个重要的概念,即"一切都是文件"。
这种概念源自 UNIX 哲学,即将所有资源都抽象为文件的方式来进行管理和访问。Linux 的文件系统也借鉴了 UNIX 文件系统的设计理念。这种设计使得 Linux 系统可以通过统一的文件接口来管理和操作不同类型的资源,从而实现了一种统一的文件操作方式。例如,可以使用类似于读写文件的方式来对待网络接口、磁盘驱动器、设备文件等,使得操作和管理这些资源更加统一和简便。
这种文件为中心的设计理念为 Linux 系统带来了灵活性和可扩展性,使得 Linux 成为一种强大的操作系统。同时,这也是 Linux 系统的一大特点,深受广大用户和开发者的喜欢和推崇。
inode 是 Linux/Unix 文件系统的基础。那 inode 到是什么?有什么作用呢?
通过以下五点可以概括 inode 到底是什么:
stat
命令可以查看文件的 inode 信息,包括文件的 inode 号、文件类型、权限、所有者、文件大小、修改时间。简单来说:inode 就是用来维护某个文件被分成几块、每一块在的地址、文件拥有者,创建时间,权限,大小等信息。
再总结一下 inode 和 block:
stat
命令查看 inode 信息。可以看出,Linux/Unix 操作系统使用 inode 区分不同的文件。这样做的好处是,即使文件名被修改或删除,文件的 inode 号码不会改变,从而可以避免一些因文件重命名、移动或删除导致的错误。同时,inode 也可以提供更高的文件系统性能,因为 inode 的访问速度非常快,可以直接通过 inode 号码定位到文件的元数据信息,无需遍历整个文件系统。
不过,使用 inode 号码也使得文件系统在用户和应用程序层面更加抽象和复杂,需要通过系统命令或文件系统接口来访问和管理文件的 inode 信息。
在 Linux/类 Unix 系统上,文件链接(File Link)是一种特殊的文件类型,可以在文件系统中指向另一个文件。常见的文件链接类型有两种:
1、硬链接(Hard Link)
ln
命令用于创建硬链接。2、软链接(Symbolic Link 或 Symlink)
ln -s
命令用于创建软链接。硬链接为什么不能跨文件系统?
我们之前提到过,硬链接是通过 inode 节点号建立连接的,而硬链接和源文件共享相同的 inode 节点号。
然而,每个文件系统都有自己的独立 inode 表,且每个 inode 表只维护该文件系统内的 inode。如果在不同的文件系统之间创建硬链接,可能会导致 inode 节点号冲突的问题,即目标文件的 inode 节点号已经在该文件系统中被使用。
Linux 支持很多文件类型,其中非常重要的文件类型有: 普通文件,目录文件,链接文件,设备文件,管道文件,Socket 套接字文件 等。
每种文件类型都有不同的用途和属性,可以通过命令如ls
、file
等来查看文件的类型信息。
# 普通文件(-)
-rw-r--r-- 1 user group 1024 Apr 14 10:00 file.txt
# 目录文件(d,directory file)*
drwxr-xr-x 2 user group 4096 Apr 14 10:00 directory/
# 套接字文件(s,socket)
srwxrwxrwx 1 user group 0 Apr 14 10:00 socket
Linux 使用一种称为目录树的层次结构来组织文件和目录。目录树由根目录(/)作为起始点,向下延伸,形成一系列的目录和子目录。每个目录可以包含文件和其他子目录。结构层次鲜明,就像一棵倒立的树。
常见目录说明:
下面只是给出了一些比较常用的命令。
推荐一个 Linux 命令快查网站,非常不错,大家如果遗忘某些命令或者对某些命令不理解都可以在这里得到解决。Linux 命令在线速查手册:https://wangchujiang.com/linux-command/ 。
另外,shell.how 这个网站可以用来解释常见命令的意思,对你学习 Linux 基本命令以及其他常用命令(如 Git、NPM)。
cd usr
:切换到该目录下 usr 目录cd ..(或cd../)
:切换到上一层目录cd /
:切换到系统根目录cd ~
:切换到用户主目录cd -
: 切换到上一个操作所在目录ls
:显示目录中的文件和子目录的列表。例如:ls /home
,显示 /home
目录下的文件和子目录列表。ll
:ll
是 ls -l
的别名,ll 命令可以看到该目录下的所有目录和文件的详细信息mkdir [选项] 目录名
:创建新目录(增)。例如:mkdir -m 755 my_directory
,创建一个名为 my_directory
的新目录,并将其权限设置为 755,即所有用户对该目录有读、写和执行的权限。find [路径] [表达式]
:在指定目录及其子目录中搜索文件或目录(查),非常强大灵活。例如:① 列出当前目录及子目录下所有文件和文件夹: find .
;② 在/home
目录下查找以 .txt
结尾的文件名:find /home -name "*.txt"
,忽略大小写: find /home -i name "*.txt"
;③ 当前目录及子目录下查找所有以 .txt
和 .pdf
结尾的文件:find . \( -name "*.txt" -o -name "*.pdf" \)
或find . -name "*.txt" -o -name "*.pdf"
。pwd
:显示当前工作目录的路径。rmdir [选项] 目录名
:删除空目录(删)。例如:rmdir -p my_directory
,删除名为 my_directory
的空目录,并且会递归删除my_directory
的空父目录,直到遇到非空目录或根目录。rm [选项] 文件或目录名
:删除文件/目录(删)。例如:rm -r my_directory
,删除名为 my_directory
的目录,-r
(recursive,递归) 表示会递归删除指定目录及其所有子目录和文件。cp [选项] 源文件/目录 目标文件/目录
:复制文件或目录(移)。例如:cp file.txt /home/file.txt
,将 file.txt
文件复制到 /home
目录下,并重命名为 file.txt
。cp -r source destination
,将 source
目录及其下的所有子目录和文件复制到 destination
目录下,并保留源文件的属性和目录结构。mv [选项] 源文件/目录 目标文件/目录
:移动文件或目录(移),也可以用于重命名文件或目录。例如:mv file.txt /home/file.txt
,将 file.txt
文件移动到 /home
目录下,并重命名为 file.txt
。mv
与 cp
的结果不同,mv
好像文件“搬家”,文件个数并未增加。而 cp
对文件进行复制,文件个数增加了。像 mv
、cp
、rm
等文件和目录都适用的命令,这里就不重复列举了。
touch [选项] 文件名..
:创建新文件或更新已存在文件(增)。例如:touch file1.txt file2.txt file3.txt
,创建 3 个文件。ln [选项] <源文件> <硬链接/软链接文件>
:创建硬链接/软链接。例如:ln -s file.txt file_link
,创建名为 file_link
的软链接,指向 file.txt
文件。-s
选项代表的就是创建软链接,s 即 symbolic(软链接又名符号链接) 。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!代表强制退出不保存)。1)打包并压缩文件:
Linux 中的打包文件一般是以 .tar
结尾的,压缩的命令一般是以 .gz
结尾的。而一般情况下打包和压缩是一起进行的,打包并压缩后的文件的后缀名一般 .tar.gz
。
命令: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/
。
2)解压压缩包:
命令:tar [-xvf] 压缩文件
其中 x 代表解压
示例:
/test
下的 test.tar.gz
解压到当前目录下可以使用命令:tar -xvf test.tar.gz
tar -xvf test.tar.gz -C /usr
(-C
代表指定解压的位置)scp [选项] 源文件 远程文件
(scp 即 secure copy,安全复制):用于通过 SSH 协议进行安全的文件传输,可以实现从本地到远程主机的上传和从远程主机到本地的下载。例如:scp -r my_directory user@remote:/home/user
,将本地目录my_directory
上传到远程服务器 /home/user
目录下。scp -r user@remote:/home/user/my_directory
,将远程服务器的 /home/user
目录下的my_directory
目录下载到本地。需要注意的是,scp
命令需要在本地和远程系统之间建立 SSH 连接进行文件传输,因此需要确保远程服务器已经配置了 SSH 服务,并且具有正确的权限和认证方式。rsync [选项] 源文件 远程文件
: 可以在本地和远程系统之间高效地进行文件复制,并且能够智能地处理增量复制,节省带宽和时间。例如:rsync -r my_directory user@remote:/home/user
,将本地目录my_directory
上传到远程服务器 /home/user
目录下。ftp
(File Transfer Protocol):提供了一种简单的方式来连接到远程 FTP 服务器并进行文件上传、下载、删除等操作。使用之前需要先连接登录远程 FTP 服务器,进入 FTP 命令行界面后,可以使用 put
命令将本地文件上传到远程主机,可以使用get
命令将远程主机的文件下载到本地,可以使用 delete
命令删除远程主机的文件。这里就不进行演示了。操作系统中每个文件都拥有特定的权限、所属用户和所属组。权限是操作系统用来限制资源访问的机制,在 Linux 中权限一般分为读(readable)、写(writable)和执行(executable),分为三组。分别对应文件的属主(owner),属组(group)和其他用户(other),通过这样的机制来限制哪些用户、哪些组可以对特定的文件进行什么样的操作。
通过 ls -l
命令我们可以 查看某个目录下的文件或目录的权限
示例:在随意某个目录下ls -l
第一列的内容的信息解释如下:
下面将详细讲解文件的类型、Linux 中权限以及文件有所有者、所在组、其它组具体是什么?
文件的类型:
Linux 中权限分为以下几种:
文件和目录权限的区别:
对文件和目录而言,读写执行表示不同的意义。
对于文件:
权限名称 | 可执行操作 |
---|---|
r | 可以使用 cat 查看文件的内容 |
w | 可以修改文件的内容 |
x | 可以将其运行为二进制文件 |
对于目录:
权限名称 | 可执行操作 |
---|---|
r | 可以查看目录下列表 |
w | 可以创建和删除目录下文件 |
x | 可以使用 cd 进入目录 |
需要注意的是:超级用户可以无视普通用户的权限,即使文件目录权限是 000,依旧可以访问。
在 linux 中的每个用户必须属于一个组,不能独立于组外。在 linux 中每个文件有所有者、所在组、其它组的概念。
ls ‐ahl
命令可以看到文件的所有者 也可以使用 chown 用户名 文件名来修改文件的所有者 。ls ‐ahl
命令可以看到文件的所有组也可以使用 chgrp 组名 文件名来修改文件所在的组。我们再来看看如何修改文件/目录的权限。
修改文件/目录的权限的命令:chmod
示例:修改/test 下的 aaa.txt 的权限为文件所有者有全部权限,文件所有者所在的组有读写权限,其他用户只有读的权限。
chmod u=rwx,g=rw,o=r aaa.txt
或者 chmod 764 aaa.txt
补充一个比较常用的东西:
假如我们装了一个 zookeeper,我们每次开机到要求其自动启动该怎么办?
chmod +x zookeeper
chkconfig --add zookeeper
chkconfig --list
Linux 系统是一个多用户多任务的分时操作系统,任何一个要使用系统资源的用户,都必须首先向系统管理员申请一个账号,然后以这个账号的身份进入系统。
用户的账号一方面可以帮助系统管理员对使用系统的用户进行跟踪,并控制他们对系统资源的访问;另一方面也可以帮助用户组织文件,并为用户提供安全性保护。
Linux 用户管理相关命令:
useradd [选项] 用户名
:创建用户账号。使用useradd
指令所建立的帐号,实际上是保存在 /etc/passwd
文本文件中。userdel [选项] 用户名
:删除用户帐号。usermod [选项] 用户名
:修改用户账号的属性和配置比如用户名、用户 ID、家目录。passwd [选项] 用户名
: 设置用户的认证信息,包括用户密码、密码过期时间等。。例如:passwd -S 用户名
,显示用户账号密码信息。passwd -d 用户名
: 清除用户密码,会导致用户无法登录。passwd 用户名
,修改用户密码,随后系统会提示输入新密码并确认密码。su [选项] 用户名
(su 即 Switch User,切换用户):在当前登录的用户和其他用户之间切换身份。每个用户都有一个用户组,系统可以对一个用户组中的所有用户进行集中管理。不同 Linux 系统对用户组的规定有所不同,如 Linux 下的用户属于与它同名的用户组,这个用户组在创建用户时同时创建。
用户组的管理涉及用户组的添加、删除和修改。组的增加、删除和修改实际上就是对/etc/group
文件的更新。
Linux 系统用户组的管理相关命令:
groupadd [选项] 用户组
:增加一个新的用户组。groupdel 用户组
:要删除一个已有的用户组。groupmod [选项] 用户组
: 修改用户组的属性。top [选项]
:用于实时查看系统的 CPU 使用率、内存使用率、进程信息等。htop [选项]
:类似于 top
,但提供了更加交互式和友好的界面,可让用户交互式操作,支持颜色主题,可横向或纵向滚动浏览进程列表,并支持鼠标操作。uptime [选项]
:用于查看系统总共运行了多长时间、系统的平均负载等信息。vmstat [间隔时间] [重复次数]
:vmstat (Virtual Memory Statistics) 的含义为显示虚拟内存状态,但是它可以报告关于进程、内存、I/O 等系统整体运行状态。free [选项]
:用于查看系统的内存使用情况,包括已用内存、可用内存、缓冲区和缓存等。df [选项] [文件系统]
:用于查看系统的磁盘空间使用情况,包括磁盘空间的总量、已使用量和可用量等,可以指定文件系统上。例如:df -a
,查看全部文件系统。du [选项] [文件]
:用于查看指定目录或文件的磁盘空间使用情况,可以指定不同的选项来控制输出格式和单位。sar [选项] [时间间隔] [重复次数]
:用于收集、报告和分析系统的性能统计信息,包括系统的 CPU 使用、内存使用、磁盘 I/O、网络活动等详细信息。它的特点是可以连续对系统取样,获得大量的取样数据。取样数据和分析的结果都可以存入文件,使用它时消耗的系统资源很小。ps [选项]
:用于查看系统中的进程信息,包括进程的 ID、状态、资源使用情况等。ps -ef
/ps -aux
:这两个命令都是查看当前系统正在运行进程,两者的区别是展示格式不同。如果想要查看特定的进程可以使用这样的格式:ps aux|grep redis
(查看包括 redis 字符串的进程),也可使用 pgrep redis -a
。systemctl [命令] [服务名称]
:用于管理系统的服务和单元,可以查看系统服务的状态、启动、停止、重启等。ping [选项] 目标主机
:测试与目标主机的网络连接。ifconfig
或 ip
:用于查看系统的网络接口信息,包括网络接口的 IP 地址、MAC 地址、状态等。netstat [选项]
:用于查看系统的网络连接状态和网络统计信息,可以查看当前的网络连接情况、监听端口、网络协议等。ss [选项]
:比 netstat
更好用,提供了更快速、更详细的网络连接信息。sudo + 其他命令
:以系统管理者的身份执行指令,也就是说,经由 sudo 所执行的指令就好像是 root 亲自执行。grep 要搜索的字符串 要搜索的文件 --color
:搜索命令,--color 代表高亮显示。kill -9 进程的pid
:杀死进程(-9 表示强制终止)先用 ps 查找进程,然后用 kill 杀掉。shutdown
:shutdown -h now
:指定现在立即关机;shutdown +5 "System will shutdown after 5 minutes"
:指定 5 分钟后关机,同时送出警告信息给登入用户。reboot
:reboot
:重开机。reboot -w
:做个重开机的模拟(只有纪录并不会真的重开机)。在 Linux 系统中,环境变量是用来定义系统运行环境的一些参数,比如每个用户不同的主目录(HOME)。
按照作用域来分,环境变量可以简单的分成:
~/.bashrc
、~/.bash_profile
。/etc/bashrc
、/etc/environment
、/etc/profile
、/etc/profile.d
。上述配置文件执行先后顺序为:/etc/environment
–> /etc/profile
–> /etc/profile.d
–> ~/.bash_profile
–> /etc/bashrc
–> ~/.bashrc
如果要修改系统级别环境变量文件,需要管理员具备对该文件的写入权限。
建议用户级别环境变量在 ~/.bash_profile
中配置,系统级别环境变量在 /etc/profile.d
中配置。
按照生命周期来分,环境变量可以简单的分成:
export
命令,在当前终端下声明环境变量,关闭 shell 终端失效。通过 export
命令可以输出当前系统定义的所有环境变量。
# 列出当前的环境变量值
export -p
除了 export
命令之外, env
命令也可以列出所有环境变量。
echo
命令可以输出指定环境变量的值。
# 输出当前的PATH环境变量的值
echo $PATH
# 输出当前的HOME环境变量的值
echo $HOME
通过 export
命令可以修改指定的环境变量。不过,这种方式修改环境变量仅仅对当前 shell 终端生效,关闭 shell 终端就会失效。修改完成之后,立即生效。
export CLASSPATH=./JAVA_HOME/lib;$JAVA_HOME/jre/lib
通过 vim
命令修改环境变量配置文件。这种方式修改环境变量永久有效。
vim ~/.bash_profile
如果修改的是系统级别环境变量则对所有用户生效,如果修改的是用户级别环境变量则仅对当前用户生效。
修改完成之后,需要 source
命令让其生效或者关闭 shell 终端重新登录。
source /etc/profile
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。