首页 > 系统相关 >Linux入门到精通

Linux入门到精通

时间:2022-12-19 11:00:17浏览次数:78  
标签:精通 入门 etc local nginx usr conf Linux root

时间同步

chrony

1、ntp服务器搭建

yum -y install chrony
vi /etc/chrony.conf 
....
#server用户客户端指向,上层NTP服务器
server 0.centos.pool.ntp.org iburst
server 1.centos.pool.ntp.org iburst
server 2.centos.pool.ntp.org iburst
server 3.centos.pool.ntp.org iburst
....
#允许那个IP或网络访问NTP
allow 192.168.0.0/16
#拒绝那个IP或网络访问NTP
deny 192.169.0.0/16
#设置NTP服务器的层数量
local stratum 10
....

2、启动

systemctl restart chronyd
systemctl enable chronyd

3、客户端

yum -y install chrony
vi /etc/chrony.conf
server 192.168.110.237 iburst

systemctl restart chronyd
systemctl enable chronyd

ntpdate

1、安装工具

yum -y install ntp ntpdate

2、同步网络时间

ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
echo 'Asia/Shanghai' >/etc/timezone
ntpdate time2.aliyun.com
# 加入到crontab
*/5 * * * * /usr/sbin/ntpdate time2.aliyun.com

国内好用时间服务器

cn.ntp.org.cn #中国
edu.ntp.org.cn #中国教育网
ntp1.aliyun.com #阿里云
ntp2.aliyun.com #阿里云
cn.pool.ntp.org #最常用的国内NTP服务器

磁盘分区

分区方式

  • fdisk
    分区大小范围1-2T
  • parted
    不限制

fdisk

fdisk分区工具用来建立msdos分区方案,其交互模式中的主要指令如下:

  • m:列出指令帮助
  • p:查看当前的分区表信息
  • n:新建分区
  • d:删除分区
  • t:更改分区标识
  • q:放弃分区更改并退出
  • w:保存对分区表所做的更改
    命令:
fdisk /dev/sdb

parted

交互

[root@localhost ~]# parted /dev/sdb # 使用parted来对GPT磁盘操作,进入交互式模式
GNU Parted 1.8.1 Using /dev/sdb Welcome to GNU Parted! Type ‘help’ to view a list of commands.
(parted) mklabel gpt           # 将MBR磁盘格式化为GPT
(parted) print                       #打印当前分区
(parted) mkpart primary 0 4.5TB                # 分一个4.5T的主分区
(parted) mkpart primary 4.5TB 12TB      # 分一个7.5T的主分区
(parted) print                         #打印当前分区
(parted) quit 退出
Information: Don’t forget to update /etc/fstab, if necessary.
 1

非交互

parted /dev/sdb mklabel gpt (新硬盘sdb 使用mklabel改变磁盘为gpt)
parted /dev/sdb mkpart primary 0 2048000  (分区2T,起始0开始到结束大小m)
parted /dev/sdb mkpart primary 2048001 4096000 
parted /dev/sdb p (查看)

格式化

#格式化已经分好的区
mkfs.ext4 /dev/sdb1
mkfs.xfs /dev/sdb1
#挂载
mount  /dev/sdb1 /mnt

逻辑卷LVM

搭建本地yum源

提示:
镜像地址:https://renwole.com/linux-mirror-download/download-centos-linux-iso-images
1、http搭建方式

yum -y install httpd
mkdir /var/www/html/centos7
mount /data/iso/CentOS-7-x86_64-Everything-1810.iso /var/www/html/centos7
systemctl restart httpd
systemctl enable httpd

2、ftp搭建方式

yum -y install vsftpd
mkdir /var/ftp/centos7
mount /data/iso/CentOS-7-x86_64-Everything-1810.iso /var/www/html/centos7
systemctl restart vsftpd
systemctl enable vsftpd

3、客户端配置

