Linux 基础

引言

Linux 主要的应用场景

1. 服务器领域
2. 嵌入式设备,例如:空调、冰箱…
3. 移动端,例如:Android 内核就是 Linux

Linux 环境搭建

要想学习 Linux,在这之前,我们需要先有一个 Linux 的环境,这里推荐的方式是:使用云服务器,可以直接在 【 腾讯云、或阿里云、或华为云 】等服务器厂商处直接购买一个云服务器。

使用云服务器这样的方式,环境搭建简单。最主要的是,我们部署在云服务器上的项目可以直接被外网访问到,这就和一个公司发布一个正式的网站没有任何区别,也就是说,我们自己通过代码写出来的项目,能够真正地让别人用。

我之前在学校的时候,使用过 VMWare 虚拟机,不过那样很折腾人,此外,也没有什么实际意义。

Linux 重点应该学习什么

1. 基础操作 ( 基于命令行的操作 )
Linux 虽然也有像 Windows 那样的图形化界面,但很少能够用到。

2. 系统编程 + 网络编程
必须明确:一个操作系统的存在,对下,要管理各种硬件设备;对上,要为各种软件提供一个稳定的运行环境。然而,如何编写一个能运行在 Linux 系统上的程序,这是一个很重要的话题。但是,由于 Java 天生就是 " 跨平台 " 的,同样的代码,Windows上怎么写,换到 Linux 上,完全一样!
所以说,这一块的编程内容主要是学习 C++ 的小伙伴需要研究的内容。

3. 部署一个 Java - Web 程序
这就是本篇博客的重点所在。

声明

必须明确:

一个完整的操作系统 = 操作系统内核 + 配套的应用程序。

然而,Linux 严格意义来说只是一个 " 操作系统内核 ",因此,有些公司 / 开源组织又基于 Linux 内核,提供了不同的配套程序,这就构成了不同的 " 发行版 "。

3

然而,本篇博客主要对应的 CentOS 7 这样的发行版。

一、Xshell 常用技巧

Ctrl + insert // 复制
Shift + insert // 粘贴
Ctrl + c  // 中断当前操作,并另起一行重新输入
Tab // 补全 Linux 命令
clear // 清屏

二、文件的类型与权限

下图是我随便截取的一些目录和文件,我们可以看到,一行最开头,形如 " -rw-r–r–" 这样的字母,让我们很难懂是什么意思。此外,一些文件,有些是蓝色的,有些是绿色的,这也是很难懂。

1-0

(1) 我们先来解决第一个问题

一个文件的权限分为三种,可读、可写、可执行。

r 表示可读,w 表示可写,x 表示可执行。
( read, write, execute )

例如:" rwx " 就是一个可读可写可执行的文件。
例如:" -rw " 就是一个可读可写不可执行的文件。

此外,Linux 把用户分成了三类
① 文件拥有者
② 文件拥有者的同组用户
③ 其他用户

那么,10 个字母的 " 2-10 " 位,就分别对应着三类用户的权限。
第一个字母与用户无关,表示文件类型," d " 表示目录," - " 表示普通文件。

请看下图:

1-1

(2) 再来看第二个问题

蓝色的表示目录,白色表示普通文件,绿色表示可执行文件,红色表示压缩包。

(3) 修改文件权限

  • " + " :向权限范围增加权限代号所表示的权限
  • " - " :向权限范围取消权限代号所表示的权限
  • " = " :向权限范围赋予权限代号所表示的权限
  • " u " :拥有者
  • " g " :拥有者同组用户
  • " o " :其它用户
  • " a " :所有用户

格式:

chmod u+x *.txt // 针对拥有者,为 txt 文件加上可执行权限
chmod u-x *.txt // 针对拥有者,为 txt 文件去除可执行权限
chmod a+x *.txt // 针对所有用户,为 txt 文件加上可执行权限
......

展示:

3-8

注意:修改文件类型以及某类用户的权限,只有 root 才有这个权力取执行这些操作, root 在 Linux 系统上,具有至高的权力,所以,它也不用遵守上面的一系列规则。

