Ubuntu学习
Ubuntu Server学习
** Xshell **
复制:Ctrl+Insert *
粘贴:Shift+Insert *
登录
**远程登录 **
1 | *command 参数1 参数2* |
使用root用户登录
root用户是超级管理员,权限很大。
1 | 执行命令 sudo passwd root |
文本编辑vi
vi的三种模式
- 命令模式
- h — 光标左移一个字符
- j — 光标下移一个字符
- k — 光标上移一个字符
- l — 光标右移一个字符(插入模式上下左右键)
- gg — 回到开始行
- G —移动到文件末尾
- Ctrl + f 往下翻一页
- Ctrl + b 往上翻一页
- yy 复制光标所在行
- p 粘贴
- 插入模式 ESC 退回命令模式
- a —光标所在位置后插入文本 append
- i —光标所在位置前插入
- o —插入新行
- 底行模式
在屏幕底部打开命令行,主要是 保存、退出- :wq 保存文件并退出
- :q不保存,并退出
- :q! 编辑过了,不保存文件,强制退出
- :w只保存文件,不退出vi
- :set nu 显示行号
- /abc 查找abc字符
- :1,$s/string/replace/g 替换功能,把文件中的string替换为replace
文件系统
Linux中,文件是一个非常广泛的概念。
Linux中的文件,不仅仅指磁盘上的文本、图片、视频文件,也包括硬件设备。
分区和文件系统
在windows上,可以为一块磁盘分区,创建好分区后,还不能直接在分区里存放文件,需要格式化分区。所谓格式化分区,即为分区安装文件系统。
windows上使用的主要是 NTFS。
Linux上有 ext2 ext3 ext4等
文件系统是一种规范,规定了文件存放在磁盘上的方式
- Windows文件系统里面都是磁盘文件或目录
- Windows的文件路径是从盘符开始的
- Windows上的文件的路径是大小写不区分的
挂接
但是,Linux系统不同,Linux文件系统里面不都是磁盘文件。
从Window过来学习Linux的同学要纠正一个思维定式,就是看到路径就一定要和磁盘上的存储的目录或文件对应起来。
而Linux文件系统目录里面除了磁盘文件,还有很多设备、甚至一些虚拟的对象,也在文件系统目录里面访问。

随后的启动过程,才会,将不同的分区 挂接(mount) 到文件系统不同的目录中。
上图就是把一个磁盘分区挂接到 /opt 下面。 /opt 这个路径在这个动作中被称为挂接点。
挂接后的文件系统目录如下图所示。

