linux常用命令与配置

linux常用命令与配置

screen

screen -S screen_name
# 新建一个名为screen_name的screen
screen -ls
# 显示已创建的screen终端
screen -r xxx
# 连接 screen_id 为 xxx 或者名字为 xxx 的screen 终端
按住Ctrl,先按A键,再按D键
# 退出screen会话

screen 连接不上,提示“There is no screen to be resumed matching xxxxx.” :

screen -D -r xxxx
# 删除前一用户再登录

systemctl

systemctl start xxx    # 启动xxx服务
systemctl restart xxx  # 重启xxx服务(会重启服务,造成服务一瞬间的中断)
systemctl status xxx   # 查看xxx服务的运行状态
systemctl stop xxx     # 停止xxx服务
systemctl reload xxx   # 重载xxx服务(会重新加载配置文件,服务不会中断)
systemctl enable xxx   # 激活xxx服务的开机启动(当然还有disable)
journalctl -u xxx      # 查看xxx服务的出错日志

附上常用的重启命令:

systemctl restart sshd.service  # 重启ssh服务

systemctl 新增 service 服务

案例:minio部署

  1. 创建服务模板:(centos 位于 /usr/lib/systemd/system/xxx.serviceubuntu 位于 /etc/systemd/system/xxx.service

    [Unit]
    Description=服务概述
    Documentation=服务文档
    # Requires=服务在此 daemon 启动后才能够启动
    
    [Service]
    # User=xxx
    # 命令执行用户
    WorkingDirectory=/data
    # 工作目录
    ExecStart=/path/to/xxx.sh
    # 执行此 daemon 的指令或脚本程序
    
    Restart=on-failure
    # 非正常退出时重启
    RestartSec=5
    # 设置在重启服务 (Restart) 前暂停多长时间,默认 100ms,上面设置为 5s
    
    [Install]
    WantedBy=multi-user.target
    # 设置服务在开机时启动
  2. 给予服务和脚本程序运行权限

    chmod +x /usr/lib/systemd/system/xxx.service
    chmod +x /path/to/xxx.sh
  3. 重载服务,并启动 xxx.service 和 增加开机执行权限

    systemctl daemon-reload
    systemctl start xxx
    systemctl enable xxx
  4. 查看运行状态

    systemctl status xxx.service
  5. 不依赖 xxx.sh 启动脚本

    启动脚本中 ExecStart= 后可以跟一句含有空格的完整命令,比如 node test.js,但必须为 node 提供确切的目录,写成下面这样:(test.js 是工作目录下的 node.js 脚本)

    ExecStart=/usr/bin/node test.js

    否则就会收到 Executable path is not absolute, ignoring: 启动命令 的错误。

    那么如何知道确切的目录呢?使用 type 命令即可:

    type node
    # node is /usr/bin/node

参考:Systemd 入门教程:实战篇 - 阮一峰的网络日志 (ruanyifeng.com)

Git(建立仓库并将文件部署到指定文件夹)

安装

# 检查git是否安装
git -v
# 若未安装则安装git
#ubuntu
sudo apt-get install git
#centos
sudo yum install -y git 

账户配置

考虑到安全性,新建一个名为 git 的用户,专门用于执行git的操作:

# 添加用户名为git
sudo adduser git

注:这里也可以使用下面的命令来建立用户,区别在于是否设置密码和在 /home 目录下会自动创建同名文件夹:

# 不会建立同名文件夹
useradd git
passwd git

然后配置git账户的公钥文件(用于使用 SSH 协议提交代码),可以直接将公钥导入(粘贴)服务器的 /home/git/.ssh/authorized_keys 文件中(没有目录和文件就新建),或者在 Windows 下的 Git Bash 进行以下操作:

ssh-copy-id -i ~/.ssh/id_rsa.pub git@server_ip_or_domain

配置好后就可以尝试直接使用 SSH 登录 git 账户,如果可以成功登录,则说明配置成功。
出于安全性考虑,需禁用 git 用户的 shell 登录权限,只能使用 git 命令,这个可以通过编辑 /etc/passwd 文件完成。找到最后一行:(如果 git 用户不是最后新建的则找到 git 所在行)

git:x:10xx:10xx::/home/git:/bin/bash

改为: ( /usr/bin/git-shell 为你的 git-shell 所在的位置,珂以通过 which git-shell 查看)

git:x:10xx:10xx::/home/git:/usr/bin/git-shell

这样,git 用户就只能使用 git 命令,但是一登录就会自动退出,就像下面这样:

fatal: Interactive git shell is not enabled.
hint: ~/git-shell-commands should exist and have read and execute access.
Connection to server_ip closed.

仓库配置(新建仓库参考)

执行以下操作以创建仓库:(按照惯例,仓库文件夹都以 .git 结尾,仓库所在的各层级文件夹最好都拥有git用户读写权限,因为在 root 用户文件夹下新建了一个仓库一直没权限)

cd git_dir # 移动到git仓库所在文件夹
mkdir xxx & cd xxx # 欲新建文件夹,则新建并进入
git init --bare blog.git # 创建一个名为blog.git的裸的仓库文件夹

然后,把 owner 改为 git

然后利用 post-receive 实现自动化部署:

cd blog.git/hooks
vi post-receive

输入以下内容:

#!/bin/sh
git --work-tree=部署文件夹 --git-dir=git仓库文件夹 checkout -f

然后配置权限(可执行权限和 git 用户的读写权限):

chmod +x post-receive 
chown -R git:git /home/git/repos/blog.git 

设置交换分区(虚拟内存)

在 Azure 白嫖的 Linux 服务器只有 1 核 1G,而且默认是不会有交换分区的,在不装宝塔(宝塔会新建 1G 的 /www/swap 交换分区文件)的情况下,重装某软件或流量过大都可能会导致内存不足,轻则难以为继、重则直接宕机(比如测着测着速就失联了),此时便需要设置交换分区。

设置步骤

  1. 检查当前的 swap 与存储空间

    swapon -s    # 查看当前 swap 的使用情况,如果没有返回信息则表示 swap 文件不存在
    df -h        # 检查文件系统剩余空间
  2. 创建 swap 文件并激活 swap 文件

    创建的 swap 文件为:/etc/swapfile,当然也可以不放在 /etc 目录,也可以叫其他名字。

    dd if=/dev/zero of=/etc/swapfile bs=1024 count=2048k # 创建大小为 2G 的 swap 文件,可以动态调整 2048k 的值来调整大小,可能需要等待一段时间
    mkswap -f /etc/swapfile # CentOS 系统不需要执行此命令,Ubuntu 需要

    然后修改 swap 文件的权限:

    chown root:root /tmp/swapfile
    chmod 600 /tmp/swapfile

    之后激活 swap 文件就可以啦

    swapon /etc/swapfile # 激活 swap
    swapon -s # 查看最新的 swap 使用情况,这个是用应该就有刚刚激活的 swap 了
  3. 重启自动挂载 swap

    用 vim 打开 /etc/fstab 文件,在最后添加一行:

    /path/to/swapfile    swap    swap    defaults    0 0

    即可完成设置。

参考:虚拟内存设置(解决linux内存不够情况) - 玩过熊 - 博客园 (cnblogs.com)

vi 编辑模式下无法删除字符(或编辑模式下按上下左右键会输入乱码)

编辑 /etc/vim/vimrc.tiny 文件,把

set compatible

改掉,并增加一行:

set nocompatible
set backspace=2

保存即可。

参考:debian/ubuntu系统vi无法删除字符的解决办法 - 牧之丨 - 博客园 (cnblogs.com)