目录
- 前言
- 什么是 Linux
- 获得 Linux 环境
- 为什么使用命令控制
- 关于 XShell 下的复制粘贴
- Linux 常用命令
- ls (罗列文件)
- cd (切换目录)
- pwd (显示当前路径)
- touch (创建一个空文件)
- cat (读取文件内容)
- man (查看用户手册)
- echo (回显)
- vim (文件编辑器)
- mkdir (创建目录)
- rm (删除目录/文件)
- cp (复制)
- mv (移动)
- grep (字符串匹配)
- ps (查看进程)
- netstat (查看网络状态)
前言
什么是 Linux
Linux 是一个操作系统, 和 Windows 是 “并列” 的关系, 其实手机上的安卓系统就是 Linux.
我们日常使用的电脑都是 Windows 为主, 也有 mac 的.
Linux 的市场份额是比 Windows 更多的.
Linux 使用场景 :
- 服务器
- 嵌入式设备
- 移动端(手机)Android
Linux 准确来说是一个 “统称”, 或者可以认为是一个 “操作系统内核”.
一个完整的操作系统 = 操作系统内核 + 配套应用程序
于是有很多企业/组织, 基于 Linux 内核搭载不同的应用程序, 从而诞生了很多不同的 “操作系统”. 如下 :
我们使用的是基于 redhat 的社区免费版本 Centos
获得 Linux 环境
学习 Linux 首先得有一个 Linux 环境.
推荐大家买个云服务器, 最近阿里也在搞活动, 送几个月呢, 我这里使用的也是阿里送的云服务器.
买完服务器后就得到三个重要信息 :
- 服务器的外网 ip
- 服务器的管理员账号 (固定为 root)
- 管理员账户密码 (在阿里云网站上设置)
上述三个信息是我们登录 Linux 的关键.
接下来就是使用终端软件来连接 Linux 了, 常见的终端软件有 :
XShell, Putty, MobaXTerm, Iterm2 等等, 我这里使用的是 XShell.
下载好 XShell 后就可以与云服务器建立连接了.
- 点击文件
- 新建
- 输入一个名称, 然后输入服务器的外网 ip.
- 点击连接. 之后就是输入用户名和密码了.
连接成功后就是这样了 :
解释一下含义 :
root 是当前用户名
@ 是分隔符
iZ2vch4gaxbeiyox9kxkanZ 是主机名
~ 表示当前所在目录 (~ 在Linux中有特殊含义, 表示 home 目录, 是用户存放数据的目录)
#表示当前身份是管理员 ($ 表示普通用户)
为啥 ~ 表示 home 目录呢 ?
这个是因为早期键盘的 ~键 和 home键 是同一个按键.
为什么使用命令控制
为什么使用 Linux 是使用命令进行操作的呢 ?
既然和 Windows 并列, 那为啥不像 Windows 一样使用图形化的界面 ?
首先, Linux 是有图形化界面的, 但是我们实际工作中一般都不会使用.
图形化优势 : 简单易上手.
Linux 图形化界面是比较糟糕的, 非常简陋, bug多.
命令行优势 : 高效, 准确, 是生产力工具.
- 带宽占用非常低
- 系统资源占用也非常低
- 命令行适合使用脚本来实现批量的重复性的操作.
关于 XShell 下的复制粘贴
复制: ctrl + insert (笔记本的 insert 需要配合 fn 来按)
粘贴: shift + insert
ctrl + c / ctrl + v 是不行的.
按 crtl + l 是清屏.
Linux 常用命令
ls (罗列文件)
list 列出当前 目录 / 指定目录 包含哪些文件.(类似于双击目录)
可看到我这里在 home 目录下有三个文件, 其中蓝色代表目录, 白色代表普通文件.
该目录下, 本来是没有文件的, 都是自己创建的.
ls 后面跟上一个具体目录, 就可以查看指定目录的内容.
这里 / 表示根目录, 对比 Windows 就是 “此电脑”, 云服务器上任何一个文件都是从属于根目录的.
此处效果和直接敲 ls 是一样的, 因为 root 用户的 home 目录就是 /root, 也就是我们以 root 身份登录后, 默认所在目录. /root 目录就是 root 用户的 ~ 目录.
使用 ls -l 就可以看到目录中的细节了.
因为我们使用 ls -l 操作很频繁, 所以 Linux 提供了 ll 操作, 相当于 ls -l.
-l 叫做 “命令行参数”, 当然还有其他命令行参数 :
参数和参数在之间至少用一个空格来分割. (除了 -l, 其他命令行参数都用的较少)
cd (切换目录)
change directory 的缩写, 也就是切换目录.
Linux系统中,磁盘上的文件和目录被组成一棵目录树,每个节点都是目录或文件.
cd 后面跟上要切换的目录路径 (绝对路径和相对路径都可)
Linux 中, 绝对路径是 / 开头的, 相对路径是以 ./ , …/ 开头的, 其中./ 可以省略.
可以看到, 当前目录由 ~, 变为了 /
注意下面操作下的目录变化 :
如果直接 cd 后面不接什么, 则是直接回到 home 目录.
cd 和 ls 整个 Linux中最常用的两个命令.
pwd (显示当前路径)
pwd 是防止用户迷路的, 有时候用户 cd 太多了, 把自己也绕晕了, 这时候敲 pwd 显示当前完整路径.
就像点击 Windows 文件上的路径一样.
touch (创建一个空文件)
创建一个 333.txt 文件 :
可以看到该文件大小为0, 是个空文件.
cat (读取文件内容)
cat 对简单短小的文件读取效果好, 如果文件大了, 很长, 那 cat 就不方便.
如果文件大小为零, 即使 cat 了, 也不会有内容.
有时候输入的文件名很长, 就可以打出前几个字母, 然后按 tab 就可以补全了.
man (查看用户手册)
如果我们想具体了解某个命令的用法, 就可敲 man 指令, 如 : man cat
输入回车后, 就会跳转到用户手册, 退出按 q.
echo (回显)
echo 意思是回显, 我们可以在命令中输入要显示的内容, 然后回车就会显示出该内容.
当然, 我们也可以用来写文件 :
这里要注意, 每次写文件的时候, 都会清空原有内容.
总结 : echo 和 cat 这样的命令, 只是适合对简单文件进行操作.
如果文件复杂, 或者文件编辑需求复杂, 那就不适合了.
其实 echo 和 cat 指令很有用, 比如 : 当我们使用脚本批量处理很多简单操作的时候.
vim (文件编辑器)
如果是针对复杂文件, 进行复杂编辑, 那么就可以用到 vim 了.
vim 是 Linux 自带的文本编辑器, 相当于 Windows 的记事本.
这里只介绍 vim 的三种基本用法 :
- 打开文件
- 编辑文件
- 保存退出
- 打开文件 : 使用 vim 加文件名 / 文件路径.
- 编辑文件
打开 : hello.txt 文件 :
回车后就会跳转到编辑画面, 这个时候 vim 处在普通模式, 此时键盘按键都是快捷键, 我们得切换到插入模式, 才是输入文本.
按 i, 即可进入插入模式, 这个模式就类似于记事本了.
- 保存退出 : 写完后, 按 Esc 键退出插入模式, 再输入 :w 就是保存, 再输入 :q 就是退出了, 当然可以一起输入 :wq, 保存并退出.
通过 cat 可以看到刚刚输入的内容 :
mkdir (创建目录)
mk -> make
dir -> directory
相当于 Windows 中, 鼠标右键, 新建目录.
rm (删除目录/文件)
remove 删除文件 / 删除目录
使用 rm -r 是递归删除, 即删除该目录下的所有子文件和子目录.
可以看到, 使用 rm -r 删除要逐个文件询问是否删除, 遇到大文件就很麻烦.
我们可以使用 rm -rf 进行强制删除, 不会询问了.
我们也可以使用通配符 * 来删除当前目录所有文件.
注意 : rm 操作很危险 !!!
在 Linux 中, 没有回收站这个概念, 删除了就没有了.
如果我们把根目录删了就完了, 就是这个命令 : rm -rf / , 这个命令一出, 系统都跑不起来了.
如果误敲了, 只能重装系统了.
虽然大家都知道, 但还是会神不知鬼不觉的敲了.
具体啥场景下会敲错呢 ?情况一 :
我现在要删除一个文件 :
这样删是没问题的, 但就怕多敲了一个空格 : rm -rf / root/777
可以看到在第一个 / 后面跟了一个空格, 这时候 Linux 就认为你要删除两个目录 :
一个是 /
一个是 ./root/777 (./ 省略了)
这就真寄了.情况二(更隐秘) :
编写 xshell 脚本的时候, 可能需要定义一个变量, 比如 : DIR=hello.txt
当我删除这个变量的时候就是 : rm -rf /$DIR, 注意 这个时候如果变量未定义, 那么 $DIR 就相当于空字符串了, 命令也就相当于 : rm -rf /
cp (复制)
copy 复制.
cp 要复制文件 目标目录
还可以通过 cp 进行重命名, 当然它不是自己重命名, 而是复制一份, 并将复制的改个名字 :
注意 : 如果拷贝的文件已经存在, 则会将原有文件覆盖.
当然 cp 还可以复制目录, 复制目录时, 加上 -r ( r 表示递归, 将所有子目录子文件都复制)
mv (移动)
类似于 cp, 也是这种形式 : mv 要移动的文件 目标目录
当命令是这种形式时 : mv hello.txt world.txt
就是单纯的重命名了, 可以理解为边移动, 边改名.
Linux 中, 没有单独的命令进行重命名, 就是通过 mv 来完成的. (mv 也可以移动目录, 不需要加 -r)
mv 操作是非常快的, 文件路径只是一个属性, 修改路径就是修改这个文件的属性, 很快的.
Linux 中, 没有回收站, 经常用来模拟回收站, 想删除某个东西, 并不是直接 rm, 而是将其移动到一个单独目录中.
grep (字符串匹配)
快速搜索某个文件中, 是否包含某个特定字符串.
加上 -n 可以显示字符串出现在该文件哪一行, -n 也可以放 grep 后面.
grep 也可以在多个文件中进行搜索.
" * " 表示当前目录下所有文件.
-R 表示递归搜索, 如果该目录下还有目录, 就会进入子目录搜索.
grep 不仅仅可以搜索文件内容, 还可以和其它命令联动.
ps (查看进程)
ps 用于查看当前系统上运行的进程, 可与 grep 联动.
ps aux 列出系统中所有进程.
ps aux | grep “进程名” 查看某个进程. grep 起到筛选的作用.
前面 3690818 是身份标识 pid, 后面的字符串是 mysql 对应的服务器进程, 注意, 每次敲的命令本身也是一个进程, 对照上图, 就是 root 对应的进程.
ps aux | grep “进程id” 根据 pid 来查询进程.
netstat (查看网络状态)
netstat 查看系统上的网络状态.
netstat -anp , 显示所有.
一般我们都是关注其中一部分信息, 搭配 grep 来查询.
:::3306 是本端的 ip 和端口, ::: 是 ipv6 的写法.
::: * 是对端 ip 和端口
3690818 是进程的 pid
面试常考 :
通过 ps 来查看某个进程的 pid.
通过 netstat 查看某个进程绑定的端口号.