• 开发、部署系统环境 - Linux 环境(ubuntu)


    @[TOC](开发、部署系统环境 - Linux 环境(ubuntu))
    现在部署服务器系统很多都在使用 linux 环境,和 windows 差距很大,尤其是纯命令行的服务器版。linux 的命令行和 windows 的命令行也不一样。看了网上介绍,大多数推荐 ubuntu 或 centos,不过因为个人学习使用,再加上 centos 不再进行维护,所以选择了 ubuntu 的服务器版。

    安装

    个人使用的是 windows 系统,使用 VMware 来安装 linux 系统。

    安装 VMware,完成后创建虚拟机。然后加载系统镜像,安装系统。

    ubuntu中文官网

    如果需要手动配置 ipv4,需要注意的是 subnet 填入网关ip使用子网,格式为 ip/子网。nameserver 即是 dns。
    需要注意的是,安装时候会要求选择镜像地址,改成阿里云的 Ubuntu 镜像地址

    http://mirrors.aliyun.com/ubuntu

    当安装完成后会有提示,之后就可以重启了。用虚拟机会有个报错,意思是无法移除安装介质,这时候可以不管,之后在 VMware 里移除。

    登录

    重启完成后,会提示用户登录,用户名和密码都在安装时进行了设置(注意用户名是 nick name),输入正确后就进入了服务器。

    然后可以输入一些指令查看安装信息

    lsb_release -a 查看系统版本
    ip addr 查看ip地址

    配置 SSH,开启远程登录

    输入命令

    sudo apt-get install openssh-server

    可能会暂停,有提示,直接 Y。安装完成后可以输入命令查看是否成功

    ps -e |grep ssh
    dpkg -l | grep ssh

    如果有 openssh-server 就是成功了,此时使用自己的 ssh 工具登录即可。如果没有,则需要开启 ssh 服务

    /etc/init.d/ssh start

    初始配置,创建 root 用户

    $ sudo passwd root		# 给 root 用户添加密码
    [sudo] password for dummy:  			# 此处需输入普通用户的登录密码
    New password:							# 此处输入 root 用户的登录密码(新设置密码)
    Retype new password:					# 此处再次输入 root 用户的登录密码(确认与上面的密码输入一致)
    passwd: password updated successfully	# 创建完成 root 用户
    $ su root				# 切换为 root
    Password:								# 此处输入上面设置的 root 用户登录密码,回车即可登录至 root 用户
    # exit									# 退出登录 root 用户,回到普通用户登录态
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    然后可以开启 root 用户的 ssh 登录许可

    # 打开ssh服务配置文件所在的文件夹
    cd /etc/ssh/
    # 使用vim编辑器对配置文件进行编辑
    # vim的基本使用方法(按字母“i”进入编辑模式,按ESC退出编辑模式,“:wq”保存退出)
    vim sshd_config
    
    • 1
    • 2
    • 3
    • 4
    • 5

    进入后按 i 进入编辑模式,然后找到 # port 22 改为 port 22 (将 # 去掉),再找到 #PermitRootLogin prohibit-password,改为 PermitRootLogin yes,然后按 ESC退出编辑模式,再输入 :wq 保存退出。

    最后重启 ssh 服务

    service sshd restart

    一些基础配置

    ubuntu 的换源

    都直到 ubuntu 换成国内的源会快很多,但是 docker 的原生 ubuntu 镜像运行的容器连 vi 都没有,需要换源只能手动进行了。需注意的是,源的版本需要和 ubuntu 版本一致,这里版本指的不是版本号,而是 codename 代码版本,可以通过 lsb_release -a 来查看
    在这里插入图片描述
    codename 里显示的就是代码版本了。在换的源中间可以指定代码版本,例如我的就是 focal。docker 原生的 ubuntu 连 lsb_release 都没有,可以使用 apt install lsb-release 来安装,或直接换 focal 的源。

    rm /etc/apt/sources.list	# 删除默认的源文件
    # 也可以重命名源文件,以做备份
    # mv /etc/apt/sources.list /etc/apt/sources.list.bak
    
    # 添加 163 的镜像源
    echo "deb http://mirrors.163.com/ubuntu/ focal main restricted universe multiverse" >/etc/apt/sources.list
    echo "deb http://mirrors.163.com/ubuntu/ focal-security main restricted universe multiverse" >>/etc/apt/sources.list
    echo "deb http://mirrors.163.com/ubuntu/ focal-updates main restricted universe multiverse" >>/etc/apt/sources.list
    echo "deb http://mirrors.163.com/ubuntu/ focal-proposed main restricted universe multiverse" >>/etc/apt/sources.list
    echo "deb http://mirrors.163.com/ubuntu/ focal-backports main restricted universe multiverse" >>/etc/apt/sources.list
    echo "deb-src http://mirrors.163.com/ubuntu/ focal main restricted universe multiverse" >>/etc/apt/sources.list
    echo "deb-src http://mirrors.163.com/ubuntu/ focal-security main restricted universe multiverse" >>/etc/apt/sources.list
    echo "deb-src http://mirrors.163.com/ubuntu/ focal-updates main restricted universe multiverse" >>/etc/apt/sources.list
    echo "deb-src http://mirrors.163.com/ubuntu/ focal-proposed main restricted universe multiverse" >>/etc/apt/sources.list
    echo "deb-src http://mirrors.163.com/ubuntu/ focal-backports main restricted universe multiverse" >>/etc/apt/sources.list
    
    # 添加阿里云的镜像
    echo "deb http://mirrors.aliyun.com/ubuntu/ focal main restricted universe multiverse" >/etc/apt/sources.list
    echo "deb http://mirrors.aliyun.com/ubuntu/ focal-security main restricted universe multiverse" >>/etc/apt/sources.list
    echo "deb http://mirrors.aliyun.com/ubuntu/ focal-updates main restricted universe multiverse" >>/etc/apt/sources.list
    echo "deb http://mirrors.aliyun.com/ubuntu/ focal-proposed main restricted universe multiverse" >>/etc/apt/sources.list
    echo "deb http://mirrors.aliyun.com/ubuntu/ focal-backports main restricted universe multiverse" >>/etc/apt/sources.list
    echo "deb-src http://mirrors.aliyun.com/ubuntu/ focal main restricted universe multiverse" >>/etc/apt/sources.list
    echo "deb-src http://mirrors.aliyun.com/ubuntu/ focal-security main restricted universe multiverse" >>/etc/apt/sources.list
    echo "deb-src http://mirrors.aliyun.com/ubuntu/ focal-updates main restricted universe multiverse" >>/etc/apt/sources.list
    echo "deb-src http://mirrors.aliyun.com/ubuntu/ focal-proposed main restricted universe multiverse" >>/etc/apt/sources.list
    echo "deb-src http://mirrors.aliyun.com/ubuntu/ focal-backports main restricted universe multiverse" >>/etc/apt/sources.list
    
    # 添加清华源
    echo "deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal main restricted universe multiverse" >/etc/apt/sources.list
    echo "deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal main restricted universe multiverse" >>/etc/apt/sources.list
    echo "deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-updates main restricted universe multiverse" >>/etc/apt/sources.list
    echo "deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-updates main restricted universe multiverse" >>/etc/apt/sources.list
    echo "deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-backports main restricted universe multiverse" >>/etc/apt/sources.list
    echo "deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-backports main restricted universe multiverse" >>/etc/apt/sources.list
    echo "deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-security main restricted universe multiverse" >>/etc/apt/sources.list
    echo "deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-security main restricted universe multiverse" >>/etc/apt/sources.list
    echo "deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-proposed main restricted universe multiverse" >>/etc/apt/sources.list
    echo "deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-proposed main restricted universe multiverse" >>/etc/apt/sources.list
    
    # 添加中科大源
    echo "deb https://mirrors.ustc.edu.cn/ubuntu/ focal main restricted universe multiverse" >/etc/apt/sources.list
    echo "deb-src https://mirrors.ustc.edu.cn/ubuntu/ focal main restricted universe multiverse" >>/etc/apt/sources.list
    echo "deb https://mirrors.ustc.edu.cn/ubuntu/ focal-updates main restricted universe multiverse" >>/etc/apt/sources.list
    echo "deb-src https://mirrors.ustc.edu.cn/ubuntu/ focal-updates main restricted universe multiverse" >>/etc/apt/sources.list
    echo "deb https://mirrors.ustc.edu.cn/ubuntu/ focal-backports main restricted universe multiverse" >>/etc/apt/sources.list
    echo "deb-src https://mirrors.ustc.edu.cn/ubuntu/ focal-backports main restricted universe multiverse" >>/etc/apt/sources.list
    echo "deb https://mirrors.ustc.edu.cn/ubuntu/ focal-security main restricted universe multiverse" >>/etc/apt/sources.list
    echo "deb-src https://mirrors.ustc.edu.cn/ubuntu/ focal-security main restricted universe multiverse" >>/etc/apt/sources.list
    echo "deb https://mirrors.ustc.edu.cn/ubuntu/ focal-proposed main restricted universe multiverse" >>/etc/apt/sources.list
    echo "deb-src https://mirrors.ustc.edu.cn/ubuntu/ focal-proposed main restricted universe multiverse" >>/etc/apt/sources.list
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51

    修改时区

    如果 Linux 系统时区配置不正确,必需要手动调整到正确的当地时区。NTP 对时间的同步处理只计算当地时间与 UTC 时间的偏移量,因此配置一个 NTP 对时间进行同步并不能解决时区不正确的问题。所以在用了国外云计算服务商如 Microsoft Azure 或其它 VPS、虚拟机时,需要注意是否与中国大陆的时区一致。

    # 查看当前系统时间
    date
    # 获取/修改当前系统时区 TZ 值,会引导用户一步一步进行区域选择
    tzselect
    # linux 是一个多用户系统,每个用户都可以设置自己的时区
    export TZ='Asia/Shanghai'
    # 执行完成之后需要重新登录系统或刷新 ~/.bashrc 生效。
    source ~/.bashrc
    # 要更改 Linux 系统整个系统范围的时区
    rm -f /etc/localtime
    ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    如果 Linux 系统使用 Systemd,还可以使用 timedatectl 命令来更改 Linux 系统范围的时区。在 Systemd 下有一个名为 systemd-timedated 的系统服务负责调整系统时钟和时区,可以使用 timedatectl 命令对此系统服务进行配置。

    timedatectl set-timezone 'Asia/Shanghai'
    
    • 1

    防火墙

    ubuntu 使用的防火墙名为UFW(Uncomplicated Fire Wall),是一个iptable的管理工具。常用命令如下:

    命令说明
    ufw status查看防火墙状态,inactive是关闭,active是开启
    ufw status verbose查看防火墙详细信息
    ufw disable关闭防火墙
    ufw enable开启防火墙,开启防火墙的状态下,只有系统允许的端口才能被其他主机访问。
    ufw reload重启防火墙
    ufw allow 端口号开放指定端口号
    ufw delete allow 端口号关闭指定端口
    ufw deny 端口号不允许访问指定端口号

    ufw激活后的默认的策略是允许出去,不允许流量进来,这个可以在ufw的配置文件中看到。在配置文件/etc/default/ufw中可以看到DEFAULT_OUTPUT_POLICY="ACCEPT",如果需要端口可以出去,则需要自己配置。

    可以通过ufw的命令来直接修改端口规则。

    ufw allow port_number/protocol
    
    • 1

    ufw配置了一些特定的端口的规则,可以直接用。

    ufw allow http #允许http连接
    ufw deny http #阻止http连接
    
    • 1
    • 2

    这些特定的端口定义在文件/etc/services中,也可以自己配置端口的规则。

    ufw allow 2222/tcp #允许2222端口的TCP
    ufw allow 2222/udp #允许2222端口的UDP
    ufw deny 2222/tcp #阻止2222端口的TCP
    ufw deny 2222/udp #阻止2222端口的UDP
    
    • 1
    • 2
    • 3
    • 4

    如果不带有TCP或者UDP,则默认两种都可以。

    ufw allow 2222 #允许2222端口的连接
    ufw deny 2222 #阻止2222端口的连接
    
    • 1
    • 2

    如果要配置一组连续的端口,则可以这样。

    ufw allow 2200:2222/tcp #允许2200到2222端口的TCP
    ufw deny 2200:2222/tcp #阻止2200到2222端口的UDP
    
    • 1
    • 2

    可以设置特定的IP可以连接过来。

    ufw allow from xx.xx.xx.xx to any port 2222 #允许特定IP通过端口2222
    ufw deny from xx.xx.xx.xx to any port 2222 #阻止特定IP通过端口2222
    
    • 1
    • 2

    还可以设置特定的子网连接

    ufw allow from xx.xx.xx.xx/24 #允许特定子网连接
    ufw deny from xx.xx.xx.xx/24 #阻止特定子网连接
    
    • 1
    • 2

    默认的规则都是进,我们可以通过inout配置。

    ufw allow in 2222 #允许2222端口的流量进来
    ufw deny in 2222 #阻止2222端口的流量进来
    ufw allow out 2222 #允许2222端口的流量出去
    ufw deny out 2222 #阻止2222端口的流量出去
    
    • 1
    • 2
    • 3
    • 4

    删除有两种方式。通过在规则前面加上delete删除规则。

    ufw delete allow 2222/tcp #删除 allow 2222/tcp这条规则
    
    • 1

    还有一种方法是通过查看规则序列号来删除。

    ufw status numbered
    #执行后的接结果
    Status: active
    
         To                         Action      From
         --                         ------      ----
    [ 1] 22/tcp                     ALLOW IN    Anywhere
    [ 2] 80/tcp                     ALLOW IN    Anywhere
    [ 3] 8080/tcp                   ALLOW IN    Anywhere
    
    ufw delete 3 #删除第三条规则。
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    需注意的是,UFW(iptables)规则的匹配基于规则出现的顺序,一旦匹配某个规则,检查便会停止。因此,如果某个规则允许访问TCP端口22(如使用udo ufw allow 22),后面另一个规则指示拦截某个IP地址(如使用 ufw deny proto tcp from 202.54.1.1 to any port 22)。最终,允许访问TCP端口22的规则会被使用,而后一个拦截黑客IP地址 202.54.1.1 却没有被使用。这都是由于规则的顺序造成的。为避免这类问题,
    你需要编辑 /etc/ufw/before.rules 文件,在"# End required lines"之后使用"Block spammers"添加规则。配置完后需要重新加载 ufw reload

    另外 ufw 是 iptables 的管理工具,一些应用服务会自动添加规则到 iptables 里(例如 docker),这些在 ufw 是不显示的,可以使用 iptables -L 来查看。

    查看和修改ip地址

    查看当前使用的 ip 地址

    # 查看所有使用的 ip 地址,会有多个,包括虚拟ip。一般名称以 ens 开头的是物理网卡
    ip addr
    # 查看网卡信息,会有很多 Ip 信息
    ifconfig -a
    
    • 1
    • 2
    • 3
    • 4

    使用命令行修改 ip 地址(重启可能会失效)

    # 静态 ip
    ifconfig 网卡名 ip地址 netmask 子网掩码
    # 动态 ip
    dhclient -r
    dhclient 网卡名
    
    • 1
    • 2
    • 3
    • 4
    • 5

    修改配置文件的方式重启不会失效,但是配置文件根据系统的不同所在路径位置不一样。例如 ubuntu 系统 17.10 之前是在 /etc/network/interfaces,而之后则更改为 /etc/netplan/*.yaml(此文件名也不统一,但都是 .yaml 文件)。格式为(注:# 是为了注释,修改此文件时不能添加),注意格式缩进严格对齐,每个冒号后面有空格,然后才是内容。

    network:	#网络
      version: 2	#版本
      renderer: NetworkManager	#渲染器
      ethernets:	#以太网
        ens33:		# 网卡名称,可以使用 ifconfig 查看
          addresses: [192.168.1.10/24]		# ip 地址,必须有方括号
          dhcp4: no
          dhcp6: no
          routes:
          	- to: default
          	  via: 192.168.1.1		#网关
          nameservers:		#域名服务器
            addresses: [192.168.1.1,114.114.114.114]
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    如果使用 dhcp 则是:

    network:
      ethernets:
        ens33:
          dhcp4: true
      version: 2
    
    • 1
    • 2
    • 3
    • 4
    • 5

    修改完成后,输入命令,让配置生效

    netplan apply
    
    • 1

    基础知识

    安装软件和 sudo

    当初始安装完成后,如果使用最简化安装,则连 ping 的工具都没有,需要安装 ping 包。

    apt install iputils-ping

    还可以安装 vim,这个是文本编辑器

    apt -y install vim

    在普通用户中,使用此类指令,需要在前面添加 sudo,表示使用管理员执行。但是 linux 出于安全的考虑,使用 sudo 来执行一个程序时,会在一个新的、最小化的环境中执行,也就是说环境变量在 sudo 命令下被重置成默认状态了。所以当一个初始化的环境变量中不包含所要运行的程序所在目录,用 sudo 去执行,会得到 ‘command not found’ 的错误。

    这时有2个办法来解决:

    1. 添加环境变量
      要想改变 PATH 在 sudo 会话中的初始值,使用以下命令打开/etc/sudoers文件,vi /etc/sudoers
      找到"secure_path"一行,当你执行 sudo 命令时,"secure_path"中包含的路径将被当做默认 PATH 变量使用。按 “i” 键就可以进入插入模式(Insert mode),添加所需要的路径(如 /usr/local/bin)到"secure_path"下,Defaults secure_path = /sbin:/bin:/usr/sbin:/usr/bin:/usr/local/bin 编辑完成后,按 “ESC” 键切换为命令行模式,输入 “: wq” 保存并退出。
    2. 切换到 root 账户中

    linux 命令格式

    linux 系统的命令基本都遵循这个格式:

    命令名称 [命令参数] [命令对象]

    可执行文件

    使用 ls -l 命令可以查看各个文件详细信息,如果文件是可执行文件,则在权限栏里有 x 权限。执行此文件使用命令

    ./可执行文件名

    用户

    linux 用户分为普通用户和超级管理员用户,当安装系统时询问创建的用户是普通用户,登录后第一次切换超级管理员 root 时会提示创建账户和密码。之后可以根据需要创建普通用户和管理员用户。

    普通用户指令符是 $ ,而管理员指令符是 # 。除了超级管理员 root 的用户目录是 /root 外,其他用户的用户目录在 /home 下。

    开启/关闭服务

    可以使用 service 命令进行服务操作

    service 软件名称 start
    service 软件名称 stop
    service 软件名称 status

    也可以使用更强大的命令 systemctl 启动服务

    systemctl start 软件名称
    systemctl stop 软件名称
    systemctl restart 软件名称
    systemctl status 软件名称
    systemctl enable 软件名称
    systemctl disable 软件名称
    enable / disable 是控制软件是否开机启动

    自定义服务

    可以在路径 /etc/systemd/system/ 目录下,创建一个服务文件,例如创建 django.service 文件,并添加以下内容:

    [Unit]
    Description=My Django Service
    After=network.target
    
    [Service]
    User=<用户名>
    Group=<用户组>
    WorkingDirectory=<Django项目目录>
    ExecStart=<Python解释器路径> <Django项目目录>/manage.py runserver 0.0.0.0:8000
    
    [Install]
    WantedBy=multi-user.target
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    替换<用户名><用户组>(可以使用 groups 用户名 来获取)(可以使用 which 命令获取)为实际的用户名称、组、项目路径和Python解释器路径。然后就可以启动服务了。

    sudo systemctl enable django.service
    sudo systemctl start django.service
    
    • 1
    • 2

    进程

    可以根据进程号 PID 来关闭进程

    命令 &
    在后台执行命令或任务进程

    kill 进程号
    可以添加参数 -9 强制关闭进程

    ps
    查看进程,可以添加参数 -ef 查看更多信息

    jobs
    查看后台运行或停止的任务进程

    fg / bg
    前后台转换,可以将一个任务转换为前台 / 后台,参数为 jobs 命令查看的任务编号前加 %
    例如 jobs 查看到 redis-server & 任务编号为1,则可以使用 fg %1 转为前台任务。当转为前台时会占用交互界面,可以使用 ctrl + z 挂起任务,通过交互界面再用命令 bg %1 重新转为后台执行

    top
    相当于 windows 的任务管理器,可以查看进程运行状况和占用资源,按 q 退出

    基础指令

    • clear : 清除屏幕
    • w / who / whoami / last : 查看登录信息
    • shutdown -h 延迟时间 : 特定分钟后关机,时间可以使用 now 表示立刻
    • reboot : 重启
    • adduser / passwd / userdel : 创建用户修改密码 / 删除用户
    • su : 切换用户(switch user)
    • exit : 退出登录
    • date : 查看时间日期
    • logout / exit : 退出登录
    • help : 查看命令帮助
    • | : 管道,可以将多个进程连接起来(把前一个命令的输出作为下一个命令的输入)
    • : 输出重定向,可以将输出结果重定向到另外的地方,例如文本文件。

    • : 追加输出重定向,同 > 类似,进行追加

    • 2> : 错误输出重定向,同 > ,但是只输出错误信息
    • 2>> : 错误追加输出重定向, 2> 的 >> 版本
    • grep : 在文件或输出内容中搜索字符串(支持正则表达式)
    • find : 搜索文件,参数 / 从根目录查找,. 从当前目录查找,-name 查找文件名
    • ln : 创建链接,可选参数 -s 表示创建软链接,不带此参数表示硬链接,之后两个参数为源链接(或源文件)和创建的软链接
    • df : 查看驱动器信息,可选参数 -h 显示为可读信息

    文件目录操作

    • whick : 搜索软件
    • pwd : 打印工作目录(print working directory)
    • cd : 改变目录(change directory),使用相对路径或绝对路径,… 表示上一级,~ 表示用户主目录,/ 表示根目录
    • ls : 列出目录下的内容(list directory contents),可选参数 -l 长格式查看 -a 查看所有文件 -R 递归查看(遇到文件夹递归列出文件夹下内容)
    • cat : 连接多个文件(查看文件内容),可选参数 -n 添加行号
    • touch : 创建空文件或修改已有文件最后访问时间
    • dir : 查看文件目录
    • mkdir : 创建文件夹,可选参数 -p 指定路径,并根据需要创建父文件夹
    • rm : 删除(remove),可选参数 -f 强制删除,-r 递归删除(删除文件夹)
    • rmdir : 删除空文件夹
    • wget : 通过网络获取文件,参数为目标文件 url 地址,可选参数 -O 可重命名
    • gzip / gunzip : 文件压缩 / 解压缩 (gz / tgz)
    • xz : 文件压缩/解压 (xz),参数 -z 压缩,-d 解压缩,可选参数 -v 查看过程信息
    • tar : 文件归档/解归档,参数 -cvf 创建归档,-xvf 解除归档
    • wc : 查看文件内字符数,参数 -l 查看行数,-w 查看单词数, -c 查看字符数
    • head / tail : 查看文件首 / 尾部
    • more / less : 分页查看文件,参数 从某一行开始
      例子: cat -n taobao.html | more
    • uniq : 文件去重(相邻相同的内容会被过滤掉)
    • diff : 比较文件差别
    • cp : 复制文件,参数1是源文件,参数2是目标路径,可以是目录名(需带/),或完整路径(到文件名,包含扩展名),如果要复制文件夹带参数 -r
    • mv : 移动文件,使用方法同 cp,重命名也使用此方法

    快捷操作

    • Ctrl + D : 结束输入
    • Ctrl + C : 中断一个正在执行的命令
    • Ctrl + W : 删除命令中的一块
    • Ctrl + A : 光标到行首
    • Ctrl + E : 光标到行尾
    • Ctrl + Z : 挂起前台任务(任务暂停并放到后台)

    Linux 系统下的软件安装

    使用包管理工具安装

    yum(黄狗 CentOS的包管理工具) / rpm(红帽的包管理工具) / apt(ubuntu的包管理工具)。

    三个工具的使用方法类似,只是系统不同使用的包安装工具不同。

    yum search 包名称 : 搜索是否有软件包可以安装
    yum install 包名称 : 安装软件包(根据索引)
    yum remove 包名称 : 卸载软件
    yum update : 更新包管理工具索引
    yum upgrade : 根据索引更新现有软件
    yum dist-upgrade : 更新系统版本
    yum info 包名称 : 查看软件信息
    yum list --installed : 查看安装的软件

    源代码构建安装

    gcc / make

    下载软件源码,一般是 tar 文件,表示打包的文件(有些是 tar.gz 之类的,是将打包文件压缩了,可以先解压为 tar 文件)。可以使用 tar -xvf 来将打包文件解包为文件夹。

    如果文件夹下有 Makefile 文件,则可以使用 make 将源代码构建为可执行程序。

    make && make install
    如果安装过程报错,说明缺少其他支持软件,可以使用包管理工具安装补充。

    系统的环境变量

    在用户目录下,有个隐藏文件 .bash_profile (如果没有可以使用 touch .bash_profile 来创建 ),存储的就是环境变量信息。可以使用 vim 来编辑此文件修改环境变量。环境变量写在 PATH= 之后,由冒号分隔。例如

    PATH=$PATH:$HOME\bin:/usr/local/python37/bin
    
    export PATH
    
    • 1
    • 2
    • 3

    注意配置完成后需要执行一下激活环境变量

    source .bash_profile

    链接

    linux 可以创建链接,链接分软硬两种。

    区别在于硬链接会创建实体,实体引用了源文件(但是并不生产副本,不占用空间),对任意硬链接实体操作相当于操作源文件。但即使删除了源文件,只要硬链接存在源文件就会存在。

    而软链接类似于快捷方式,不会创建实体。可以通过软链接使用源链接或源文件。

    例如

    ln -s /usr/local/python37/bin/python3 /usr/bin/python3
    
    • 1

    别名

    可以给常用命令起别名,来简化操作。例如经常使用长格式查看当前目录文件,可以起别名进行简化

    alias ll='ls -l'
    
    • 1

    或者使用 unalias 来取消别名

    unalias ll
    
    • 1

    网络

    可以在 linux 系统中直接进行网络连接,传送下载文件等操作。

    wget 下载文件

    ssh 远程连接

    ssh 命令可以进行远程访问连接,格式为

    ssh 用户名@主机IP
    如果使用的是安全连接,则会询问是否接收证书

    连接上会询问登录密码,输入后就成功登录了。

    scp 安全发送文件

    scp 可以通过 ssh 创建安全连接复制文件到远程计算机,格式为

    scp 源文件路径 用户名@主机IP:目标文件绝对路径

    例如

    scp code/example01.py hellokitty@114.114.114.114:/home/hellokitty
    
    • 1

    然后输入密码就发送了。

    另外 scp 支持 -r 递归复制文件夹

    sftp 安全文件传输

    sftp 用户名@主机IP
    如果使用的是安全连接,则会询问是否接收证书

    连接上会询问登录密码,输入后就成功登录了。登录类型是 sftp。如果需要退出使用命令 quit 或 bye。

    可以使用 lls 命令查看本地文件,使用 lcd 切换本地文件夹。使用 ls、pwd、cd 等命令操作远端文件。

    使用 put 将文件推送至远端,使用 get 获取远端文件。

    ping 测试网络

    ping 命令和 windows 下的 ping 一样,可以用来检测网络的可达性。不同的是 linux 的 ping 不中断会一直 ping 。

    netstat 网络状态

    netstat -ntap
    n 是以数值方式显示ip地址,a 是所有,p 是显示进程信息

    vim 文本编辑器

    vim 是 linux 上最简单的命令行文本编辑器,可以编辑纯文本文件。

    打开文件

    vim 文件路径
    如果没有参数,则创建空文件

    vim 的三种模式

    • 命令模式 : 按键代表命令
    • 编辑模式 : 键入内容
    • 末行模式 : 搜索 / 配置 / 执行系统命令

    编辑模式和命令模式

    vim 是命令行文本编辑器,进入 vim 后处于命令模式,可以使用快捷键、快捷命令。如果需要编辑内容,按 i / a 可以进入编辑模式,此时左下角出现 – INSERT --。可以按 ESC 键退出编辑模式,进入命令模式。

    末行模式

    在命令模式,输入冒号 (😃 则可以进入末行模式,输入一些指令。输入内容显示在左下角,例如退出当前窗口是 :q ,退出 vim 不保存是 :qa!。输入回车则进入命令模式。

    常用命令

    • q : 当不需要保存时(保存过且无变动),退出当前模式
    • q! : 退出当前窗口,不保存
    • qa : 当不需要保存时(保存过且无变动),退出所有窗口
    • qa! : 退出所有窗口(vim),不保存
    • wq : 保存退出
    • set nu : 显示行号
    • set nonu : 不显示行号
    • set ts=4 : 调整制表键(tab键)缩进为4个空格
    • syntax on : 显示高亮语法
    • syntax off : 关闭高亮语法
    • set ruler / noruler : 显示 / 不显示光标所在位置(标尺)
    • set expandtab : 制表键变为空格
    • set autoindent : 自动缩进
    • set nohls : 搜索结果不高亮
    • map : 命令模式映射,可以将快捷命令映射为快捷键
      例如: map gg99999dd : 命令模式按下 F2 时相当于输入快捷命令 gg99999dd
    • imap / inoremap : 编辑模式映射 / 非递归模式映射,可以将输入的字符映射为特定字符
      例如: inoremap _main if __name__ == ‘__main__’ : 当输入 _main 时,自动转换为后面的字符

    快捷命令

    命令模式下直接输入可执行的快捷命令就是快捷命令,例如删除行为 dd,删除100行是 100dd。快捷命令会出现在右下角。

    常用快捷命令

    • i / a : 进入编辑模式
    • u : 撤销上一步操作
    • dd : 向下删除行,可以控制行数,例如 100dd
    • ZZ : 保存并退出,注意是大写的
    • G : 光标移动到文件末尾,可以控制移动行数,例如 300G 移动到300行
    • gg : 光标移动到首行
    • h : 光标左移一列(相当于键盘左键),支持参数,例如 10h 左移10 列
    • l : 光标右移一列(相当于键盘右键),支持参数,例如 10l 右移10 列
    • j : 光标下移一行(相当于键盘下键),支持参数,例如 10j 下移10 行
    • k : 光标上移一行(相当于键盘上键),支持参数,例如 10k 上移10 行
    • 0 : 光标移动到行首
    • $ : 光标移动到行尾
    • w : 光标移动到下一个单词
    • yy : 复制行,支持参数,例如 10yy 从光标所在行复制10行
    • p : 粘贴,支持参数,例如 10p 粘贴10次

    快捷键

    一些按键组合和特殊按键组成了快捷键,例如 ESC 可以退出当前模式。

    常用快捷键

    • ctrl + e : 下翻一行
    • ctrl + y : 上翻一行
    • ctrl + f : 下翻一页
    • ctrl + d : 上翻一页
    • ctrl + r : 取消撤销(重做)

    创建配置文件,记录常用配置

    每次使用 vim 还需要重新设置缩进、标尺、行号等,十分麻烦。可以创建配置文件,将这些配置记录下来,每次打开 vim 自动加载。

    首先进入用户目录,然后创建文件 .vimrc,这是一个隐藏文件。然后使用 vim 编辑此文件

    cd ~
    touch .vimrc
    vim vimrc
    
    • 1
    • 2
    • 3

    进入编辑模式,输入内容

    set nu
    syntax on
    set ts=4
    set expandtab
    set autoindent
    set ruler
    set nohls
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    然后保存退出,就记录了默认配置了。

    多窗口切换

    当使用 vim 同时打开多个文件编辑时,每次只能看到一个文件,但是可以在各文件中进行切换。

    vim test1.txt test2.txt test3.txt
    
    • 1

    在末行模式中,输入 ls 就能够查看当前打开的文档及其编号了。在末行模式输入 b + 空格 + 编号,例如 b 2 就能切换到第2个文件。

    可以在末行模式中,输入 vs 将屏幕垂直分成2部分,或输入 sp 将屏幕水平分成2部分。此时按两下 ctrl + w 可以切换分屏。在某个分屏中可以切换成其他文件。

    可以在末行模式中, 输入 q! 关闭当前窗口。

    文件比对

    在使用 vim 打开2个以上的文件时,添加参数 -d 则进入比对模式

    vim -d test1.txt test2.txt
    
    • 1

    比对模式会直接分屏显示,且将文件不同的地方高亮标出,在编辑时左右也会进行联动。

    文件恢复

    在文件编辑中,由于断线等原因意外退出,再次连接后,如果重新进行编辑会有提示,当前文件的临时文件(隐藏的.swp文件)存在,可以使用 O 打开只读,E 直接编辑,R 恢复文件,D 删除,Q 退出,A 终止。

    注意的是,恢复等操作完成后,这个临时文件可能还存在,需要手动删除,否则还会提示。

    当一个操作需要经常重复,则可以录制为宏,方便重复使用

    在命令模式,使用快捷命令 q 再加一个字母或数字,例如 a ,则可以进行宏的录制,此时左下角显示 recording。

    例如录制个每行行首输入 # 加空格 (python 中的注释此行),然后移动到下一行,则可以挨个进行操作:在命令模式按0将光标移动到行首,进入编辑模式输入 # 和空格,退出到命令模式下移一行。

    当宏录制完成后,在命令模式再次按 q 结束录制,则录制好了名称为 ‘a’ 的宏了,这个 a 就是录制时 q 后跟的字母。

    使用宏时,在命令模式输入快捷命令: 重复次数 + @ + 宏名。例如 4@a ,就将宏 a 重复了4遍。

    查找替换

    命令模式下,输入斜杠(/) 加查找内容,可以从光标位置,自上向下的查找输入的内容,问号是自下向上查找。此时按小写的 n 为顺序搜索,按大写的 N 是逆序搜索。

    如果需要替换,则进入末行模式,先输入替换范围,例如从第一行到最后一行(1,$);然后输入 s 表示替换;之后是查找需要替换的字符,例如替换 0(/0);再后是替换的内容,用斜杠和之前内容分隔,例如1000(/1000);之后加斜杠后可以添加其他参数,例如 c 表示需要确认,i 表示忽略大小写,g 表示全局模式(否则每行只查找替换一次),e 表示忽略错误继续查找替换。之后就开始查找替换了,每次查找后会询问是否替换,可以点 y / n。

    : 1,$s/0/1000/cge
    
    • 1

    另外 vim 的搜索和替换是支持正则的。

  • 相关阅读:
    java计算机毕业设计线上订餐系统MyBatis+系统+LW文档+源码+调试部署
    OpenAI 工程师平均薪酬 92.5 万美元;SpaceX 明年将每两天发射一次丨 RTE 开发者日报 Vol.81
    VVC代码阅读 帧内预测部分(1) xCheckRDCostIntra()函数(部分)
    使用gets函数求文件的行数
    Java项目:JSP游戏购买网站
    Java实现文件压缩
    第四节:如何使用注解方式从IOC中获取bean(自学Spring boot 3.x的第一天)
    游戏缺失d3dx9_39.dll的5个修复方法,深度解析d3dx9_39.dll文件的作用
    阿里云OSS服务使用操作流程
    Docker 学习总结(78)—— Docker Rootless 让你的容器更安全
  • 原文地址:https://blog.csdn.net/runsong911/article/details/127268083