vi /etc/yum.repos.d/Local_CenOS7.6.repo
[centos7]
name=centos7.6
baseurl=http://172.16.37.34/centos7
#baseurl=ftp://172.16.37.34/centos7
#baseurl=file:///mnt
gpgcheck=0
enable=1

网络配置

制作RPM包

安装rpm-build软件

1、安装rpm-build软件包

[root@web1 ~]# yum -y install  rpm-build

2、生成rpmbuild目录结构

[root@web1 ~]# rpmbuild -ba nginx.spec                //会报错,没有文件或目录
[root@web1 ~]# ls /root/rpmbuild                    //自动生成的目录结构
BUILD  BUILDROOT  RPMS  SOURCES  SPECS  SRPMS

3、准备工作,将源码软件复制到SOURCES目录

[root@web1 ~]# cp nginx-1.12.2.tar.gz /root/rpmbuild/SOURCES/

4、创建并修改SPEC配置文件

[root@web1 ~]# vim /root/rpmbuild/SPECS/nginx.spec 
Name:nginx        
Version:1.12.2
Release:    10
Summary: Nginx is a web server software.    
License:GPL    
URL:    www.test.com    
Source0:nginx-1.12.2.tar.gz
#BuildRequires:    
#Requires:    
%description
nginx [engine x] is an HTTP and reverse proxy server.
%post
useradd nginx                       //非必需操作:安装后脚本(创建账户)
%prep
%setup –q                            //自动解压源码包,并cd进入目录
%build
./configure
make %{?_smp_mflags}
%install
make install DESTDIR=%{buildroot}
%files
%doc
/usr/local/nginx/*            //对哪些文件与目录打包
%changelog

使用配置文件创建RPM包

1、安装依赖软件包

[root@web1 ~]# yum -y install  gcc  pcre-devel openssl-devel

2、rpmbuild创建RPM软件包

[root@web1 ~]# rpmbuild -ba /root/rpmbuild/SPECS/nginx.spec
[root@web1 ~]# ls /root/rpmbuild/RPMS/x86_64/nginx-1.12.2-10.x86_64.rpm
[root@web1 ~]# rpm -qpi RPMS/x86_64/nginx-1.12.2-10.x86_64.rpm 
Name        : nginx        Relocations: (not relocatable)
Version     : 1.12.2        Vendor: (none)
Release     : 10            Build Date: Mon 02 May 2016 02:30:53 AM PDT
Install Date: (not installed)            Build Host: localhost
Group       : Applications/Internet        Source RPM: nginx-1.8.0-1.src.rpm
Size        : 721243                    License: GPL
Signature   : (none)
URL         : www.nginx.org
Summary     : Nginx is a web server software.
Description :
nginx [engine x] is an HTTP and reverse proxy server.
[root@web1 ~]# rpm -qpl nginx-1.12.2-10.x86_64.rpm 
/usr
/usr/local
/usr/local/nginx
/usr/local/nginx/conf
/usr/local/nginx/conf/fastcgi.conf
/usr/local/nginx/conf/fastcgi.conf.default
/usr/local/nginx/conf/fastcgi_params
/usr/local/nginx/conf/fastcgi_params.default
/usr/local/nginx/conf/koi-utf
/usr/local/nginx/conf/koi-win
/usr/local/nginx/conf/mime.types
/usr/local/nginx/conf/mime.types.default
/usr/local/nginx/conf/nginx.conf
/usr/local/nginx/conf/nginx.conf.default
/usr/local/nginx/conf/scgi_params
/usr/local/nginx/conf/scgi_params.default
/usr/local/nginx/conf/uwsgi_params
/usr/local/nginx/conf/uwsgi_params.default
/usr/local/nginx/conf/win-utf
/usr/local/nginx/html
/usr/local/nginx/html/50x.html
/usr/local/nginx/html/index.html
/usr/local/nginx/logs
/usr/local/nginx/sbin
/usr/local/nginx/sbin/nginx

安装、卸载软件

[root@web1 ~]# rpm -ivh RPMS/x86_64/nginx-1.12.2-10.x86_64.rpm 
[root@web1 ~]# rpm -qa |grep nginx
[root@web1 ~]# /usr/local/nginx/sbin/nginx
[root@web1 ~]# curl http://127.0.0.1/

防火墙

iptables

firewalld

cron计划任务

vi  /etc/crontab 
分  时  日  月  周      任务命令行(绝对路径)

在表示各段的时间点时,除了明确的数值以外,还可以参考以下形式:

*:匹配范围内任意时间
,:分隔多个不连续的时间点
-:指定连续时间范围
/n:指定时间频率,每n ...

命令:

crontab  -e  -u  jluo
systemctl  restart  crond
systemctl  enable  crond

例如:
每一小时执行一次脚本

* */1 * * * /data/app/script/autodellogs.sh