一个文件的全路径 是 从 根 到 该文件 这条路径上 所有节点名 顺序连接,每个节点之间以 / 分开。
注意:区分大小写
目录和文件操作
当前工作目录 /home/用户名
绝对路径 /相对路径
1 | cd . 当前路径 |
用户管理和文件权限
现代操作系统都是一个多用户的操作系统。
添加/删除用户
1 | adduser # 添加用户,自动建立一个同名用户组 |
设置密码
1 | passwd #修改密码su |
用户切换
1 | su - hxh2 # 切换到用户hxh |
用户组
1 | groups hxh # 查看hxh属于哪个用户组 |
文件权限
Linux文件的访问有三种权限: 读(用字母r表示)、写(用字母w表示)、执行(用字母x表示)
某个用户 对于一个 文件 :
有读权限,表示该用户可以读取文件的内容,
有写权限,表示该用户可以修改文件内容,
有执行权限, 表示该用户可以运行该文件(当然该文件应该是可执行文件)
而 这三种权限 对目录,含义又不一样。
某个用户 对于一个 目录 :
有读权限,表示该用户可以查看该目录里面的内容,
有写权限,表示该用户可以在该目录里面 创建 和删除 文件,
有执行权限, 表示该用户可以使用 cd命令,进入该目录
对 某个文件或者目录,Linux系统需要说明 三种类型的用户 ,分别具有怎样的权限
这三种类型分别是:
文件的所有者,英文叫 owner , 也就是 该文件的 创建者
文件归属的用户组里面的用户 ,英文叫 grouper,
其他用户 (非owner和非grouper)
Linux系统需要为每个文件和目录,指定这个三种类型的用户,具有什么r、w、x里面的哪些权限
文件存取权限的显示 可以通过”ls -l”命令显示
1 | drwxr-xr-x 3 root root 4096 Jul 8 06:31 h1 |
sudo
sudo以root权限运行程序
例如:sudo adduser hxh 以root权限添加用户hxh
进程管理
windows下的可执行文件.exe
正在运行的实例称为进程
1 | ps # 查看进程信息 |
进程的创建和查看
Linux中,一个进程A里面可以创建一个新的进程B,进程A叫做进程B的父进程,B叫做A的子进程。
1 | ps 显示和当前终端有关的进程信息 |
进程的前台、后台转换
Linux终端通过Shell程序来接收用户输入的命令,并且执行命令。
我们在Shell里正在执行的,和用户进行人机交互的进程叫 前台进程 (foreground process)
前台进程可以接收键盘输入并将结果显示在显示器上。
用户敲入什么命令,shell就会启动对应的程序,运行在 前台 。
有些程序运行时,并不需要和用户进行交互,也就是说,不需要用户输入什么内容。 比如一个日志分析程序,一个定时清理磁盘文件的程序。
比如,下面这样的一个Python程序 t2.py:
1 | import time |
我们可以执行命令 python3 t2.py 运行它
这样的程序,运行期间,如果在前台执行,我们只能等待它结束,不然我们没法执行下个程序。
但是既然不需要用户输入信息,在前台执行,没有太大意义,我们应该要让它在 后台 执行。
要让它在后台运行,启动时只需在命令行的最后加上“&”符号。
比如 python3 t2.py &
后台运行的进程我们叫后台进程(background process),或者后台任务 ,它不直接和用户进行交互的进程。用户一般是感觉不到后台进程程序的运行。
nohup
我们在执行命令时候,使用 & 结尾可以使进程在后台进行。
但是如果终端关闭,程序也会被关闭,因为shell会发送SIGHUP信号给这些进程,进程接受的该信号,如果没有特别的处理,缺省就会结束运行。
未来避免这种情况,可以使用nohup
1 | nohup python3 xxx.py & # 后台运行xxx.py,且不会因为终端的关闭导致进程结束 |
进程的终止
自行终止
- 执行完任务自动结束
- ctrl c 结束 / exit
被强制杀死
1
kill -1 id # 杀死id号的进程,使用ps查看进程的id号
重定向和管道
stdin/stdout/stderr与重定向
什么是终端?人—终端—程序
Linux进程在启动后,通常会打开3个文件句柄,标准输入文件(stdin),标准输出文件(stdout),标准错误文件(stderr)。
Linux进程,要从用户那里读入输入的信息,从stdin文件读取信息,输出信息给用户是输出到stdout,输出错误信息是输出到stderr。
缺省情况下这三个文件都是指向 终端设备。
即:Linux从stdin里面读取信息其实就是从终端设备读取信息
Linux进程写入信息到stdout stderr就是打印到终端设备上。
重定向:使用**>**符号可以将输出结果输出到其他文件
1 | # 标准输出重定向 |
管道
grep命令可以从文件中过滤出包含指定字符串模式的行。
1 | grep mike file1 # 在file1文件中过滤包含mike的行 |
将一个命令的输出内容,作为另一个命令的输入内容。
apt
Advanced Packing Tool
更改源
- 以root账号登录,或者后续命令前面加
sudo以root执行 - 执行命令
cd /etc/apt进入到目录/etc/apt下 - 执行命令
cp sources.list sources.list.bak先创建备份文件,这样万一改错,可以有备份文件恢复 - 执行
vi sources.list打开文件, 准备把域名从从cn.archive.ubuntu.com替换为mirrors.163.com - 按 冒号,进入底行模式,输入命令
1,$s/cn.archive.ubuntu.com/mirrors.163.com/g进行替换 - 确认一下域名修改正确后,输入
:wq保存退出。 - 执行命令
apt update, 让修改生效
1 | apt install package1 # 安装装软件 |
启动、重启、关闭服务
inux上有些软件程序是以服务的形式安装的,比如 SSH 服务、 MySQL服务、 nginx服务等。
这些 软件 的启动、重启、关闭 要使用特殊的命令
在当前的 Ubuntu 系统上,使用命令 systemctl 来 启动、重启、关闭 服务。
要查看 服务 ssh 状态, 执行命令
systemctl status ssh要启动 服务 ssh, 执行命令
systemctl start ssh要重启 服务 ssh, 执行命令
systemctl restart ssh要关闭 服务 ssh, 执行命令
systemctl stop ssh
打包与压缩
打包
Linux下打包的最常用命令是tar 命令,可将多个文件、目录打包到一个文件中。
1 | tar cvf byhy.tar ./byhy byhy.txt # tar 命令打包 |
注意:tar命令只是把文件、目录打包到一个文件中。 并不会压缩文件
压缩
gzip命令用于文件的压缩与解压缩,压缩后的文件名后缀为“.gz”
1 | gzip abc.txt # 压缩 |
gzip 和 tar 的联合使用
1 | tar zcvf byhy.tar.gz *.txt 打包*.txt再压缩到byhy.tar.gz |
解压缩并解包,使用下面命令:
1 | tar zxvf byhy.tar.gz # 解压并解包 |
● bzip2、zip 压缩、解压
bzip2 和 zip 也是常见的压缩解压工具, 使用方法和 gzip 类似
如下
1 | --------------------------------------------- |
注意:如果你的Linux上没有安装 bzip2、zip、unzip,可以执行命令 apt install bzip2 zip unzip 来安装。
查看系统进程的动态运行情况
1 | top |
cpu整体负载
1 | Cpu(s): 0.0 us, 0.0 sy, 0.0 ni, 99.7 id, 0.0 wa, 0.0 hi, 0.3 si, 0.0 st |
各个cpu的负载(按键盘1,可以在整体cpu和所有cpu之间切换)
1 | Cpu0 : 0.3%us, 0.3%sy, 0.0%ni, 97.7%id, 1.3%wa, 0.0%hi, 0.3%si, 0.0%st |
整体内存使用量
1 | KiB Mem : 2895572 total, 2507692 free, 118824 used, 269056 buff/cache |
按快捷键大写的 M 可以 对进程列表按照内存使用率来排序,各个进程对内存的占用(RES)
网络管理
一个网卡可以配置多个网络接口
1 | ip addr # 查看ip地址 |
启用、禁用网络接口
启用和禁用网络接口,常用的是 ifup 和 ifdown ,要使用root用户执行
Ubuntu 现在缺省是没有这两个命令的, 可以先运行 apt install ifupdown 安装一下。
● 启用网络接口
使用命令 ifup,比如下面的命令就是启用网络接口 enp0s3
1 | ifup enp0s3 |
● 禁用网络接口
使用命令 ifdown,比如下面的命令就是禁用网络接口 enp0s3
1 | ifdown enp0s3 |
ping 检测网络连通性
我们经常需要检查是否可以从本机访问某个远程主机,这时应该使用 ping 命令
例如:
1 | $ ping 192.168.100.1 |
上面的结果就表示 本机 和 IP 为192.168.100.1 的设备(可能是计算机也可能是路由器)之间的网络是通畅的。
可以按 ctrl+C 终止 测试。
netstat查看网络状态
Ubuntu 现在缺省安装的查看网络状态的工具是 Socket Statistics, 命令名为 ss 。
但是 目前这个工具使用还不是特别广泛,目前查看网络状态大多数人还是会使用著名的 netstat 。netstat 这个命令通常用来 查看各种与网络相关的状态信息,包括:网络的连接、状态、接口的统计信息、路由表、端口的监听情况。但是 Ubuntu 现在缺省没有安装这个netstat, 可以使用命令 sudo apt install net-tools 安装 net-tools 工具包后,即可使用。
常用参数:
-a (all)显示所有选项,默认不显示LISTEN相关
-t (tcp)仅显示tcp相关选项
-u (udp)仅显示udp相关选项
-n 不显示端口协议名,显示端口数字
-l 只显示 Listen (监听) 的状态端口
-p 显示建立相关链接的进程PID
-r 显示路由信息,路由表
Netstat 最常用的地方就是查看网络连接情况,比如查看22端口上的tcp网络连接情况
使用命令 netstat -anp | grep 22 | grep tcp
1 | [root@localhost ~]# netstat -anp |grep 22 |grep tcp |
SSH (secure shell)登录远程机器
之前我们使用的是Windows下面的终端模拟器PuTTY 远程登录Linux主机。在Linux下,也可以远程登录其他Linux主机,只需要运行ssh命令即可。命令的格式如下
1 | ssh 用户名@IP地址或机器域名 |
比如,你要 使用 user1 账号 远程登录 192.168.1.12 这台Linux机器,执行下面的命令
1 | [byhy@localhost ~]$ ssh user1@192.168.1.12 |
一般首次登录某个主机的时候,会出现如下提示:
1 | The authenticity of host '192.168.1.12 (192.168.1.12)' can't be established. |
这是因为该远程机器没有被认证过(可能会有‘中间人’攻击的安全隐患),让你确认一下。这里如果是局域网里面的机器,一般安全没有什么问题,输入yes并回车即可。
接下来,会提示输入对应用户的密码,你输入正确的密码即可登录。
scp拷贝文件
在Linux上,可以直接使用scp命令 和远程Linux主机 进行文件的拷贝。
scp是secure copy的缩写,意为文件安全拷贝,它可以将远程Linux系统上的文件拷贝到本地计算机,也可以将本地计算机上的文件拷贝到远程Linux系统上。比如:
我们已经登录到主机A上面,要将 /home/byhy1 目录下面的文件abc.txt,拷贝到主机B的/home/byhy2目录下面,主机B的IP地址为:192.168.1.12我们要拷贝到 B主机, 必须要有B主机的用户账号, 假如B主机的账号是 byhy2,应该这样写
1 | scp /home/byhy1/abc.txt byhy2@192.168.1.12:/home/byhy2 |
接下来,会提示用户输入用户byhy2的密码,输入正确密码后,进行拷贝操作。如果,我们要 在主机A上面,将主机B上面的文件/home/byhy2/123.txt 拷贝到主机A的/tmp/下面:
1 | scp byhy2@192.168.1.12:/home/byhy2/123.txt /tmp/ |
winscp
在windows机器上和远程Linux机器进行文件的拷贝
wget下载
Linux中,要从网络下载文件,可以使用 wget。
wget就是一个下载文件的命令行工具。
例如:
1 | wget https://mirrors.aliyun.com/centos/timestamp.txt |
防火墙
通常网站服务之类的产品运行在Ubuntu上,我们会开启防火墙。防止恶意的网络访问和攻击。
Ubuntu目前使用命令 ufw (uncomplicated firewall) 管理防火墙功能。
缺省 ufw 是未被激活的,执行如下命令激活。
1 | ufw enable # 开启防火墙 |
注意:这个命令最好是在 虚拟机终端执行。
如果是Putty远程登录,并且当前没有允许SSH访问的ufw规则,执行这个命令可能就会断开连接。
可以执行如下命令检查 当前的 防火墙设置
1 | ufw status |
或者查看更详细的信息
1 | ufw status verbose |
● 开放端口
如果我们允许 外面从网络访问本机的 SSH TCP 服务端口 22 ,应该这样执行命令
1 | ufw allow 22/tcp |
如果你知道端口对应的服务名,也可以使用名字。
比如下面的命令可以允许外面从网络访问 本机的 ssh 服务
1 | sudo ufw allow ssh |
比如下面的命令可以允许外面从网络访问 本机的 HTTP 服务端口 80
1 | ufw allow http |
● 删除规则
要删除一个前面设定的规则,执行下面的命令
1 | ufw delete allow http |