三、Linux 权限

命令提示符

在我们每次输入命令的时候,都会看到前面有个框框,那是什么意思呢?

6

两类用户

Linux 下有两种用户:管理员(root)、普通用户。
管理员:可以在 Linux 下做任何事情,不受限制。
普通用户:在 Linux 下做有限的事情。

管理员的命令提示符是 " # ",普通用户的命令提示符是 " $ "。
我们的服务器买好了,默认就是 root 用户,但 root 用户权力比较大,一旦使用不当可能会造成严重后果 ( 例如 rm -rf / 操作)。

因此我们在公司中工作的时候,不会直接使用 root 用户来操作服务器。
如果在学习的过程中,一台云服务器属于个人私有,那其实就无所谓 root 的使用。
如果在学校中,几个同学一起使用一台云服务器,那么建议,每个人都要创建一个用户和对应的密码,以此来做到互不干扰。

用户操作

声明:创建某个用户、配置 / 修改某个用户的密码 都仅只可由 root 用户来操作。

1. 创建用户

useradd 用户名

2. 配置密码

passwd 用户名

注意,往命令行输入密码的时候,在控制台中不会有提示,但已经输入进去了。

3. 切换用户

su 用户名

例如:从 root 用户切换到 Jack 用户 【su Jack】
例如:从 Jack 用户切换到 root 用户 【su】/ 【su root】

一般情况下,从 root 切换成 普通用户,不需要输入密码;
从 普通用户切换成 root,需要输入管理员对应的密码。

四、Linux 命令

1. ls 命令

ls 目录/文件

" ls " 这个命令既可以对目录使用,又可以对文件使用。
对于目录,该命令列出该目录下的所有子目录与文件。
对于文件,将列出文件名以及其他信息。

一般来说," ls " 这个命令只用于目录。

ls 后跟选项

ls -l // 列出目录的详细信息
ls -a // 列出目录下的所有文件,包括以 . 开头的隐含文件
ls -r // 对目录进行反向排序
ls -t // 将目录以时间排序

" ls -l " 与 " ll " 用法等价。

像上面的 ls 命令后面跟的 " -l “,” -a “,” -r " 这些称为选项,这表示,这些选项基于 ls 命令下的一些衍生操作。

1

此外,ls 的选项可以搭配使用。

2

2. pwd 命令

pwd 目录

" pwd " 表示显示当前所在的目录。

3

3. cd 命令

cd 目录/路径

" cd " 表示改变当前的工作目录,也就说,切换文件夹。

cd .  // 进入当前的目录,原地不动
cd .. // 返回上级目录
cd /  // 切换至根目录
cd ~  // 切换至用户家目录

Linux 的目录 与 Windows 的文件夹

实际上,Linux 中的 " cd " 命令和 Windows 的切换文件夹是一个道理,只不过前者是基于命令行实现的,后者是基于图形化界面实现的。

下图就是用树形结构所展示出来的目录结构,或者说,Linux 和 Windows 管理文件的方式,都具有树形结构的思想。

Linux 系统:

4

Windows 系统:

5

绝对路径和相对路径

在 Linux 中,以根目录开头的,就是绝对路径。

/tomcat/logs 

在 Linux 中,以 " . " 或 " … " 开头的,就是相对路径。

./logs

此外,必须明确,在 Linux 中,没有像 Windows 系统中那样盘符(C 盘、D 盘)的概念,在 Linux 中,所有的目录和文件都是起源于根目录 " / ",没错,就是一个斜杠。
所以说,使用 " cd / " 就相当于我们在 Windows 上点击了 " 此电脑 "。

什么是家目录?

当我们登录一个用户的时候,来到的一个目录,也即表示当前用户的家。
下图就是 Ron 用户的家目录。" /home/Ron " 就是 Ron 用户登录时,来到的默认目录,也就是 Ron 的家目录

3-3

4. touch / cat / echo 命令

(1) touch 命令

touch 文件

" touch " 表示创建一个文件。

(2) cat 命令

cat 文件

" cat " 表示读取文件。