基本安全加固

账号安全

1、修改用户zhangsan的账户属性,设置为2019-12-31日失效(禁止登录)

chage命令的语法格式:
chage –l    账户名称                                //查看账户信息
chage –E 时间 账户名称                            //修改账户有效期

失效的用户将无法登录
使用chage命令将用户zhangsan的账户设为当前已失效(比如已经过去的某个时间):

[root@proxy ~]# useradd zhangsan
[root@proxy ~]# chage -E 2015-05-15 zhangsan

2、定义默认有效期
/etc/login.defs这个配置文件,决定了账户密码的默认有效期。

[root@proxy ~]# cat /etc/login.defs
PASS_MAX_DAYS    99999                        //密码最长有效期
PASS_MIN_DAYS    0                            //密码最短有效期
PASS_MIN_LEN    5                            //密码最短长度
PASS_WARN_AGE    7                            //密码过期前几天提示警告信息
UID_MIN                  1000                //UID最小值
UID_MAX                  60000                //UID最大值

3、锁定用户账号

1)使用passwd或usermod命令将用户zhangsan的账户锁定。


[root@proxy ~]# passwd -l zhangsan                       //锁定用户账号lock
锁定用户 zhangsan 的密码。
passwd: 操作成功
[root@proxy ~]# passwd -S zhangsan                      //查看状态status
zhangsan LK 2018-02-22 0 99999 7 -1 (密码已被锁定。)

2)验证用户zhangsan已无法登录,说明锁定生效

输入正确的用户名、密码,始终提示“Login incorrect”,无法登录。

3)解除对用户zhangsan的锁定

[root@proxy ~]# passwd -u zhangsan                       //解锁用户账号
解锁用户 zhangsan 的密码 。
passwd: 操作成功
[root@proxy ~]# passwd -S zhangsan                      //查看状态
zhangsan PS 2018-08-14 0 99999 7 -1 (密码已设置,使用 SHA512 加密。)

修改tty登录的提示信息,隐藏系统版本

1、设置显示登录信息
账户在登录Linux系统时,默认会显示登陆信息(包括操作系统内核信息)
/etc/issue、/etc/issue.net这个配置文件里保存的就是这些登陆信息,修改该文件防止内核信息泄露。


[root@proxy ~]# cat /etc/issue                              //确认原始文件
Red Hat Enterprise Linux Server release 6.5 (Santiago)
Kernel \r on an \m
[root@proxy ~]# cp /etc/issue /etc/issue.origin              //备份文件
[root@proxy ~]# vim /etc/issue                              //修改文件内容
Windows Server 2012 Enterprise R2
NT 6.2 Hybrid

2、测试版本伪装效果
退出已登录的tty终端,或者重启Linux系统,刷新后的终端提示信息会变成自定义的文本内容,如下所示。
image

磁盘安全

对于操作系统来说,文件系统也可以通过添加额外属性来提高性能与安全性。

