1 环境搭建

环境搭建: 购买云服务器,镜像版本centos7.6(64位)。系统配置:2核4G

2 服务器信息

购买服务器之后,我们需要以下信息
1.公网IP
2.重置root密码
这些在后续使用xshell登录Linux系统时会使用到。

3 系统的登录

点击左上角新建
image.png
输入名称,主机(即公网IP)即可确认添加
image.png
点击左上角文件夹图标
image.png
即可看到我们添加的Linux系统,选中点击连接即可
image.png
输入之前重置过的密码,点击确认即可连接成功
image.png
也可以使用命令行的方式登录
代码:ssh 用户名@公网ip地址
登录成功
image.png
使用快捷键crtl+D可以退出登录
image.png
添加用户:
image.png
绝对不要将root和普通用户的密码设置成一样的
删除用户:
su - 切换到root权限用户(切换时需要输入root用户密码)
userdel -r tmp 删除普通用户tmp

4 Linux系统介绍

4.1 Linux能做什么

Linux能够进行各种语言的开发,主要以后端语言为主:C++,Java,Python
Linux能够进行各种指令操作,从而完成各种文件相关的管理工作

4.2 Linux基础指令

  1. [pwd] 显示当前所处目录

工作目录
/home/xxx 普通用户xxx的工作目录
/root root账号的工作目录
路径分隔符
Linux的路径分隔符为/,从浏览器中网址的分隔符来看,可以判断网站的服务器使用的是Linux系统。而windows下的路径分隔符\,注意区分
上级目录与当前目录
Linux中任何目录下,都默认存在两个目录:
. 代表当前目录
.. 代表上级目录
cd ..则可以回退到上级目录,cd ../..向上回退两级目录
注意,回退是不能无限回退的,回退到最上级/,此时代表根目录

[Linux的目录结构图 - 树状] image.png

为什么主流的操作系统,组织目录文件结构的时候,都喜欢用树形结构呢?
一个父节点可以有多个子节点,但是一个子节点只有唯一的父节点,所以从任意子节点到父节点,只有唯一路劲;相反,从父节点到任意子节点的路径也是唯一的,这方便我用户查找管理文件。
绝对路径
以图1-1为例,通过绝对路径/home/bit/test.c访问test.c文件。绝对路径是唯一的,且在任意目录下,都可以使用绝对路劲直接跳转到需要访问的目录或文件。
此外,在Linux开发过程中,需要进行一些路径配置,优先使用绝对路径
相对路径
相对路径是相对于当前所处目录来谈的。
以图1-1为例,假设当前所处目录为dev,该目录下会有两个默认的目录...,使用绝对路劲跳转到usr目录下的bin目录/usr/bin 而使用相对路径../usr/bin

  1. [cd] 更改(跳转)路径(change director)

cd 目录名 - 进入目录
cd - - 跳转到上一次所在的目录
cd ~ - 直接进入当前用户的主工作目录

  1. [whoami] 查看当前用户
  2. [ls] 显示当前目录下的文件

windows系统下,双击一个目录,会进入到该目录,并在窗口中显示该目录下的所有文件和目录,相当于Linux下的cd + ls两个指令
ls的拓展使用
语法:ls[选项][目录或文件]
如:ls -l /usr/bin,以列表形式显示bin目录下的所有文件信息
指令选项
-l 以列表形式显示更多文件属性信息
-a 显示隐藏文件
Linux文件名前带一个.的即为隐藏文件,如.test.txt,在开发过程中,一个项目可能有一些配置文件,需要将这些文件隐藏起来,不被用户所见,以起到保护作用
指令是可以组合的,如-al意为显示目录下的所有文件信息以及隐藏文件信息
-d 不显示该目录下的内容信息,只显示该目录本身
如指令ls -ld test ,意为以列表形式展示test目录本身的信息,而不展示test目录下的文件信息
-R 显示当前目录下的所有文件信息以及子目录下的所有文件信息

  1. [touch] 在当前目录下新建普通文件

touch test.txt 创建txt文件

  1. [mkdir] 创建目录(默认当前路径)

mkdir ../leaf 在当前目录的上一级目录下创建leaf目录
mkdir /home/bit/leaf 在任意目录下可用,在绝对路径指定的位置处创建leaf目录
当我们想在当前目录下创建一条不存在的路径时,则需要用到-p指令,如mkdir -p test1/test2/test3 在当前目录下创建一整条路径test1/test2/test3

  1. [clear] 清屏
  2. [rmdir] 删除目录