(3) echo 命令

echo 文件

" echo " 表示写文件。

展示

5-1

必须明确:" touch / cat / echo " 这三个命令只能对一些简单的文件进行一些简单的操作,并不能有效地解决读写问题。这三个命令只是用来便捷操作。

5. mkdir 命令

mkdir 目录

" mkdir " 表示创建一个目录,即表示创建一个文件夹。
" mkdir " => " make directory "

6. rm 命令

" rm " => " remove "

(1) 删除文件

rm 文件
rm -f 文件

" -f " 表示强制操作,不会询问。

" rm 文件 " 表示删除单个文件,删除前会询问。
" rm -f 文件 " 表示删除单个文件,删除不会询问。

展示

y 表示 yes,n 表示 no.

6-6

(2) 删除目录

rm -r 目录
rm -rf 目录

" -r " 表示递归," -f " 表示强制操作,不会询问。

" rm -r 目录 " 表示递归指定目录,一个个删文件,删除前会询问。
" rm -rf 目录 " 表示删除指定目录以及其对应的所有文件,删除前,不会询问。

展示

我们在 test1 目录下,创建一个目录,三个文件。

6-1

使用 " rm -r " 进行递归的时候,每次遇到一个文件,都会询问你是否删除,删除输入 yes,不删除输入 no.

6-2

使用 " rm -rf " 删除的时候,不会询问,直接删除指定目录以及其下的所有文件。

6-3

注意事项 ( 重要 )

针对上面的删除操作,我们应该谨慎行之。
因为,大多数情况下,Linux 系统默认就是没有回收站的,一旦执行删除命令,就直接将数据直接从服务器上彻底删去。所以说,rm 是一个很危险的操作,只有在我们再三确认后,才能删去文件。

此外,永远不要尝试 " rm -rf / " 这个命令。
这个命令会直接将根目录下所有的数据删除掉,也就是说,系统本身预装的东西,也会因为这个命令,随之消失。特别是在公司的时候,如果执行此操作,就会带来不可逆的影响。

这个命令会导致 Linux 系统瞬间崩坏,所有数据直接消失,如果还想再次使用服务器,只能重装系统。

小伙伴们应该都知道重装 Windows 的效果,打开界面,就是新的东西。而 Linux 也是一样的,一些数据未备份,就会丢失。

7. tree . 命令

可以看到,上面的 " tree . " 命令,可以为我们展示当前目录下的树形结构。
如果系统没有预装这个功能,我们可以通过下面的命令,进行安装,而 " yum ",我们可以将其理解为 Linux 系统上的应用商店。

yum -y install tree

8. cp 命令

" cp " => " copy "

cp 文件 文件
cp 文件 路径
cp -r 目录 目录

" cp " 表示能够 复制 文件或目录。

展示

我们在 test 目录下,创建一个目录,三个文件。

7-1

(1) 复制文件并重命名

7-2

(2) 复制文件到指定路径

7-3

(3) 复制目录并重命名
复制目录需要带上 " -r ",表示递归复制的含义,即将原目录及其下的所有文件,也复制到新的目录中。

7-4

9. mv 命令

" mv " => " move "

mv 文件 文件
mv 文件 路径
mv 目录 目录

" mv " 表示能够 移动 / 重命名 文件或目录。

展示

我们在 test 目录下,创建一个目录,三个文件。

8-1

(1) 重命名文件

8-2

(2) 移动文件到指定路径

8-3

(3) 当第二个参数不是已存在的目录时,重命名目录
在这里," mv " 并不需要加上 " -r ".

8-4

(4) 当第二个参数是已存在的目录时,移动目录至存在目录下。

8-5

10. less 命令

less 文件

" less " 表示查看文件,使用 " less " 命令查看文件,通过【方向键】上下 可以实现翻页功能。键盘输入 " q ",表示退出查看文件的界面。

此外," less " 命令只能进行文件的查看,不能进行文件的编辑。

" less " 命令最大的优势在于,能够对于大文件进行 " 秒开 "。