[root@proxy ~]# cat /etc/fstab
/dev/vda1   /boot    xfs   defaults,noexec   0  0
/dev/vda3   /home    xfs   defaults,noatime  0  0
备注:
noexec属性可以让分区下的所有程序都不可执行,包括病毒与木马
noatime让分区下的所有文件都不再更新atime时间,atime时间为文件的访问时间

锁定文件/etc/resolv.conf、/etc/hosts

1、语法格式:

# chattr +i  文件名                    //锁定文件(无法修改、删除等)
# chattr -i  文件名                    //解锁文件
# chattr +a  文件名                    //锁定后文件仅可追加
# chattr -a  文件名                    //解锁文件
# lsattr 文件名                        //查看文件特殊属性

2、使用+i锁定文件,使用lsattr查看属性

[root@proxy ~]# chattr +i /etc/resolv.conf 
[root@proxy ~]# lsattr /etc/resolv.conf 
----i---------- /etc/resolv.conf

3、使用+a锁定文件(仅可追加),使用lsattr查看属性

[root@proxy ~]# chattr +a /etc/hosts
[root@proxy ~]# lsattr /etc/hosts
-----a---------- /etc/hosts

4、测试文件锁定效果

[root@proxy ~]# rm -rf /etc/resolv.conf
rm: 无法删除"/etc/resolv.conf": 不允许的操作
[root@proxy ~]# echo xyz > /etc/resolv.conf
-bash: resolv.conf: 权限不够
[root@proxy ~]# rm -rf  /etc/hosts                         //失败
[root@proxy ~]# echo "192.168.4.1  xyz" > /etc/hosts     //失败
[root@proxy ~]# echo "192.168.4.1  xyz" >> /etc/hosts    //成功

history历史命令

1、概述

  • 当执行命令后,系统默认会在内存记录执行过的命令
  • 当用户正常退出时,会将内存的命令历史存放对应历史文件中,默认是~/.bash_history
  • 登录shell时,会读取命令历史文件中记录下的命令加载到内存中
  • 登录进shell后新执行的命令只会记录在内存的缓存区中;这些命令会用户正常退出时“追加”至命令历史文件中
  • 利用命令历史。可以用它来重复执行命令,提高输入效率

2、命令:history

history [-c] [-d offset] [n]
history -anrw [filename]
history -ps arg [arg...]
-c: 清空命令历史
-d offset: 删除历史中指定的第offset个命令
n: 显示最近的n条历史
-a: 追加本次会话新执行的命令历史列表至历史文件
-r: 读历史文件附加到历史列表
-w: 保存历史列表到指定的历史文件
-n: 读历史文件中未读过的行到历史列表
-p: 展开历史参数成多行,但不存在历史列表中
-s: 展开历史参数成一行,附加在历史列表后

3、命令历史相关环境变量
环境变量可以 export 变量名="值" 形式存放在 /etc/profile 或 ~/.bash_profile

  • HISTSIZE:命令历史记录的条数
  • HISTFILE:指定历史文件,默认为~/.bash_history
  • HISTFILESIZE:命令历史文件记录历史的条数
  • HISTTIMEFORMAT="%F %T whoami" 显示时间和用户
  • HISTIGNORE="str1:str2*:…" 忽略str1命令,str2开头的历史
  • HISTCONTROL:控制命令历史的记录方式
    ignoredups 是默认值,可忽略重复的命令,连续且相同为“重复”
    ignorespace 忽略所有以空白开头的命令
    ignoreboth 相当于ignoredups, ignorespace的组合
    erasedups 删除重复命令

4、实战
配置

vi  /etc/profile
....
#命令历史记录的条数
HISTSIZE=500
#显示时间和用户
HISTTIMEFORMAT="%F %T `whoami`"
#忽略mysql*命令,user*开头的历史
HISTIGNORE="mysql*:user*"
export PATH USER LOGNAME MAIL HOSTNAME HISTSIZE HISTCONTROL HISTTIMEFORMA HISTIGNORE
....
source /etc/profile
#只允许增加,不允许删除
chattr +a .bash_history

