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的文本内容
- [ | ] 命令行管道
计算机里最重要的资源:数据。管道的作用就是传送数据。[生产数据的命令] | [读取/处理数据的命令]*n
head -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秒关机
注意:不同用户无权关机。