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 |