测试

[root@mindoc ~]# history 
    4  2021-11-23 14:48:00 roothistory 
    5  2021-11-23 14:48:44 rootvim  /etc/profile
    6  2021-11-23 14:56:03 rootsource /etc/profile
    7  2021-11-23 14:56:38 roothistory 
[root@mindoc ~]# useradd test1
[root@mindoc ~]# history 
    4  2021-11-23 14:48:00 roothistory 
    5  2021-11-23 14:48:44 rootvim  /etc/profile
    6  2021-11-23 14:56:03 rootsource /etc/profile
    7  2021-11-23 14:56:38 roothistory 
    8  2021-11-23 14:58:01 rootmysql -uroot
    9  2021-11-23 14:58:04 roothistory 
[root@mindoc ~]# cat .bash_history 
#1637650074
> .bash_history 
#1637650076
history 
#1637650080
history 
#1637650124
vim  /etc/profile
#1637650563
source /etc/profile
#1637650598
history 
#1637650681
mysql -uroot
#1637650684
history

监控命令

vmstat

vmstat是Virtual Meomory Statistics(虚拟内存统计)的缩写,可对操作系统的虚拟内存、进程、CPU活动进行监控。它是对系统的整体情况进行统计,不足之处是无法对某个进程进行深入分析。vmstat工具提供了一种低开销的系统性能观察方式。因为vmstat本身就是低开销工具,在非常高负荷的服务器上,你需要查看并监控系统的健康情况,在控制窗口还是能够使用vmstat输出结果。
1、命令参数

  • -a:显示活跃和非活跃内存

  • -f:显示从系统启动至今的fork数量 。

  • -m:显示slabinfo

  • -n:只在开始时显示一次各字段名称。

  • -s:显示内存相关统计信息及多种系统活动数量。

  • delay:刷新时间间隔。如果不指定,只显示一条结果。

  • count:刷新次数。如果不指定刷新次数,但指定了刷新时间间隔,这时刷新次数为无穷。

  • -d:显示磁盘相关统计信息。

  • -p:显示指定磁盘分区统计信息

  • -S:使用指定单位显示。参数有 k 、K 、m 、M,分别代表1000、1024、1000000、1048576字节(byte)。默认单位为K(1024 bytes)

  • -V:显示vmstat版本信息。
    2、实战
    image
    说明:

procs:

  • r 列表示运行和等待cpu时间片的进程数,如果长期大于1,说明cpu不足,需要增加cpu。

  • b 列表示在等待资源的进程数,比如正在等待I/O、或者内存交换等。

  • memory:

  • swpd 切换到内存交换区的内存数量(k表示)。如果swpd的值不为0,或者比较大,比如超过了100m,只要si、so的值长期为0,系统性能还是正常

  • free 当前的空闲页面列表中内存数量(k表示)

  • buff 作为buffer cache的内存数量,一般对块设备的读写才需要缓冲。

  • cache: 作为page cache的内存数量,一般作为文件系统的cache,如果cache较大,说明用到cache的文件较多,如果此时IO中bi比较小,说明文件系统效率比较好。

swap:

  • si 由内存进入内存交换区数量

  • so由内存交换区进入内存数量。

IO:

  • bi 从块设备读入数据的总量(读磁盘)(每秒kb)

  • bo 块设备写入数据的总量(写磁盘)(每秒kb)

  • 这里我们设置的bi+bo参考值为1000,如果超过1000,而且wa值较大应该考虑均衡磁盘负载,可以结合iostat输出来分析。

  • system 显示采集间隔内发生的中断数:

  • in 列表示在某一时间间隔中观测到的每秒设备中断数。

  • cs列表示每秒产生的上下文切换次数,如当 cs 比磁盘 I/O 和网络信息包速率高得多,都应进行进一步调查。