正常的一个编辑器打开文件的时候,就是直接将文件内容都读到内存中,这就涉及到大量的磁盘 IO. 此时,如果文件很大 ( 几个G ),就会打开的很慢,甚至打开失败。比方说,我们前面介绍的 " cat " 命令,就是一下子将所有的数据读出来并显示。

然而," less " 命令只是将当前屏幕显示的这一块给加载到内存中,随着用户的手动翻页,就会不断地加载新的部分,这其实就是懒加载的思想,类似于单例模式中的懒汉模式。( 需要用到了数据,才会执行 )

综上所述,在日常开发中,若我们在服务器上需要打开一个大文件,使用 " less " 命令就是一个明智的选择。

11. head / tail 命令

head 文件
head -n (数值) 文件

" head " 默认表示查看当前文件的前 10 行,也可以通过 " -n " 选项,来控制查看的行数。如下:第二次,我就控制了前 20 行。

9-1

tail 文件
tail-n (数值) 文件

" tail " 默认表示查看当前文件的末尾 10 行,也可以通过 " -n " 选项,来控制查看的行数。如下:第二次,我就控制了末尾 20 行。

9-2

12. vim 命令

vim 文件

" vim " 命令就是 Linux 上的记事本,既能读,也能编辑。

然而," vim " 又不仅仅是一个记事本,它也能作为 " 代码开发工具 “,学习 C++ 的小伙伴,就都是用 " vim " 来写代码的。实际上,” vim " 能够支持很多的插件,通过插件,可以对 " vim " 本身进行扩展,例如:语法高亮、代码补全、变量重命名…

然而,不管 " vim " 再怎么配置,很难达到 " IDEA " 编译器那样的水准。因为," vim " 本身就是很多年前的东西了。

作为 Java 开发人员,学习 " vim ",就只需要能够使用 " vim " 在服务器上进行一个简单的文件编辑即可,后面在工作中,通过它来改一改服务器的配置文件就行了。

(1) 通过 " vim " 命令打开一个文件,若文件不存在,就创建文件。

(2) 一般情况下,通过 " vim " 打开一个文件后,是不能直接对文件进行文本编辑的。这是因为 " vim " 是分模式的,刚开始打开文件的时候,是 Normal 模式,这个模式下,暂时只能读,只有点击一些特殊快捷键的时候,才能对模式进行改变。

作为 Java 程序员,我们只需要知道点击 字母 " i ",即可进入 INSERT 模式,那么我们就可以像 Windows 的记事本进行编辑了。此时,左下角就会显示 " INSERT ".

1-1

(3) 如何退出 " vim " ?

① 先点击键盘左上角的 " Esc " 键
② w 表示 written,q 表示 quit.

如果你需要保存并退出,按下 ( :wq )
如果你需要退出但不保存,按下 ( :q ),但是一般系统会提示你未保存。
如果你需要强制退出不保存,按下 ( :q! )
如果你需要保存但不退出,按下 ( :w )

13. ps 命令

ps aux // 显示系统上所有的进程

" ps " 命令不是 photoshop,而是 process show.

顾名思义,它就是为了查看当前 Linux 系统上所有运行的进程,它和我们平时使用 " Shift + Ctrl + Esc " 打开 Windows 上的任务管理器一样,是一样的操作。

2-1

上面的命令显示了所有的进程,然而,我们可以通过下面的代码,筛选我们要找的内容," grep " 就表示按照字符串检索,它不仅可以用在当前场景下,也可以用于检索文件中的内容…说白了," grep " 命令就是一个查找关键字的功能。

ps aux | grep "进程名"
ps aux | grep "进程id"

而 " | " 这个竖线,在 Linux 中的术语中,叫做 " 管道 " ,就是将前一个命令,作为后一个命令的输入。解释如下:

2-2

14. netstat 命令

netstat -anp
netstat -anp | grep "进程名"
netstat -anp | grep "端口号"

" netstat " 可以用来查看 Linux 系统上,应用的网络状态。此外,它同样也能搭配 " grep " 进行检索。

9-1

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

十七ing

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值