Linux服务器管理

  1. 基本操作
    1.1 常用命令(假设使用root账号操作. 可以自己装个VirtualBox, 下载centos8的镜像,然后本地虚拟机来练习.)

    命令 说明 示例
    ls 列出当前目录下文件列表 ls 只展示基本的文件和目录名称不包扩隐藏文件(以.开头的文件视为隐藏文件), ls -al 会展示当前目录下所有文件及目录的名称及细节信息. 有一个别名命令比较常用 ll就等于ls -l --color=auto, 如果要同时显示隐藏文件就 ll -a
    cd 切换目录 cd /var/切换到 /var/目录,cd ~切换到家目录(常用~表示当前用户的家目录). cd ..切换到上级目录
    pwd 展示当前所在路径 pwd某些时候不知道当前位于什么目录下, 或者想复制当前目录路径就用这个展示出来
    mkdir 创建一个目录 mkdir test 创建名为test的目录, mkdir -p /var/www/test 加上-p参数递归创建层级目录
    touch 创建一个文件 touch a.txt创建名为a.txt的空文件. 平时用的不多.
    cp 复制 cp a.txt b.txt 将a.txt 复制为b.txt cp -r /var/www /var/xxx -r参数用于递归复制整个目录
    mv 移动/剪切 mv b.txt a.txt 将b.txt 移动为a.txt, 通常用于改名, mv /var/www /root/将/var/www整个目录移动到/root/ 目录下
    rm 删除操作 rm a.txt 删除a.txt rm -rf /var/www -rf参数递归强制删除/var/www目录
    echo 类似编程语言的echo输出 echo abc 在屏幕上展示abc 三个字符, echo $PATH 输出环境变量PATH($符号开头的表示变量, 此PATH和windows下环境变量path意义相同) echo abc > c.txt 将abc这三个字符写入到c.txt文件中,注意这会覆盖原来文件中内容. echo def >> c.txt 将def三个字符追加写入c.txt中 ">>"符号表示追加写入,不会覆盖原来内容,只会在原来内容后接着写. 关于输入输出相关内容后面再具体说
    cat 输出文件类容 cat a.txt 将a.txt文件的内容都在屏幕上输出
    tail 输入文件末尾内容 tail -n 5 c.txt -n参数指定只展示最后几行内容 tail -f c.txt 持续输出c.txt文件末尾的内容, 通常用于持续查看日志文件最新的记录行. 注意可以按ctrl+c 来终止持续输出
    head 与tail相反, 只查看文件开头几行内容 head -n 2 c.txt 输出c.txt开头两行内容
    more 一点一点查看文件内容 more /var/log/boot.log 先输出一屏内容, 按回车就输出额外行,输出完毕后就自动退出, 也可以按 ctrl+c 提前退出
    grep 统计输出 grep -n File /var/log/boot.log 将boot.log文件中包含File字符的行都输出 -n参数会标上行号. grep -c File /var/log/boot.log 统计包含File字符的有多少行. 注意在分析日志的时候经常用到 cat, more, tail, grep等. 更多高级处理有兴趣可以参考sed awk
    lsblk 查看块设备, 分区, 挂载点 lsblk 输出驱动器和分区及挂载信息
    df 查看磁盘空间信息 df -h 查看不同分区磁盘用量. 如果分区被用完, ssh还能登录赶紧删东西
    du 如果分区满了要删东西得知道哪些个目录占用比较多, 用这个统计文件目录占用磁盘大小 du -hd1 /var 统计/var 目录下文件和目录占用空间大小, -h参数表示用人类友好方式展示,即自动把单位转换成K/M/G这样, -d参数表示统计深度多少层
    free 查看内存用量 free -h
    top 实时查看进程资源消耗 top 如果有内存或者cpu消耗过高的进程就需要注意了
    chown 改变文件/目录的所有者和群组 chown -R www:www /var/www -R参数表示递归改变/var/www 及其子目录的属组
    chmod 改变文件/目录的读写权限 chmod -R a-x /var/www -R 参数表示递归的意思, a-x表示拿掉所有人对/var/www目录的执行权限. 关于权限问题后面再详细讨论
    useradd 添加用户 useradd www 添加一个名为www的普通用户. 关于用户/账号的问题后面再详细讨论
    passwd 修改密码 passwd 修改当前用户密码. passwd www 修改www用户的密码. 注意root用户可以修改其他账号密码, 普通用户只能修改自己密码
    id 查看账号的用户和组信息 id 查看当前用户组. id www查看www用户的用户和组信息
    groups 查看账号有哪些组 groups查看当前用户的组, groups www查看www用户拥有哪些组
    usermod 修改账号信息,比如uid,基本组,附加组,账户过期时间,家目录,登录shell,锁定解锁等 usermod -a -G wheel www 将www额外追加到wheel组中
    su 切换账号 su - 或者 su root切换到root账号, 他们之间有些微区别可以百度, 建议用 su - 来切换到root. su www 切换到www账号. 从root账号切到其他账号不需要密码, 其他用户切换的时候需要验证密码
    sudo 以root身份执行命令 sudo ls -al 以root身份查看当前目录文件列表
    wget 下载 wget https://www.php.net/distributions/php-8.2.7.tar.gz 下载php源码
    curl 模拟浏览器访问 curl -v http://www.baidu.com将百度首页html代码输出到屏幕, -v参数会额外展示http报头信息. curl https://www.php.net/distributions/php-8.2.7.tar.gz -O php-8.2.7.tar.gz加-O参数会将输出写入到对应的文件中, 效果就是下载文件
    tar 打包/解包工具 tar -zcvf test.tar.gz /var/test 将/var/test 目录打包并压缩. tar -xvf test.tar.gz 将test.tar.gz 解压缩出来.

    1.2. 基本概念
    a) 账号
    系统中有三类账号 root是超级账号, 拥有最大权限, 操作基本不受任何限制. 普通账号是由root或者其他具有管理员权限账号创建的账号,权限会受到限制. 系统账号是安装操作系统或部分程序时自动创建的低权限账号,这些账号不允许登录,通常只用于维持某个程序的正常运行,比如通过yum安装mysql,会创建mysql用户,只用于mysql服务的运行,不能干别的事. cat /etc/passwd 可以查看系统中所有账号信息, 第一列时账号名, 第二列由于历史原因都用x表示密码占位符(密码信息被保存在/etc/shadow中, 可以用cat查看), 第三列为uid, 第四列为基本组的gid,第五列为用户全名, 第六列为用户家目录, 第七列为登录后使用的shell.如果为/bin/bash 就是常规的用户, 如果为/sbin/nologin 之类就是系统账户. root用户的家目录默认是/root/, 常规账户家目录为 /home/用户名.
    b) 组
    账号创建时会自动创建账号的一个基本组. 另外还能给一个账号添加到多个组里面称为附加组, 或者一个组添加多个账号. 这样方便同一个组的人来共同管理一些资料. cat /etc/group可以查看系统中有哪些组usermod -a -G 组名 用户名 可以将对应用户账号追加到特定组中
    c) sudo
    出于安全考虑大部分时候我们用普通账号来处理一般事务, 需要的时候才用 su -切换到root用户. 从普通用户切换到root用户需要输入root的密码(从root切换到其他账户不需要密码),如果多个用户都有切root的需求,root密码就不好管理, 泄露风险也大. 因此考虑让部分账户可以通过sudo以root身份来执行命令.查看/etc/sudoers 文件可以发现 wheel组的用户可以从任何地方以root身份执行任何命令. 故此usermod -a -G wheel 用户名将对应用户添加到wheel组,此用户就能用sudo执行root的命令了. 此时只需要验证此用户的密码就好, 如果没有密码就passwd命令设置个密码.注意,有时候医院并不会给我们root密码,给的就是具有wheel组的普通用户账号.
    d) 文件权限
    一个文件可以被特定的用户或者组做读/写/执行等操作. ls -al输出第一列共十位表示了各文件的基本操作权限. 例如drwxrwxrwx, 第一位表示文件类型(一切皆文件,目录视为特殊文件d为目录, c为字符设备, b为块设备, -为普通文件), 第2-4位标识所有者是否有读/写/执行的权限, 第5-7位表示同组人是否具有读/写/执行权限, 第8-10位表示其他人是否具有读/写/执行权限. 为了方便表示有时候也用三位二进制来表示读写属性. 100是读,010是写,001是执行, 按位与就能用一个数字表示具有的权限. chmod 600 a.txt 就表示修改a.txt权限为所有者具有读写权限,组和其他人无权限. chmod a+x a.sh 也可以用这种形式给所有人加上a.sh的执行权限. 文件还有些隐藏属性通过lsattr 可以查看, chattr +i a.txt 这样可以将文件设置为只读, 就算是root也不能对此文件编辑/移动/删除. 这样的操作比较少,有兴趣的话可以百度.
    1.3. 注意事项
    a) 尽量只用普通用户做日常操作,比如更新代码,查看程序日志等.
    b) 不要用chmod -R 777 ./ 来递归添加所有权限, 这样文件的读写权限就失去意义了.
    c) 对于目录需要具有执行权限才能cd进去, 有读权限才能查看其下具体的子文件信息, 有写权限才能在其中创建文件和子目录.
    d) 如果按下了ctrl+s 是暂停屏幕输出的意思, 此时会发现按什么都没反应了. 只需要按ctrl+q 继续屏幕输出就好.

  2. 软件安装与配置
    软件安装有两种方式: 一是通过yum仓库直接安装仓库中已经编译好的二进制文件,类似从应用商城安装应用的意思, 会自动处理各种依赖,适合简单稳定, 对版本要求不高,也没有自己特殊要求的场景. 另一种是自己下载源代码然后编译再安装, 相对复杂, 需要自己处理各种依赖, 适合自己把控版本以及各种细节. 注意yum将要被dnf取代, 二者参数用法一致, 比如yum install vimdnf install vim是一样的效果, 后面如果看到混用yum 和dnf不要迷惑.

    1. yum安装
      1.1 仓库镜像源配置
      ls -al /etc/yum.repos.d/ 列出当前仓库用到了哪些源. cat /etc/yum.repos.d/CentOS-Stream-BaseOS.repo 查看基础源默认使用的centos官方仓库地址. 通常需要切换为国内的镜像地址,比如阿里云的.centos7及以前的版本只需要切换BaseOS的就好, 8以后需要切换BaseOS和AppStream两个源.

      cd /etc/yum.repos.d/
      mv CentOS-Stream-BaseOS.repo CentOS-Stream-BaseOS.repo.bk
      mv CentOS-Stream-AppStream.repo CentOS-Stream-AppStream.repo.bk
      vim aliyun.repo
      //输入以下内容并保存
      [BaseOS]
      name=baseos
      baseurl=https://mirrors.aliyun.com/centos/8/BaseOS/x86_64/os/
      gpgcheck=0
      enabled=1
      
      [AppStream]
      name=appstream
      baseurl=https://mirrors.aliyun.com/centos/8/AppStream/x86_64/os/
      gpgcheck=0
      enabled=1
      
      //退出vim后更新仓库缓存
      dnf clean all
      dnf makecache
      

      1.2 本地仓库镜像源配置
      如果服务器完全处于内网状态,没法上网, 也没法和外部服务器通信.要通过仓库来安装软件就可以考虑本地仓库源. centos完整版的dvd镜像文件(比如CentOS-Stream-8-20230612.0-x86_64-dvd1.iso)就包含官方仓库中各种软件.通常我们使用的都是虚拟机, 可以让虚拟机管理员把镜像文件载入到虚拟的光驱中,我们挂载进来使用, 也可以让管理员直接把iso文件上传到服务器磁盘上我们通过回环设备挂载.
      假设已经通过虚拟光盘加载了centos的dvd镜像文件. 下面的操作将镜像文件挂载到/mnt/centos/下.

      cd /mnt
      mkdir centos
      mount /dev/cdrom /mnt/centos
      ls centos
      

      假设已经将光盘镜像上传到/usr/local/src/ 目录下. 下面操作将dvd镜像挂载到/mnt/centos/ 下

      cd /mnt
      mkdir centos
      mount -o loop /usr/local/src/CentOS-Stream-8-20230612.0-x86_64-dvd1.iso centos
      ls centos
      

      不管上面哪种方式挂载好dvd镜像后就可以像常规目录一样操作(默认是只读挂载, 取消挂载是umount /mnt/centos). 然后我们编辑yum的仓库配置

      cd /etc/yum.repos.d/
      mv CentOS-Stream-AppStream.repo CentOS-Stream-AppStream.repo.bk
      mv CentOS-Stream-BaseOS.repo CentOS-Stream-BaseOS.repo.bk
      vim Local.repo
      //写入如下配置
      [Local-Base]
      name=local-base
      baseurl=file:///mnt/centos/BaseOS
      gpgcheck=0
      enable=1
      
      [Local-Stream]
      name=local-stream
      baseurl=file:///mnt/centos/AppStream
      gpgcheck=0
      enable=1
      
      //重建缓存
      dnf clean all
      dnf makecache
      dnf install bzip2 //测试安装软件
      

      1.3 mysql安装
      centos8-stream 仓库中默认带的是mysql8的, 可以直通过仓库安装. 安装完成后systemctl 来管理对应的服务

              dnf install mysql-server //安装mysql
              systemctl start mysqld  //启动mysql
              systemctl enable mysqld //设为自启动
              systemctl status mysqld //查看mysql服务状态
              cat /var/log/mysql/mysqld.log | grep pass //查看生成的临时密码
              mysql -uroot -p //登录mysql
              mysql>  alter user root@localhost identified by 'new_password';// 修改密码
              mysql> flush privileges; //
              mysql> exit
      
    2. 编译安装
      a) 下载及解包
      可以使用wget 或者curl 来从网上下载文件. 也可以在本地电脑下载好后上传到服务器上去. 通常我们下载的都是tar包. 使用tar 来解包就好. 假设下载php的源码

      dnf install wget //先安装下载软件. 已安装就略过.
      cd /usr/local/src/
      wget https://www.php.net/distributions/php-8.2.7.tar.xz
      tar -cvf php-8.2.7.tar.xz  //解包. 不想展示太多信息可以省略v参数.
      

      b) php的编译安装及配置示例
      一般都是通过make工具调用gcc来编译安装, make需要一个makefile, 手工写一个makefile 比较麻烦, 通常都会通过configure 来生成makefile文件. 假设已经按之前的示例下载并解包了php8的源码.

      dnf config-manager --enable powertools //启用额外仓库
      //先安装必要的依赖库
      dnf install -y make
      dnf install -y libxml2-devel openssl-devel sqlite-devel bzip2-devel libcurl-devel libpng-devel libwebp-devel libjpeg-devel libXpm-devel freetype-devel oniguruma-devel libpq-devel libxslt-devel libzip-devel
      cd php-8.2.7
      ll //可以看到有一个名为configure的可执行程序. 
      ./configure --help //展示所有的配置项目. 不同php版本配置项目可能不同,稍微看看心中有谱.
      ./configure  --prefix=/usr/local/php82  --with-pdo-pgsql --with-zlib-dir --with-freetype --enable-mbstring  --enable-soap --enable-calendar --with-curl  --enable-gd --with-webp --with-jpeg --with-xpm --with-pgsql --disable-rpath   --with-bz2 --with-zlib --enable-sockets --enable-sysvsem --enable-sysvshm --enable-pcntl --enable-mbregex --enable-exif --enable-bcmath --with-mhash --with-zip --with-pcre-jit --enable-mysqlnd --with-pdo-mysql --with-mysqli  --with-openssl --with-fpm-user=www --with-fpm-group=www --enable-ftp --with-gettext --with-xsl --enable-opcache --enable-fpm --with-fpm-acl --with-iconv --with-pear --with-fpm-selinux 
      make && make install
      ln -s /usr/local/php82/bin/php /usr/bin/php //做一个软连接, 可以直接执行php
      mv php.ini-production /usr/local/php82/lib/php.ini //php配置文件
      cd /usr/local/php82/etc
      mv php-fpm.conf.default php-fpm.conf
      mv php-fpm.d/www.conf.default php-fpm.d/www.conf
      vim php-fpm.conf  
      //修改 pid = /var/run/php-fpm.pid
      vim php-fpm.d/www.conf 
      //php-fpm的各种配置按照默认就好, 主要就是动态进程数量可能影响性能.
      //打开 listen.allowed_clients = 127.0.0.1  出于安全考虑只允许本机连接
      //pm.max_children = 5 根据内存大小修改最大子进程数量. 大概估计下,比如8G内存, 如果跑的服务比较多,nginx mysql php 都在一个机器上, 就按四分之一2G内存算, 一个进程给40M, 大概支持50个进程.
      //slowlog = var/log/$pool.log.slow 设置慢查询日志. 
      
      vim /usr/lib/systemd/system/php-fpm.service
      systemctl start php-fpm //启动php-fpm
      systemctl enable php-fpm //设置为随开机启动
      systemctl status php-fpm //查看服务状态
      

      php-fpm 启动脚本php-fpm.service

      [Unit]
      Description=php-fpm
      After=syslog.target network.target
      
      [Service]
      Type=forking
      PIDFile=/var/run/php-fpm.pid
      ExecStart=/usr/local/php82/sbin/php-fpm
      ExecReload=/bin/kill -USR2 $MAINPID
      ExecStop=/bin/kill -INT $MAINPID
      PrivateTmp=true
      
      [Install]
      WantedBy=multi-user.target
      
      

      php扩展ssh2 redis安装. 可以通过pecl安装, 也可以手动安装, 效果是一样的. 这里通过pecl安装

      dnf install epel-release        
      dnf install autoconf
      dnf install libssh2-devel
      dnf install libzstd-devel
      cd /usr/local/php82/bin/
      ./pecl install igbinary
      ./pecl install ssh2
      ./pecl install redis
      vim /usr/local/php82/lib/php.ini 
      //在适当位置加入 extension=ssh2  extension=redis extension=igbinary
      systemctl restart php-fpm 
      php -m //查看是否已经有redis 和 ssh的扩展了.
      

      c) nginx的编译安装及配置示例

      //nginx 编译安装和php差不多的流程. 下载源码, 配置编译选项, 编译和安装, 配置启动脚本. 
      dnf install gd-devel //依赖库
      cd /usr/local/src
      wget http://nginx.org/download/nginx-1.24.0.tar.gz
      tar -zxf nginx-1.24.0.tar.gz
      cd nginx-1.24.0
      ./configure --prefix=/usr/local/nginx --user=www --group=www --with-threads --with-file-aio --with-http_ssl_module --with-http_v2_module --with-http_realip_module --with-http_addition_module --with-http_xslt_module --with-http_image_filter_module --with-http_sub_module --with-http_flv_module --with-http_mp4_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_auth_request_module --with-http_secure_link_module --with-http_degradation_module --with-http_slice_module --with-stream --with-stream_ssl_module --with-stream_realip_module --with-stream_ssl_preread_module
      make
      make install
      vim /usr/lib/systemd/system/nginx.service
      systemctl start nginx
      systemctl enable nginx
      systemctl status nginx
      
      

      nginx启动脚本

      [Unit]
      Description=nginx - high performance web server
      Documentation=http://nginx.org/en/docs/
      After=network-online.target remote-fs.target nss-lookup.target
      Wants=network-online.target
      
      [Service]
      Type=forking
      ExecStart=/usr/local/nginx/sbin/nginx
      ExecReload=/bin/kill -s HUP $MAINPID
      ExecStop=/bin/kill -s TERM $MAINPID
      
      [Install]
      WantedBy=multi-user.target
      
  3. 安全相关

    1. firewalld

    2. selinux

  4. 网络相关

  5. 其他

    1. vpn

    2. https证书

    3. systemctl

    4. 环境

    5. vim

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容