Linux 背景知识
Linux 是什么
Linux
是一个操作系统
.
和
Windows
是
"
并列
"
的关系
有的同学可能表示
, Linux
都是世界第一大操作系统了
,
我咋还没听说过
?
不
,
其实你听说过
.
安卓系
统本质上就是
Linux.
Linux 发行版
Linux
严格意义来说只是一个
"
操作系统内核
".
一个完整的操作系统
=
操作系统内核
+
配套的应用程序
.
由于
Linux
是一个完全开源免费的内核
,
因此有些公司
/
开源组织又基于
Linux
内核
,
提供了不同的配套程序.
这就构成了不同的
"
发行版
".
关于 Linux 我们学习什么
1) 基础命令
Linux
虽然也有图形化界面
,
但是在 服务器
/
嵌入式设备上往往都是通过命令行的方式操作的
.
因此学习Linux 命令就是使用
Linux
的重要基础
.
使用命令相比于使用图形界面主要有以下好处
:
- 节省系统资源: 运行图形界面需要让系统付出一些额外的资源开销. 尤其是对于配置比较低的 嵌入式设备, 这一点至关重要.
- 节省网络带宽: 如果通过网络访问服务器, 使用图形界面需要传输一帧一帧的图像, 而使用命令 只需要传输简单的字符串.
- 便于批量执行任务: 可以通过一些 "脚本" 代码 (比如 Linux Shell) 来批量执行一些任务, 完成一些简单的编程工作. (比如定时备份文件, 删除文件等).
Windows 也有命令(也就是 cmd), 只是对于普通用户来说很少使用.
2) 系统编程 & 网络编程
Linux
自身提供了一些
API,
供程序猿调用来完成一些更复杂的编程任务
(
比如文件操作
,
多线程编程
, socket 编程等
).
但是由于
Java
跨平台的特性
,
这部分功能已经被
Java
自身封装好了
3) 部署 JavaWeb 项目
我们自己写的
web
程序
,
要想让其他的用户能够访问
,
就需要发布到服务器上
.
Tips:
对于
Java
程序猿
,
关于
Linux
重点学习 基础命令 和 项目部署 即可
Linux 环境搭建
要想学习
Linux ,
需要先有一个
Linux
的环境
.
环境搭建方式
主要有四种
:
1.
直接安装在物理机上
.
但是由于
Linux
桌面使用起来非常不友好
. [
不推荐
].
2.
使用虚拟机软件
,
将
Linux
搭建在虚拟机上
.
但是由于当前的虚拟机软件
(
如
VMWare
之类的
)
存在一些 bug ,
会导致环境上出现各种莫名其妙的问题
,
比较折腾
. [
非常不推荐
]
3.
使用
WSL (Windows Subsystem for Linux).
这个是
Windows
近几年开发的新功能
,
在
Windows
系统内集成了一个
Linux.
但是目前这个技术还不够成熟
. [
暂时不推荐
].
4.
使用云服务器
,
可以直接在 腾讯云
,
阿里云或华为云 等服务器厂商处直接购买一个云服务器
. [
墙裂
推荐
]
如腾讯云阿里云等为在校学生提供了优惠
,
只要通过学生认证
,
最低可以
10
块钱一个月
.
还是非常
划算的
.
使用云服务器不仅环境搭建简单
,
避免折腾
,
同时还有一个最大的好处
,
部署在云服务器上的项目可以直接 被外网访问到,
这个时候就和一个公司发布一个正式的网站没有任何区别
.
也就能让我们自己写的程序真的去给别人去使用.
能够在外网被访问是非常有意义的
.
这样我们以后面试的时候就可以提前部署好项目
,
现场给面试
官演示了
使用云服务器
我们以腾讯云为例
,
其他的服务器厂商也是类似
.
1.
进入官方网站
https://cloud.tencent.com/act/campus
(
直接在百度上搜
"
腾讯云校园计划
")
2.
登陆网站
(
可以使用
qq
或者 微信 登陆
)
![](https://i-blog.csdnimg.cn/blog_migrate/54203db83499876194b06760e6643ad6.png)
3.
右侧的操作系统选择
CentOS 7.6 64
位
.
购买时长根据需要选择
(
建议
1
年
),
点击立即购买即可
.
这个步骤需要实名认证,
否则会提示
![](https://i-blog.csdnimg.cn/blog_migrate/f64cb4ea2ab25f025261f5f421f4acbf.png)
点击立即认证
,
按照系统提示
,
完成实名认证即可
(
认证速度很快
).
4.
购买完成后
,
可以在控制台中找到自己买的服务器
.
点进去能够看到服务器的
IP
地址
![](https://i-blog.csdnimg.cn/blog_migrate/733ec33082b81f7f7d7a70c66266a3f8.png)
蓝色方框为公网
ip
地址
,
稍后我们就会使用这个
ip
登陆服务器
.
5.
设置
root
密码
:
勾选服务器
,
点击重置密码
(
这个环节可能需要手机短信验证
). root
密码建议设置的稍微复杂一些,
否则容易被黑客入侵
.
在这个环节我们最重要的是得到三个信息
:
1.
服务器的外网
IP
2.
服务器的管理员账户
(
固定为
root)
3.
管理员账户密码
(
在腾讯云网站上设置的
)
这三个信息是我们登陆到
Linux
上的必要条件
.
使用终端软件连接到 Linux
什么是终端软件
终端软件是一类工具软件
,
可以和远程的主机建立网络连接
,
从而对主机进行一些操作
.
常见的终端软件
:
XShell
Putty
MobaXTerm
Iterm2
SecureCRT
......
我们课堂上使用的是
XShell.
下载安装 XShell
下载地址
:
https://www.netsarang.com/en/free-for-home-school/
![](https://i-blog.csdnimg.cn/blog_migrate/5b2a9e250847d577404edd521425c4b3.png)
XShell
提供了两种授权方式
.
企业版
:
收费
.
家庭
/
教育版
:
免费
.
我们选择 家庭
/
教育 版即可
.
下载的时候需要填一下名字和邮箱
. 下载链接会被发送到填写的邮箱中.
![](https://i-blog.csdnimg.cn/blog_migrate/b6a30e0070a926bfd157e8ff144f5164.png)
邮箱中收到的内容形如:
点击邮箱中的下载链接即可完成下载.
使用 XShell 登陆主机
在
XShell
终端下输入
ssh 服务器外网ip地址
ip
为腾讯云后台页面中看到的 外网
IP.
如果网络畅通
,
将会提示输入用户名密码
.
输入即可正确登陆
.
备注
:
这里的用户名为
root,
密码是在最初购买服务器的时候设置的密码
.
关于XShell 下的复制粘贴
复制
:
ctrl + insert (
有些同学的
insert
需要配合
fn
来按
)
粘贴
: shift + insert
ctrl + c / ctrl + v
是不行的
.
Linux 常用命令
ls
语法
:
ls [
选项
] [
目录或文件
]
功能
:对于目录,该命令列出该目录下的所有子目录与文件。对于文件,将列出文件名以及其他信息。
常用选项:
-a
列出目录下的所有文件,包括以
.
开头的隐含文件。
-d
将目录象文件一样显示,而不是显示其下的文件。 如:
ls –d
指定目录
-k
以
k
字节的形式表示文件的大小。
ls –alk
指定文件
-l
列出文件的详细信息。
-r
对目录反向排序。
-t
以时间排序。
-R
列出所有子目录下的文件。
(
递归
)
举例
:
ls -l
pwd
语法
: pwd
功能
:显示用户当前所在的目录
举例
:
pwd
cd
Linux
系统中,磁盘上的文件和目录被组成一棵目录树,每个节点都是目录或文件。
语法
: cd
目录名
功能
:
改变工作目录。将当前工作目录改变到指定的目录下
.
举例
:
cd .. : 返回上级目录cd ~ :进入用户家目cd - :返回最近访问目录
认识 Linux 目录结构
Linux
是一个树形目录结构
.
几个特殊的目录
:
- / 称为根目录
- . 称为当前目录
- .. 称为当前目录的上级目录
绝对路径 vs 相对路径
形如
:
/usr/share/tomcat/logs/
以根目录开头的
,
称为绝对路径
.
形如
:
./logs
以
.
或者
..
开头的
,
称为相对路径
.
使用 tab 键补全
我们敲的所有的
Linux
命令
,
都可以使用
tab
键来尝试补全
,
加快效率
.
使用 ctrl + c 重新输入
cd -
:返回最近访问目录
如果命令或者目录敲错了
,
可以
ctrl + c
取消当前的命令
.
touch
语法
: touch [
选项
]...
文件
...
功能
: touch
命令参数可更改文档或目录的日期时间,包括存取时间和更改时间,或者新建一个不存在的文件。
举例
:
touch test.txt
cat
语法
:
cat [
选项
] [
文件
]
功能
: 查看目标文件的内容
常用选项
:
- -n 对输出的所有行编号
cat test.txt
mkdir
语法
:
mkdir [
选项
] dirname...
功能
:在当前目录下创建一个名为
“dirname”
的目录
常用选项
:
- -p, --parents 可以是一个路径名称。此时若路径中的某些目录尚不存在,加上此选项后,系统将 自动建立好那些尚不存在的目录,即一次可以建立多级目录
举例
:
mkdir –p test/test1 : 递归建立多个目录
rm
语法
:
rm [-f-i-r-v] [dirName/dir]
功能
:删除文件或目录
常用选项
:
- -f 即使文件属性为只读(即写保护),亦直接删除
- -i 删除前逐一询问确认
- -r 删除目录及其下所有文件
举例
:
rm test.txt
重要注意事项:
千万不要运行
rm
-
rf /
,
尤其是在公司的生产服务器上
.
理解递归删除的过程:
cp
语法
:
cp [
选项
]
源文件或目录 目标文件或目录
功能
:
复制文件或目录
说明
: cp
指令用于复制文件或目录,如同时指定两个以上的文件或目录,且最后的目的地是一个已经存在
的目录,则它会把前面指定的所有文件或目录复制到此目录中。若同时指定多个文件或目录,而最后的
目的地并非一个已存在的目录,则会出现错误信息
常用选项
:
- -f 或 --force 强行复制文件或目录, 不论目的文件或目录是否已经存在
- -i 或 --interactive 覆盖文件之前先询问用户
- -r递归处理,将指定目录下的文件与子目录一并处理。若源文件或目录的形态,不属于目录或符号链接,则一律视为普通文件处理
- -R 或 --recursive递归处理,将指定目录下的文件及子目录一并处理
举例
:
cp test1.txt test2.txt
mv
语法
: mv [
选项
]
源文件或目录 目标文件或目录
功能
:
1.
视
mv
命令中第二个参数类型的不同(是目标文件还是目标目录),
mv
命令将文件重命名或将其移至一个新的目录中。
2.
当第二个参数类型是文件时,
mv
命令完成文件重命名,此时,源文件只能有一个(也可以是源目录名),它将所给的源文件或目录重命名为给定的目标文件名。
3.
当第二个参数是已存在的目录名称时,源文件或目录参数可以有多个,
mv
命令将各参数指定的源文件均移至目标目录中。
常用选项
- -f :force 强制的意思,如果目标文件已经存在,不会询问而直接覆盖
- -i :若目标文件 (destination) 已经存在时,就会询问是否覆盖!
举例:
mv test1.txt test2.txt
man
Linux
的命令有很多参数,我们不可能全记住,我们可以通过查看联机手册获取帮助。
语法
: man [
选项
]
命令
常用选项
- -k 根据关键字搜索联机帮助
- num 只在第num章节找
- man man 能够看到 man 手册中的若干个章节及其含义.
举例:
man ls
less
语法:
less [
参数
]
文件
功能
:查看文件内容
.
不会立刻把所有文件内容加载到内存中
.
也能进行查找
.
选项
:
- j k / 方向键: 向上向下滚动屏幕.
- -N 显示每行的行号
- /字符串:向下搜索“字符串”的功能
- n:重复前一个搜索(与 / 或 ? 有关)
- q: 退出
head
语法:
head [
参数
]... [
文件
]...
功能
:
head
用来显示档案的开头至标准输出中,默认
head
命令打印其相应文件的开头
10
行。
选项
:
- -n<行数> 显示的行数
tail
语法:
tail [
必要参数
] [
选择参数
] [
文件
]
功能:
用于显示指定文件末尾内容,不指定文件时,作为输入信息进行处理。常用查看日志文件。
选项:
- -f 循环读取
- -n<行数> 显示行数
举例
:有一个文件共有
100
行内容,请取出第
50
行内容
# 方法 1head -n50 test > tmp # 将前 50 行装入临时文件 tmptail -n1 tmp # 得到中间行# 方法 2head -n50 test | tail -n1
关于重定向
Linux
的很多指令
,
如
cat head tail
等都是默认输出到
"
标准输出
"
中
,
也就是显示器上的
.
可以通过
>
这样的符号把本来要输出到标准输出上的内容写到特定文件中
.
这样的操作称为
"
重定向
".
重定向有三种方式
:
1.
标准输入重定向
(<)
# 先构造一个文件 , 里面添加一些内容 .cat < test.txt
2.
标准输出重定向
(>)
cat test.txt > test2.txt
3.
标准错误重定向
(2>),
注意
2
和
>
之间不能有空格
.
# 尝试删除一个不存在的文件rm aaa > test.txt# 输出结果 , 这个提示并没有被重定向到 test.txt 文件中 .rm: cannot remove ‘aaa’: No such file or directory# 正确做法rm aaa 2> test.txt
标准输入
,
标准输出
,
标准错误是三个特殊的文件
,
每个进程在启动的时候都会默认打开
.
分别对应
到键盘
,
显示器
,
显示器这样的设备
.
在
Java
中
,
分别对应到
System.in
,
System.out
,
System.err
关于管道
管道是一种古老的
"
进程间通信
"
方式
.
在
Linux
指令中可以使用
|
作为管道标记
.
意思是将前一个指令标准输出的内容
,
作为第二个指令的标准输入内容
.
date
date
指定格式显示时间:
date +"%Y
-
%m
-
%d %H:%M:%S"
date
用法:
date [OPTION]... [+FORMAT]
1.
在显示方面,使用者可以设定欲显示的格式,格式设定为一个加号后接数个标记
- %H : 小时(00..23)
- %M : 分钟(00..59)
- %S : 秒(00..61)
- %X : 相当于 %H:%M:%S
- %d : 日 (01..31)
- %m : 月份 (01..12)
- %Y : 完整年份 (0000..9999)
- %F : 相当于 %Y-%m-%d
2.
时间戳
时间
->
时间戳:
date +%s
时间戳
->
时间:
date -d@1508749502
Unix
时间戳(英文为
Unix epoch, Unix time, POSIX time
或
Unix timestamp
)是从
1970
年
1
月
1
日
(
UTC/GMT
的午夜)开始所经过的秒数,不考虑闰秒。
vim
vim
是一个知名的文本编辑器
.
前面学习的
cat, less, head, tail
等命令只能查看文本
,
不能编辑文本
.
使用 vim 就可以进行编辑了
.
vim
就相当于
Windows
的记事本
.
只不过功能比记事本强大一些
.
1)
创建文件
/
打开文件
vim [ 文件名 ]
2)
进入插入模式
vim
打开文件后默认是
普通模式
.
普通模式下键盘的按键表示一些特殊功能的快捷键
. (
例如按下
j
并不是输入字母 "j",
而是表示光标往下移动一行
).
需要进入插入模式才能进行文本编辑
.
使用
i
键可以进入到
插入模式
. (
左下角提示
--INSERT-- )
然后就可以像记事本一样正常编辑了
.
3)
保存
在插入模式下不能保存文件
,
需要先回到 普通模式
.
按下
Esc
回到普通模式
.
在普通模式下输入
:w
,
再按下回车
,
即可保存文件
.
4)
退出
在插入模式下不能退出
,
需要先回到
普通模式
.
在普通模式下输入
:q
,
再按下回车
,
即可退出
.
也可以直接使用
:wq
同时执行保存和退出
.
grep
语法:
grep [
参数
]... [
文件
]...
功能
:用于查找文件中是否包含指定字符串
,
并显示对应的行
.
选项
:
- -n<行数> 显示的行数
- -w 全字匹配. 要求整个单词都完全相同的结果才能匹配出来, 而不仅仅是一个单词的一部分.
- -r 递归查找. 可以搜索多级目录下的所有文件.
- --color 高亮查找到的结果
- --include 指定查找某些文件
- --exclude 指定排除某些文件
举例
:
grep "hello" Hello.java
ps
语法:
ps [
参数
]...
功能
:用于查看当前系统上运行的进程
选项
:
- a 显示一个终端的所有进程
- u 以用户为主的格式来显示程序状况
- x 显示所有程序,不以终端机来区分
举例
:
ps aux # 显示系统上所有的进程ps aux | grep " 进程名 "ps aux | grep " 进程 id"
netstat
语法:
netstat [
参数
]...
功能
:查看系统上的网络状态
.
选项
:
- -a 显示所有正在或不在侦听的套接字
- -n 显示数字形式地址而不是去解析主机、端口或用户名
- -p 显示套接字所属进程的PID和名称
举例
:
netstat -anpnetstat -anp | grep " 进程名 "netstat -anp | grep " 端口号 "
Linux 权限
用户操作
Linux
下有两种用户:超级用户(
root
)、普通用户。
- 超级用户:可以再linux系统下做任何事情,不受限制
- 普通用户:在linux下做有限的事情。
- 超级用户的命令提示符是“#”,普通用户的命令提示符是“$”。
我们的服务器买好了
,
默认是
root
用户
.
但是
root
用户权力比较大
,
一旦使用不当可能会造成严重后果 ,(例如
rm -rf /).
因此我们真正在公司中不会直接使用
root
用户来操作服务器
.
1. 创建用户
命令
useradd [
用户名
]
功能
创建新的用户
示例:
useradd test
2. 配置密码
命令
passwd [
用户名
]
功能
设置或修改用户密码
示例:
passwd test
注意
,
输入密码的时候
,
在控制台中不会有提示
.
但实际上已经输入进去了
.
3. 切换用户
命令
:
su [
用户名
]
功能
:切换用户。
例如,要从
root
用户切换到普通用户
user
,则使用
su user
。
要从普通用户
user
切换到
root
用户则使用
su root
(
root
可以省略),此时系统会提示输入
root
用户的口令。
三种角色
访问一个文件的人可能分成三种类别
.
- 文件和文件目录的所有者:u---User
- 文件和文件目录的所有者所在的组的用户:g---Group
- 其它用户:o---Others
文件类型和访问权限
命令
ll
显示了一个文件的详细信息
.
解读如下图
:
![](https://i-blog.csdnimg.cn/blog_migrate/3073b7e078bada9c2eb6df74307b1690.png)
a) 文件类型
- d:文件夹
- -:普通文件
- l:软链接(类似Windows的快捷方式)
- b:块设备文件(例如硬盘、光驱等)
- p:管道文件
- c:字符设备文件(例如屏幕等串口设备)
- s:套接口文件
b)
基本权限
- 读(r/4):Read对文件而言,具有读取文件内容的权限;对目录来说,具有浏览该目录信息的权限
- 写(w/2):Write对文件而言,具有修改文件内容的权限;对目录来说具有删除移动目录内文件的权限
- 执行(x/1):execute对文件而言,具有执行文件的权限;对目录来说,具有进入目录的权限
- “-” 表示不具有该项权限
修改文件权限
功能:
设置文件的访问权限
格式:
chmod [
参数
]
权限 文件名
常用选项:
- R -> 递归修改目录文件的权限
- 说明:只有文件的拥有者和root才可以改变文件的权限
chmod
命令权限值的格式
① 用户表示符
+/-=
权限字符
- +:向权限范围增加权限代号所表示的权限
- -:向权限范围取消权限代号所表示的权限
- =:向权限范围赋予权限代号所表示的权限
用户符号:
- u:拥有者
- g:拥有者同组用
- o:其它用户
- a:所有用户
实例:
# chmod u+w /home/abc.txt# chmod o-x /home/abc.txt# chmod a=x /home/abc.txt
②三位
8
进制数字
实例:
# chmod 664 /home/abc.txt# chmod 640 /home/abc.txt
类似的还有 chgrp, chown 命令.