rmdir [目录名]只能够用来删除空目录,一次性可以删除多个空目录,目录名之间用空格隔开

  1. [rm -r] 删除目录

rm -r [目录名] 直接删除目录,不管是否为空,-r 意为以递归的方式进行删除,参考 二叉树创建或者删除所用的递归思想。一次性可以删除多个空目录,目录名之间用空格隔开
当删除一些被保护的文件或者不属于当前用户的文件,Linux就会提示你是否确认函数文件。y代表确认,n代表取消
-rf 指令则可以跳过确认直接删除。-f就表示强制
绝对不允许删除根目录 rm -rf /,开发过程中使用rm -rf指令时,我们需要清楚自己在干什么,删除后产生的结果是什么以及能否承担这样的结果
rm *或者rm ./* 删除当前目录下的所有文件*为通配符,可以匹配当前目录下的任何内容。./的作用是告知系统要访问的资源在当前目录下,如果省略,部分情况下默认为当前目录。注意rm *只能删除当前目录下的所有文件,要删除目录需要rm -r *
Linux下是没有windows下的回收站功能的,即删除一个文件就真的删除了,且没有撤销功能。

  1. [nano] 打开文本文件进行编辑
  2. [man] Linux自带的参考手册

    [手册章节] image.pngman printf 这是默认查询的是Linux下的printf指令,而man 3 printf查询的才是我们编程时用的库函数printf。即使用man时不指定章节时,默认查询第一章节

  3. [cp] 拷贝文件或者目录

cp test.c ../ 将test.c文件拷贝到上级目录中。如果目录中存在重名文件,则默认覆盖拷贝。
cp -r dir .. 这里dir是多级目录,拷贝多级目录时则需要加上-r以递归形式进行。
cp -rf * ../ 强制以递归形式将当前目录下所有文件拷贝到上级目录
cp -rf *.txt .. 将当前目录下所有txt后缀文件拷贝到上级目录(同理删除也可以这样使用)
语法总结 cp [-选项指令] [文件名(可以多个)] [目录]

  1. [mv] 移动文件/重命名

mv *.txt ../ 将当前目录下所有txt文件移动到上级目录。
mv ../*.txt ./ 将上级目录下的所有txt文件移动到当前目录
移动目录时,如果该目录下有多级目录,移动时不需要加-r指令,如mv dir ../ 其中dir下包含多级目录,mv功能可以类比windows下的剪切操作
mv指令还可以实现重命名的功能,mv a.txt test.txt 将文件a.txt重命名为test.txt; mv dir mydir 将目录dir重命名为mydir

  1. [cat] 打印文本文件内的内容

cat test.c 打印test.c文件内的代码。
cat -n 打印时显示行号
tac 倒叙打印文本内容
cat一般用于查看体量较小的文本

  1. [more] 实现文本的分屏查看

    创建一个10w行文本的文件(shell脚本) image.png 如果使用cat指令查看这个文件,需要等待文件内容全部打印完,期间会一直刷屏。如果我们只想看这个文件的前100行,是看不到的,因为屏幕上的内容会一直刷新。 这时就需要用到more指令,打印文件时内容占满屏幕则停止打印,可以手动按Enter键查询文本内的后续内容。但只能进行文本内容下翻。

  2. [less] 实现文本的分屏查看

more的却别在于,less可以用↑↓键实现文本内容的上翻下翻,按q退出

  1. [head] 查看文本的前n行内容(n默认为10)

head -n3 test.txt 查看文件的前三行内容,head -3等价

  1. [tail] 查看文本的后n行内容

tail -5 test.txt 查看文件的后5行内容

  1. [echo] 显示指令后跟的字符串内容

echo "hello world" 在屏幕上打印"hello world"
echo "hello world" > tmp.txt"hello world"输出重定向tmp.txt文件中,如果tmp.txt文件不存在,则会默认在当前目录下新建该文件
输出重定向>的特征:每次使用都会先清空文件再重新写入。如echo "hello world" > tmp.txt之后再执行指令echo "hello 100" > tmp.txt 那么文件中的内容只有hello world
追加重定向>>echo "hello c++" >> tmp.txt 在文件中追加内容hello c++,不会清空文件内容

补充知识:Linux下一切皆文件,这是一种设计哲学。学习中慢慢理解 echo 指令就是默认往显示器文件中输出内容。> 就是重定向输出目标

  1. 补充内容:`cat`指令默认从键盘获取内容。`crtl+c`退出键盘键入。获取内容后回显到显示器上。键盘在Linux下也视作文件,即`cat`默认从键盘文件中读取内容。<br />利用输入重定向可以实现`cat`从文件中读取内容 `cat < tmp.txt` 从文件`tmp.txt`中读取内容

C程序默认会打开三个文件 标准输入 -> 键盘文件 -> extern stdin 标准输出 -> 显示器文件 -> extern stdout 标准错误 -> 显示器文件 -> extern *stderr echo "hello 100" > tmp.txt 本质就是将内存中的"hello world"内容输出到stdout文件中

获取文本文件中间某段的内容
方案一:利用中间变量(文件)。test.txt中包含1w行的文本,只想阅读5000行到5100行的文本,可用如用如下方式 ①head -5100 test.txt > tmp.txt 此时tmp.txt文件中就有5100行文本
tail -100 tmp.txt 查看tmp.txt文件中倒数100行的文本。此时就读取到了5000-5100的文本内容
该方案缺陷在于需要用到临时文件
方案二head -5100 test.txt | tail -100 可以直接打印5000-5100的文本内容

  1. [ | ] 命令行管道

计算机里最重要的资源:数据。管道的作用就是传送数据。
[生产数据的命令] | [读取/处理数据的命令]*n
head -5100 test.txt | tail -100 其中,命令head -5100 test.txt读取了了文件前5000行的内容,这就生产了数据,这个数据经过管道传输,由下一条命令tail -100读取并加工,读取该数据的后100行内容。
加工的命令可以有多个head -5100 test.txt | tail -100 | tac 拿到5000-5100行的文本内容后,再将内容逆置打印。

  1. [data] 显示时间

data +%y/%m/%d 以年月日方式显示时间,年月日之间由分自定义的分隔符隔开
data +%y/%m/%d:%H:%M:%S 加上时分秒的显示
data +%s 显示时间戳,从1970/1/1 0时 到现在累计的秒数
data +%y/%m/%d:%H:%M:%S -d @[时间戳] 将某个时间戳以方便阅读的形式打印

  1. [cal] 日历

cal 2020 显示2020年的日历
cal -3 查看当月以及前后两个月的日历,只有-3的选项。cal指令默认查看当月的日历
-j 显示在当年中的第几天
-y 显示当前年份的日历。

  1. [find] 查找任何文件所在的目录

find ~ -name test.c~工作目录下所有test.c文件查找出来,并显示路径。有些文件因为权限问题会查找失败。
find命令执行时会直接访问磁盘,而磁盘的速度是比较慢的,效率比较低,但只要找到了,则该文件一定真是存在。

  1. [which] 查找命令文件所在的目录

程序,命令,指令 -> 统称为程序文件,Linux下的命令,本质就是一个个程序。
which pwd 查找pwd对应的程序文件所在目录
find /usr/bin -name ls 在目录下查找指令ls的程序文件。

  1. [grep] 行过滤工具

grep '999' file.txtfile文件中的所有包含999子串的文本行打印出来
grep -n 匹配内容的同时显示该内容在文本文件中的第几行(即显示行号)
grep -nv 打印和子串不匹配的文本行,并显示行号
grep -i 在文件中匹配子串内容时忽略大小写

  1. [zip/unzip] 压缩/解压缩

zip tmp.zip ./* 将当前目录下所有文件打包成tmp.zip文件,如果要将目录的子目录也解压,需要加-r进行递归处理。
unzip tmp.zip -d lesson3/tmp.zip解压到lesson3目录下

  1. [tar] 打包/解包

-czf 压缩文件
-xzf 解压文件
-tf 不解包,直接查看压缩包中的内容
-C 解压到指定目录

  1. [bc] Linux中的计算器,可以方便的计算浮点数

echo "1+2+3+4" | bc""中的内容通过管道交给计算器运算
bc 打开计算器

  1. [uname] 查看Linux基本信息

uname -r 查看内核版本,计算机的位数等信息
uname -a 查看更多信息

  1. 热键

history 查看历史命令
↑↓键 切换历史命令
crtl + D 退出当前命令行
crtl + C 终止失控情况
tab 自动补齐指令/目录
ctrl + R 搜索历史命令

  1. [file] 查看各种文件的属性信息

file [文件名]

  1. [shutdown] 关机

-h 将系统的服务停掉后,立即关机
-r 将系统的服务停掉后,重新启动
-t sec 过sec秒关机
注意:不同用户无权关机。