1 环境搭建
环境搭建: 购买云服务器,镜像版本centos7.6(64位)。系统配置:2核4G
2 服务器信息
购买服务器之后,我们需要以下信息
1.公网IP
2.重置root密码
这些在后续使用xshell登录Linux系统时会使用到。
3 系统的登录
点击左上角新建
输入名称,主机(即公网IP)即可确认添加
点击左上角文件夹图标
即可看到我们添加的Linux系统,选中点击连接即可
输入之前重置过的密码,点击确认即可连接成功
也可以使用命令行的方式登录
代码:ssh 用户名@公网ip地址
登录成功
使用快捷键crtl+D可以退出登录
添加用户:
绝对不要将root和普通用户的密码设置成一样的
删除用户:su - 切换到root权限用户(切换时需要输入root用户密码)userdel -r tmp 删除普通用户tmp
4 Linux系统介绍
4.1 Linux能做什么
Linux能够进行各种语言的开发,主要以后端语言为主:C++,Java,Python
Linux能够进行各种指令操作,从而完成各种文件相关的管理工作
4.2 Linux基础指令
- [pwd] 显示当前所处目录
工作目录/home/xxx 普通用户xxx的工作目录/root root账号的工作目录
路径分隔符
Linux的路径分隔符为/,从浏览器中网址的分隔符来看,可以判断网站的服务器使用的是Linux系统。而windows下的路径分隔符\,注意区分
上级目录与当前目录
Linux中任何目录下,都默认存在两个目录:. 代表当前目录.. 代表上级目录cd ..则可以回退到上级目录,cd ../..向上回退两级目录
注意,回退是不能无限回退的,回退到最上级/,此时代表根目录
[Linux的目录结构图 - 树状]
为什么主流的操作系统,组织目录文件结构的时候,都喜欢用树形结构呢?
一个父节点可以有多个子节点,但是一个子节点只有唯一的父节点,所以从任意子节点到父节点,只有唯一路劲;相反,从父节点到任意子节点的路径也是唯一的,这方便我用户查找管理文件。
绝对路径
以图1-1为例,通过绝对路径/home/bit/test.c访问test.c文件。绝对路径是唯一的,且在任意目录下,都可以使用绝对路劲直接跳转到需要访问的目录或文件。
此外,在Linux开发过程中,需要进行一些路径配置,优先使用绝对路径
相对路径
相对路径是相对于当前所处目录来谈的。
以图1-1为例,假设当前所处目录为dev,该目录下会有两个默认的目录.和..,使用绝对路劲跳转到usr目录下的bin目录:/usr/bin 而使用相对路径../usr/bin
- [cd] 更改(跳转)路径(change director)
cd 目录名 - 进入目录cd - - 跳转到上一次所在的目录cd ~ - 直接进入当前用户的主工作目录
- [whoami] 查看当前用户
- [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 显示当前目录下的所有文件信息以及子目录下的所有文件信息
- [touch] 在当前目录下新建普通文件
touch test.txt 创建txt文件
- [mkdir] 创建目录(默认当前路径)
mkdir ../leaf 在当前目录的上一级目录下创建leaf目录mkdir /home/bit/leaf 在任意目录下可用,在绝对路径指定的位置处创建leaf目录
当我们想在当前目录下创建一条不存在的路径时,则需要用到-p指令,如mkdir -p test1/test2/test3 在当前目录下创建一整条路径test1/test2/test3
- [clear] 清屏
- [rmdir] 删除目录
rmdir [目录名]只能够用来删除空目录,一次性可以删除多个空目录,目录名之间用空格隔开
- [rm -r] 删除目录
rm -r [目录名] 直接删除目录,不管是否为空,-r 意为以递归的方式进行删除,参考 二叉树创建或者删除所用的递归思想。一次性可以删除多个空目录,目录名之间用空格隔开
当删除一些被保护的文件或者不属于当前用户的文件,Linux就会提示你是否确认函数文件。y代表确认,n代表取消-rf 指令则可以跳过确认直接删除。-f就表示强制
绝对不允许删除根目录 rm -rf /,开发过程中使用rm -rf指令时,我们需要清楚自己在干什么,删除后产生的结果是什么以及能否承担这样的结果rm *或者rm ./* 删除当前目录下的所有文件,*为通配符,可以匹配当前目录下的任何内容。./的作用是告知系统要访问的资源在当前目录下,如果省略,部分情况下默认为当前目录。注意rm *只能删除当前目录下的所有文件,要删除目录需要rm -r *
Linux下是没有windows下的回收站功能的,即删除一个文件就真的删除了,且没有撤销功能。
- [nano] 打开文本文件进行编辑
[man] Linux自带的参考手册
[手册章节]
如man printf这是默认查询的是Linux下的printf指令,而man 3 printf查询的才是我们编程时用的库函数printf。即使用man时不指定章节时,默认查询第一章节[cp] 拷贝文件或者目录
cp test.c ../ 将test.c文件拷贝到上级目录中。如果目录中存在重名文件,则默认覆盖拷贝。cp -r dir .. 这里dir是多级目录,拷贝多级目录时则需要加上-r以递归形式进行。cp -rf * ../ 强制以递归形式将当前目录下所有文件拷贝到上级目录cp -rf *.txt .. 将当前目录下所有txt后缀文件拷贝到上级目录(同理删除也可以这样使用)
语法总结 cp [-选项指令] [文件名(可以多个)] [目录]
- [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
- [cat] 打印文本文件内的内容
cat test.c 打印test.c文件内的代码。cat -n 打印时显示行号tac 倒叙打印文本内容 cat一般用于查看体量较小的文本
[more] 实现文本的分屏查看
创建一个10w行文本的文件(shell脚本)
如果使用cat指令查看这个文件,需要等待文件内容全部打印完,期间会一直刷屏。如果我们只想看这个文件的前100行,是看不到的,因为屏幕上的内容会一直刷新。 这时就需要用到more指令,打印文件时内容占满屏幕则停止打印,可以手动按Enter键查询文本内的后续内容。但只能进行文本内容下翻。[less] 实现文本的分屏查看
和more的却别在于,less可以用↑↓键实现文本内容的上翻下翻,按q退出
- [head] 查看文本的前n行内容(n默认为10)
head -n3 test.txt 查看文件的前三行内容,head -3等价
- [tail] 查看文本的后n行内容
tail -5 test.txt 查看文件的后5行内容
- [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指令就是默认往显示器文件中输出内容。>就是重定向输出目标
补充内容:`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的文本内容
- [ | ] 命令行管道
计算机里最重要的资源:数据。管道的作用就是传送数据。[生产数据的命令] | [读取/处理数据的命令]*nhead -5100 test.txt | tail -100 其中,命令head -5100 test.txt读取了了文件前5000行的内容,这就生产了数据,这个数据经过管道传输,由下一条命令tail -100读取并加工,读取该数据的后100行内容。
加工的命令可以有多个head -5100 test.txt | tail -100 | tac 拿到5000-5100行的文本内容后,再将内容逆置打印。
- [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 @[时间戳] 将某个时间戳以方便阅读的形式打印
- [cal] 日历
cal 2020 显示2020年的日历cal -3 查看当月以及前后两个月的日历,只有-3的选项。cal指令默认查看当月的日历-j 显示在当年中的第几天-y 显示当前年份的日历。
- [find] 查找任何文件所在的目录
find ~ -name test.c 将~工作目录下所有test.c文件查找出来,并显示路径。有些文件因为权限问题会查找失败。find命令执行时会直接访问磁盘,而磁盘的速度是比较慢的,效率比较低,但只要找到了,则该文件一定真是存在。
- [which] 查找命令文件所在的目录
程序,命令,指令 -> 统称为程序文件,Linux下的命令,本质就是一个个程序。which pwd 查找pwd对应的程序文件所在目录find /usr/bin -name ls 在目录下查找指令ls的程序文件。
- [grep] 行过滤工具
grep '999' file.txt 将file文件中的所有包含999子串的文本行打印出来grep -n 匹配内容的同时显示该内容在文本文件中的第几行(即显示行号)grep -nv 打印和子串不匹配的文本行,并显示行号grep -i 在文件中匹配子串内容时忽略大小写
- [zip/unzip] 压缩/解压缩
zip tmp.zip ./* 将当前目录下所有文件打包成tmp.zip文件,如果要将目录的子目录也解压,需要加-r进行递归处理。unzip tmp.zip -d lesson3/ 将tmp.zip解压到lesson3目录下
- [tar] 打包/解包
-czf 压缩文件-xzf 解压文件-tf 不解包,直接查看压缩包中的内容-C 解压到指定目录
- [bc] Linux中的计算器,可以方便的计算浮点数
echo "1+2+3+4" | bc 将""中的内容通过管道交给计算器运算bc 打开计算器
- [uname] 查看Linux基本信息
uname -r 查看内核版本,计算机的位数等信息uname -a 查看更多信息
- 热键
history 查看历史命令↑↓键 切换历史命令crtl + D 退出当前命令行crtl + C 终止失控情况tab 自动补齐指令/目录ctrl + R 搜索历史命令
- [file] 查看各种文件的属性信息
file [文件名]
- [shutdown] 关机
-h 将系统的服务停掉后,立即关机-r 将系统的服务停掉后,重新启动-t sec 过sec秒关机
注意:不同用户无权关机。