cpu 表示cpu的使用状态:

  • us 列显示了用户方式下所花费 CPU 时间的百分比。us的值比较高时,说明用户进程消耗的cpu时间多,但是如果长期大于50%,需要考虑优化用户的程序。

  • sy 列显示了内核进程所花费的cpu时间的百分比。这里us + sy的参考值为80%,如果us+sy 大于 80%说明可能存在CPU不足。

  • id 列显示了cpu处在空闲状态的时间百分比

  • wa 列显示了IO等待所占用的CPU时间的百分比。这里wa的参考值为30%,如果wa超过30%,说明IO等待严重,这可能是磁盘大量随机访问造成的,也可能磁盘或者磁盘访问控制器的带宽瓶颈造成的(主要是块操作)。

iostat

FAQ

1、在使用Linux过程中找不到占据空间的大文件的解决方法

  • 背景

磁盘使用率爆满,但是未定位到目录在使用Linux过程中找不到占据空间的大文件的解决方法

 du -sh ./* --exclude="data"  --exclude="proc"
  • 定位

使用 lsof 找到删除的文件,可以发现已经占用 230g 左右(根据下方的字节单位换算的)

lsof -n |grep delete |grep -v data

image

  • 解决
    重启对应进程解决即可
systemctl restart mallard2-agent.service

标签:精通,入门,etc,local,nginx,usr,conf,Linux,root
From: https://www.cnblogs.com/jluo/p/16772520.html

相关文章

  • Linux Shell远程执行命令(命令行与脚本方式)
    shell远程执行:经常需要远程到其他节点上执行一些shell命令,如果分别ssh到每台主机上再去执行很麻烦,因此能有个集中管理的方式就好了。一下介绍两种shell命令远程执行的方......
  • 最小的 x86 Linux 模拟器:blink
    1.1最小的x86Linux模拟器:blink主语言:CNewblink是一款虚拟机可用来跑静态编译的x86-64Linux,它适用于不同的操作系统和硬件架构。它和qemu-x86_64实现类似功能,除......
  • GitHub Actions 入门教程
    一、GitHubAction简介......
  • 常用的 linux 命令
    这篇文章记录自己日常工作中用到的命令,作为自己的命令速查手册,将保持不断更新。alternatives切换一条命令的不同指向。一开始,服务器上安装了两个Java版本,如果想要从一......
  • 史上最小 x86 Linux 模拟器「GitHub 热点速览 v.22.50」
    本周GitHubTrending略显冷清,大概是国内的人们开始在养病,而国外的人们开始过圣诞、元旦双节。热度不减的ChatGPT依旧占据了本周大半的GitHub热点项目,不过本周的特推......
  • [常用工具] shell脚本快速入门笔记
    Shell是一个用C语言编写的程序,它是用户使用Linux的桥梁。Shell脚本(shellscript),是一种为shell编写的脚本程序。业界所说的shell通常都是指shell脚本,但要知道,sh......
  • [R语言] ggplot2入门笔记3—通用教程如何自定义ggplot2
    date:2020-03-2111:10:02+0800tags:-R语言-数据分析与可视化通用教程简介(IntroductionToggplot2)代码下载地址以前,我们看到了使用ggpl......
  • [编程基础] C++多线程入门4-数据共享和资源竞争
    date:2020-05-2916:51:33+0800tags:-编程基础原始C++标准仅支持单线程编程。新的C++标准(称为C++11或C++0x)于2011年发布。在C++11中,引入了新的线程库。因此运......
  • [编程基础] C++多线程入门1-创建线程的三种不同方式
    date:2020-05-2916:30:50+0800tags:-编程基础原始C++标准仅支持单线程编程。新的C++标准(称为C++11或C++0x)于2011年发布。在C++11中,引入了新的线程库。因此运行......
  • [图像处理] YUV图像处理入门2
    1分离YUV420中YUV分量本程序中的函数主要是将YUV420P视频数据流的第一帧图像中的Y、U、V三个分量分离开并保存成三个文件。函数的代码如下所示:/***@file 1yuv_split......