• [问题求助] 买了服务器连接不上去为什么?有没有大佬知道的
    为什么会显示认证失败密码是正确的
  • [容器类] acl.rt.set_device报507033错误
    """[EVENT] PROFILING(78,python):2024-03-11-02:22:20.914.096 [msprof_callback_impl.cpp:199] >>> (tid:78) Started to register profiling ctrl callback.[EVENT] PROFILING(78,python):2024-03-11-02:22:25.859.341 [msprof_callback_impl.cpp:78] >>> (tid:78) MsprofCtrlCallback called, type: 255[EVENT] PROFILING(78,python):2024-03-11-02:22:25.859.666 [prof_acl_mgr.cpp:1190] >>> (tid:78) Init profiling for dynamic profiling[ERROR] DRV(78,python):2024-03-11-02:22:34.958.504 [ascend][curpid: 78, 78][drv][tsdrv][drvDeviceOpen 360]open devdrv_device(0) failed, fd(-1), errno(14), error(Bad address).[ERROR] DRV(78,python):2024-03-11-02:22:34.958.716 [ascend][curpid: 78, 78][drv][tsdrv][share_log_read 569]invalid para, vdevid(0), devid(0), fid(0) invalid mode(1) or ctx is null.[ERROR] RUNTIME(78,python):2024-03-11-02:22:34.958.800 [npu_driver.cc:2012]78 DeviceOpen:[drv api] drvDeviceOpen failed: deviceId=0, drvRetCode=4![ERROR] RUNTIME(78,python):2024-03-11-02:22:34.958.809 [device.cc:227]78 Init:report error module_type=0, module_name=EE9999[ERROR] RUNTIME(78,python):2024-03-11-02:22:34.958.814 [device.cc:227]78 Init:Failed to open device, retCode=0x7020014, deviceId=0.[ERROR] RUNTIME(78,python):2024-03-11-02:22:34.958.833 [runtime.cc:2109]78 DeviceRetain:Failed to init device.[ERROR] RUNTIME(78,python):2024-03-11-02:22:35.725.754 [runtime.cc:2133]78 DeviceRetain:report error module_type=0, module_name=EE9999[ERROR] RUNTIME(78,python):2024-03-11-02:22:35.725.935 [runtime.cc:2133]78 DeviceRetain:Check param failed, dev can not be NULL![ERROR] RUNTIME(78,python):2024-03-11-02:22:35.725.988 [runtime.cc:1946]78 PrimaryContextRetain:report error module_type=0, module_name=EE9999[ERROR] RUNTIME(78,python):2024-03-11-02:22:35.725.992 [runtime.cc:1946]78 PrimaryContextRetain:Check param failed, dev can not be NULL![ERROR] RUNTIME(78,python):2024-03-11-02:22:35.726.001 [runtime.cc:1973]78 PrimaryContextRetain:report error module_type=0, module_name=EE9999[ERROR] RUNTIME(78,python):2024-03-11-02:22:35.726.005 [runtime.cc:1973]78 PrimaryContextRetain:Check param failed, ctx can not be NULL![ERROR] RUNTIME(78,python):2024-03-11-02:22:35.726.013 [api_impl.cc:1315]78 NewDevice:report error module_type=0, module_name=EE9999[ERROR] RUNTIME(78,python):2024-03-11-02:22:35.726.017 [api_impl.cc:1315]78 NewDevice:Check param failed, context can not be null.[ERROR] RUNTIME(78,python):2024-03-11-02:22:35.726.025 [api_impl.cc:1336]78 SetDevice:report error module_type=0, module_name=EE9999[ERROR] RUNTIME(78,python):2024-03-11-02:22:35.726.029 [api_impl.cc:1336]78 SetDevice:new device failed, retCode=0x7010006[ERROR] RUNTIME(78,python):2024-03-11-02:22:35.726.037 [logger.cc:615]78 SetDevice:Set device failed, device_id=0, deviceMode=0.[ERROR] RUNTIME(78,python):2024-03-11-02:22:35.726.067 [api_c.cc:1469]78 rtSetDevice:ErrCode=507033, desc=[device retain error], InnerCode=0x7010006[ERROR] RUNTIME(78,python):2024-03-11-02:22:35.726.071 [error_message_manage.cc:49]78 FuncErrorReason:report error module_type=3, module_name=EE8888[ERROR] RUNTIME(78,python):2024-03-11-02:22:35.726.079 [error_message_manage.cc:49]78 FuncErrorReason:rtSetDevice execute failed, reason=[device retain error][ERROR] ASCENDCL(78,python):2024-03-11-02:22:35.726.091 [device.cpp:66]78 aclrtSetDevice: open device 0 failed, runtime result = 507033.[EVENT] IDEDH(78,python):2024-03-11-02:22:39.586.549 [adx_server_manager.cpp:27][tid:78]>>> start to deconstruct adx server manager"""
  • [课程学习] LINUX学习随笔
    操作系统概述:操作系统就是计算机的灵魂通过操作系统来进行各种调度LINUX系统组成:内核:提供最核心的IO功能,实现各种调度系统级应用程序:出场自带程序,可以完成简单的上手 LINUX基础命令1.LINUX系统的目录结构/根目录,LINUX中唯一一个顶级目录,所有文件都在根目录下面/bin:包含可执行的二进制文件,基本命令行工具/sbin:存放的是系统管理员使用的系统管理工具和命令/boot:存放启动所需要的文件/dev:包含系统所有的硬件设备文件/etc:存储常见应用程序和系统服务需要的重要配置文件/home:默认的用户工作目录,每一个用户在home下面都会有一个以文件名命名的用户/lib:多个程序和库所依赖的共享文件/opt:是用于安装第三方应用程序,组件和依赖库,同时是一些大型文件安装包的默认位置/tmp:是一个存放临时文件和目录的地方,需要时常清空来释放磁盘空间/usr:usr目录下面也是有很多常见的目录,但是usr和根目录比起来的命令不是必须的- `/usr/bin`: 存放系统管理员和用户使用的二进制可执行文件;- `/usr/sbin`: 存放系统管理员使用的二进制可执行文件,需要 root 权限才能访问;- `/usr/lib`: 存放共享库文件,即许多程序共用的代码库;- `/usr/share`: 存放应用程序的资源文件、文档等共用数据文件;- `/usr/local`: 存放本地安装的软件及其相关的资源文件、文档等共用数据文件;/var:用于存储变化的文件数据,比如日志文件,邮件,临时文件等 ls命令:-a:ALL,包括隐藏文件夹-l:以列表来展示-h:以易读的方式,一定和-l一起使用+路径cd命令:切换工作路径pwd命令:显示当前的工作目录相对路径:从根目录开始作为起点绝对路径:从当前的目录作为七点,直接去下面的目录特殊路径符:Cd ..:回退上一级Cd ~:直接回到home目录mkdir命令:创建文件夹-p :表示创建多级目录+路径:相对,绝对都可以文件操作命令:touch命令来创建文件cat命令查看文件内容more命令支持翻页查看内容cp复制文件文件夹-r 复制文件夹时候使用+被复制的文件/夹 +复制去的地方/夹mv移动文件文件夹+被移动的文件/夹 +移动去的地方/夹若目标不存在则有改名的效果rm删除文件文件夹一次可以删除任意个-r:删除文件夹-f:强制删除可以使用*来做模糊匹配Test*:匹配任何以test开头的*test:匹配任何以test结尾的*test*:匹配任何含有test的查找相关命令:which:查找命令的程序文件放在哪里find:查找指定文件(文件名,大小find 起始路径 -name "文件名"同时也可以使用通配符来查找find 起始路径 -size +/-具体的大小(K/M/G)(+就是大于,-就是小于grep命令:可以文件中通过关键字过滤文件行-n 表示显示匹配结果的行号+“关键字”表示过滤的关键字+文件路径 /作为内容的输入端接口(在使用管道符的时候管道符 |(通常结合grep来实现过滤将左边输入的结果作为右边输入的内容eg:cat text.txt | grep 关键词管道符同时可以实现嵌套使用wc命令:统计文件的行数,单词数量,字节数等等-c:字节数-m:字符数-l:行数-w:单词数+文件路径echo+”输出的内容“(在命令行输出指定的内容,类似于print反引号符:echo ·命令·=运行echo里面的命令重定向符>/>>(只要是可以产生结果的都可以往右边的文件写>:将左侧的文件覆盖写入右侧指定的文件中>>:将左侧的文件追加写入右侧的文件中Eg:echo "内容" >> test.txttail命令:查看文件尾部的内容和持续追踪文件的更改-number( 查看尾部的行数,默认表示10行-f 表示持续跟踪文件的状态+文件路径Vi/vim编辑器(vim是vi的plus版本/:进入搜索模式n:光标向下搜索shift+G:跳到文件最后一行gg:跳到文件首行 用户和权限如何从普通用户切换到root用户Su root:切换到root用户Exit :退出到普通用户sudo:临时获得root身份的授权来实现命令的配置Visudo打开文件之后在尾部添加用户名 ALL=(ALL)     NOPASSWD:ALL保存退出此时该用户有写权限来实现配置查看权限控制通过ls-l显示的内容里面第一个表示文件,文件夹的权限信息Drwxr-xr-x第一段第一个d表示是文件夹/-表示文件r,w,x,r表示的是读权限(读文件内容w表示的是写权限(修改文件内容x表示的是执行权限(执行文件内容第一段其余表示所属用户的权限第二段表示所属用户组的权限第三段表示的是其他用户的权限 第二个表示文件,文件夹的属于的用户第三列表示文件,文件夹属于的用户组chmod修改权限信息-R:对文件夹里面所有文件都是同样的操作权限文件或者文件夹(权限分为三类:用户,用户组,其他,每一位三个字符,所以可以使用三个数字来表示chown修改文件文件夹的所属用户和用户组-R:对全部文件相同+用户:用户组(只有前面的时候只修改用户,只有后面时候只修改用户组+文件/文件夹 使用操作技巧ctrl+c:强制停止程序的运行ctrl+r:搜索之前配置过的命令history:显示历史输入过的命令linux系统安装软件Yum命令:RPM包软件管理器,用于自动化安装linux软件,并且可以自动解决依赖问题RPM包就是linux的安装包格式,就和windows中的.exe一样Install:安装Remove:卸载search:搜索systemctl命令:通过systemctl命令来实现服务的启动,开机自启,关闭,查看状态(内置服务和部分第三方服务Firewalld:防火墙服务Networkmanager:主网络服务Network:副网络服务Sshd:ssh服务软链接:类似于linux的快捷方式Ln -s 被链接的文件  链接的目的地时间:Date :之间显示日期,可以添加下面的字符串来修改%Y:年份%y:年份后面两位%m:月份%d:日%H:小时%M:分钟%S:秒时间自动校准ntp服务,联网自动校准时间yum下载使用systemctl来启动手动校准时间Ntpdate -u ntp.aliyun.comIP地址Ens33:centos的网卡Ifconfig:查看IP地址修改主机名:Hostnamectl set-hostname +名字网络请求:ping检测指定网络服务器是否联通wget:下载网络文件-b:在后台下载+url地址Curl:发送http请求,可以用于下载,获取信息-o:下载文件的时候使用+url,要发起的网络请求端口:nmap:查看端口占用需要先通过yum来下载nmapNmap+IP地址netstat:查看指定端口的占用情况通过yum来下载net-toolsNetstat -anp | grep 端口号显示所有和22相关的端口的情况进程管理:程序运行就会有一个进程Ps 查看进程:ps -ef | grep +服务-e:显示全部的进程-f:显示详细的信息+管道符过滤看到想看的进程的信息关闭进程:Kill-9:强制关闭+进程ID(PID监控主机状态top查看cpu,内存的占用情况第二行:进程第三行:cpu占用第四行:物理内存第五行:虚拟内存-p:只显示某个进程的信息-u:查找特定用户的进程-i:不显示闲置的命令 磁盘信息监控df -h,更加人性化的显示信息环境变量:记录的关键性信息辅助系统执行是一种键值结构如何取得环境变量的值?echo $+环境变量名字自行配置环境变量:Export 变量名=变量值(在/etc/profile文件最后面添加即可 上传下载:建议直接用wincp压缩解压linux常见的压缩格式Tar,Gzip(.tar/.gztar格式的压缩效果一般gz格式文件压缩效果好Tar 命令来实现压缩和被压缩压缩-cvf:压缩常用.tar格式-zcvf:压缩,但是.gz格式+文件,可以添加n个解压缩-xvf:解压tar包-zxvf:解压gz包+文件名-C +目的路径:将文件指定到目的路径zip命令压缩-r:在包含文件夹的时候使用+文件解压Unzip :解压到当前文件夹-d +目的路径:将文件指定到目的路径   
  • [课程学习] 简单认识Linux
    今天带大家简单认识一下Linux,它和我们日常用的Windows有什么不同呢?Linux介绍Linux内核&发行版Linux内核版本内核(kernel)是系统的心脏,是运行程序和管理像磁盘和打印机等硬件设备的核心程序,它提供了一个在裸设备与应用程序间的抽象层。Linux内核版本又分为稳定版和开发版,两种版本是相互关联,相互循环:稳定版:具有工业级强度,可以广泛地应用和部署。新的稳定版相对于较旧的只是修正一些bug或加入一些新的驱动程序。开发版:由于要试验各种解决方案,所以变化很快。内核源码网址:cid:link_0 所有来自全世界的对Linux源码的修改最终都会汇总到这个网站,由Linus领导的开源社区对其进行甄别和修改最终决定是否进入到Linux主线内核源码中。Linux发行版本Linux发行版 (也被叫做 GNU/Linux 发行版) 通常包含了包括桌面环境、办公套件、媒体播放器、数据库等应用软件。目前市面上较知名的发行版有:Ubuntu、RedHat、CentOS、Debian、Fedora、SuSE、OpenSUSE、Arch Linux、SolusOS 等。linux和windows区别Linux是一种开源操作系统,可以根据需要更改源代码,而Windows操作系统没有访问源代码的权限,因为它是商业操作系统。由于其出色的安全性,Linux可以更轻松地检测并修复错误,而Windows的大量用户群易受到黑客攻击。Windows运行缓慢,特别是在旧硬件上运行,而Linux运行速度显著更快。在Windows操作系统中,打印机、CD-ROM和硬盘被视为设备。Linux外围设备,包括打印机、CD-ROM和硬盘被视为文件。Windows使用数据驱动器(C:D:E:)和文件夹来存储文件。Linux使用以根目录为开头的树形结构来组织文件。在Linux中,同一目录中可以有两个名称相同的文件。在Windows中,用户不能在同一文件夹中使用完全相同的名称拥有两个文件。在Microsoft Windows中,程序和系统文件几乎总是存储在C:驱动器中,而Linux上的程序和系统文件可以在不同的目录中找到。Linux目录结构/:根目录,一般根目录下只存放目录,在Linux下有且只有一个根目录。所有的东西都是从这里开始。当你在终端里输入“/home”,你其实是在告诉电脑,先从/(根目录)开始,再进入到home目录。/bin: /usr/bin: 可执行二进制文件的目录,如常用的命令ls、tar、mv、cat等。/boot:放置linux系统启动时用到的一些文件,如Linux的内核文件:/boot/vmlinuz,系统引导管理器:/boot/grub。/dev:存放linux系统下的设备文件,访问该目录下某个文件,相当于访问某个设备,常用的是挂载光驱 mount /dev/cdrom /mnt。/etc:系统配置文件存放的目录,不建议在此目录下存放可执行文件,重要的配置文件有 /etc/inittab、/etc/fstab、/etc/init.d、/etc/X11、/etc/sysconfig、/etc/xinetd.d。/home:系统默认的用户家目录,新增用户账号时,用户的家目录都存放在此目录下,表示当前用户的家目录,edu 表示用户 edu 的家目录。/lib: /usr/lib: /usr/local/lib:系统使用的函数库的目录,程序在执行过程中,需要调用一些额外的参数时需要函数库的协助。/lost+fount:系统异常产生错误时,会将一些遗失的片段放置于此目录下。/mnt: /media:光盘默认挂载点,通常光盘挂载于 /mnt/cdrom 下,也不一定,可以选择任意位置进行挂载。/opt:给主机额外安装软件所摆放的目录。/proc:此目录的数据都在内存中,如系统核心,外部设备,网络状态,由于数据都存放于内存中,所以不占用磁盘空间,比较重要的目录有 /proc/cpuinfo、/proc/interrupts、/proc/dma、/proc/ioports、/proc/net/* 等。/root:系统管理员root的家目录。/sbin: /usr/sbin: /usr/local/sbin:放置系统管理员使用的可执行命令,如fdisk、shutdown、mount 等。与 /bin 不同的是,这几个目录是给系统管理员 root使用的命令,一般用户只能"查看"而不能设置和使用。/tmp:一般用户或正在执行的程序临时存放文件的目录,任何人都可以访问,重要数据不可放置在此目录下。/srv:服务启动之后需要访问的数据目录,如 www 服务需要访问的网页数据存放在 /srv/www 内。/usr:应用程序存放目录,/usr/bin 存放应用程序,/usr/share 存放共享数据,/usr/lib 存放不能直接运行的,却是许多程序运行所必需的一些函数库文件。/usr/local: 存放软件升级包。/usr/share/doc: 系统说明文件存放目录。/usr/share/man: 程序说明文件存放目录。/var:放置系统执行过程中经常变化的文件,如随时更改的日志文件 /var/log,/var/log/message:所有的登录文件存放目录,/var/spool/mail:邮件存放的目录,/var/run:程序或服务启动后,其PID存放在该目录下。Linux终端命令终端命令格式command [-options] [parameter]说明:command :命令名,相应功能的英文单词或单词的缩写[-options] :选项,可用来对命令进行控制,也可以省略parameter :传给命令的参数,可以是 零个、一个 或者 多个学习Linux终端命令的原因Linux 刚面世时并没有图形界面,所有的操作全靠命令完成,如磁盘操作、文件存取、目录操作、进程管理、文件权限 设定等在职场中,大量的 服务器维护工作 都是在 远程 通过 SSH 客户端 来完成的,并没有图形界面,所有的维护工作都需要通过命令来完成在职场中,作为后端程序员,必须要或多或少的掌握一些 Linux 常用的终端命令Linux 发行版本的命令大概有 200 多个,但是常用的命令只有 10 多个而已Shell●Linux系统中运行的一种特殊程序 ●在用户和内核之间充当“翻译官” ●用户登录Linux系统时,自动加载一个Shell程序 ●Bash是Linux系统中默认使用的Shell程序,Bash文件位于 /bin/bash 常用Linux命令的基本使用序号命令对应英文作用01lslist查看当前文件夹下的内容02pwdprint work directory查看当前所在文件夹03cd[目录名]changge directory切换文件夹04touch[文件名]touch如果文件不存在,新建文件05mkdir[目录名]make directory创建目录06rm[文件名]remove删除指定文件07clearclear清屏小技巧:ctrl + shift + = 放大终端窗口的字体显示ctrl + - 缩小终端窗口的字体显示自动补全在敲出 文件 / 目录 / 命令 的前几个字母之后,按下 tab 键如果输入的没有歧义,系统会自动补全如果还存在其他 文件 / 目录 / 命令 ,再按一下 tab 键,系统会提示可能存在的命令 小技巧按 上 / 下 光标键可以在曾经使用过的命令之间来回切换如果想要退出选择,并且不想执行当前选中的命令,可以按 ctrl + c具体命令的使用ls 常用选项参数含义-a显示指定目录下所有子目录与文件,包括隐藏文件-l以列表方式显示文件的详细信息-h配合 -l 以人性化的方式显示文件大小ls通配符的使用通配符含义*代表任意个数个字符?代表任意一个字符,至少 1 个[]表示可以匹配字符组中的任一一个[abc]匹配 a、b、c 中的任意一个[a-f]匹配从 a 到 f 范围内的的任意一个字符注意:以 . 开头的文件为隐藏文件,需要用 -a 参数才能显示切换目录cdcd 是英文单词 change directory 的简写,其功能为更改当前的工作目录,也是用户最常用的命令之一 注意:Linux 所有的 目录 和 文件名 都是大小写敏感的命令含义cd切换到当前用户的主目录(/home/用户目录)cd ~切换到当前用户的主目录(/home/用户目录)cd .保持在当前目录不变cd -可以在最近两次工作目录之间来回切换cd . .切换到上级目录相对路径和绝对路径相对路径 在输入路径时,最前面不是 / 或者 ~,表示相对 当前目录 所在的目录位置 绝对路径 在输入路径时,最前面是 / 或者 ~,表示从 根目录/家目录 开始的具体目录位置创建和删除操作touch创建文件或修改文件时间 如果文件 不存在,可以创建一个空白文件 如果文件 已经存在,可以修改文件的末次修改日期mkdir创建一个新的目录选项含义-p可以递归创建目录新建目录的名称 不能与当前目录中 已有的目录或文件 同名rm删除文件或目录 使用 rm 命令要小心,因为文件删除后不能恢复选项含义-f强制删除,忽略不存在的文件,无需提示-r递归地删除目录下的内容,删除文件夹 时必须加此参数查看文件内容序 号命令对应英文作用01cat 文件名concatenate查看文件内容、创建文件、文件合并、追加文件内容等功能02more 文件名more分屏显示文件内容03grep 搜索文本 文件名grep搜索文本文件内容catcat 命令可以用来 查看文件内容、创建文件、文件合并、追加文件内容 等功能 cat 会一次显示所有的内容,适合 查看内容较少 的文本文件选项含义-b对非空输出行编号-n对输出的所有行编号Linux 中还有一个 nl 的命令和 cat -b 的效果等价moremore 命令可以用于分屏显示文件内容,每次只显示一页内容适合于 查看内容较多的文本文件使用 more 的操作键:操作键功能空格键显示手册页的下一屏Enter键 一次滚动手册页的一行b回滚一屏f前滚一屏q退出/word搜索 word 字符串grepLinux 系统中 grep 命令是一种强大的文本搜索工具 grep 允许对文本文件进行 模式查找,所谓模式查找,又被称为正则表达式。选项含义-n显示匹配行及行号-v显示不包含匹配文本的所有行(相当于求反)-i忽略大小写常用的两种模式查找参数含义^a行首,搜寻以 a 开头的行ke$行尾,搜寻以 ke 结束的行拷贝和移动文件序号命令对应英文作用01tree [目录名]tree以树状图列出文件目录结构02cp 源文件目标文件copy复制文件或者目录03mv 源文件 目标文件move移动文件或者目录/文件或者目录重命名treetree 命令可以以树状图列出文件目录结构选项含义-d只显示目录cpcp 命令的功能是将给出的 文件 或 目录 复制到另一个 文件 或 目录 中,相当DOS 下的 copy命令选 项含义-i覆盖文件前提示-r若给出的源文件是目录文件,则 cp 将递归复制该目录下的所有子目录和文件,目标文件必须为一个目录名mvmv 命令可以用来 移动 文件 或 目录,也可以给 文件或目录重命名选项含义-i覆盖文件前提示查找文件find 命令功能非常强大,通常用来在 特定的目录下 搜索 符合条件的文件序号命令作用01find [路径] -name “*.py”查找指定路径下扩展名是 .py 的文件,包括子目录如果省略路径,表示在当前文件夹下查找之前学习的通配符,在使用 find 命令时同时可用通配符表示一个任意字符——?表示0个或多个任意字符——*演练目标1.搜索桌面目录下,文件名包含 1 的文件find -name "*1*" 12.搜索桌面目录下,所有以 .txt 为扩展名的文件find -name "*.txt" 13.搜索桌面目录下,以数字 1 开头的文件find -name "1*" 1软链接序 号命令作用1ln -s 被链接的源文件 链接文件建立文件的软链接,用通俗的方式讲类似于 Windows 下的快捷方式注意:没有 -s 选项建立的是一个 硬链接文件两个文件占用相同大小的硬盘空间,工作中几乎不会建立文件的硬链接源文件要使用绝对路径,不能使用相对路径,这样可以方便移动链接文件后,仍然能够正常使用未完待续……
  • [课程学习] apache学习随笔
    使用apache服务来部署静态网站Apache特点:跨平台,安全性nginx特点:轻量级,高并发 apache的服务名称叫做httpd通过systemctl来实现对http的各种操作httpd服务各个配置文件存放的位置我们可以修改httpd.conf文件下面来实现对访问路径的修改/文件但是在修改之后我们发现界面为这里就是SElinux在起作用了,下面讲讲selinux SElinux安全子系统Security-enhanced LINUX:对资源的访问提供限制的保险,打个比方:防火墙是窗户,那么SELinux就是防护栏服务模式 作用enforcing强制启动安全模式,将拦截的服务不合法请求permissive对于不合法请求只发出警告不会强制拦截disabled对于越权的行为不警告也不拦截如何查看安全模式?/etc/selinux/config里面,修改后重启生效 回归上文,为什么会出现禁止访问呢?因为/home目录是存放用户数据的目录而不是httpd服务的目录,所以SELINUX会禁止访问这个目录下面的文件解决这个问题有几个方法1:关闭Selinux2:修改http.conf,然后将文件复制到原来的路径下面(笨蛋方法3:通过semanage命令来实现添加对访问权限的添加一般来说bash下面不一定有semanage这条命令,需要我们下载安装包yum  install policycoreutils-python之后可以使用semanage命令了semanage fcontext -a -t httpd_sys_content /home/wwwtestsemanage fcontext -a -t httpd_sys_content /home/wwwtest/*向网站数据下面加一条SELINUX上下文,使得目录和里面的数据可以被httpd服务访问到restorecon -Rv /home/wwwtest/对目录进行递归,最后可以访问得到页面内容4:还有可能是selinux域安全策略密钥放行,这里通过getsebool和查找来找到相关服务getsebool -a | grep httpd我们将安全策略修改就可以实现(这里设置的为个人博客,当然做不同的东西可能会碰到不同得到东西就是了,原理相同setsebool httpd_enable_homedirs=on 
  • [专题汇总] 快进来宝子们,二月份干货汇总来了。
     大家好,二月的合集又来了,本次涵盖了java,linux,spirng诸多内容供大家学习。 1.Vue中的$nextTick有什么作用?【转】 https://bbs.huaweicloud.com/forum/thread-02109144317537776031-1-1.html  2.基于Python的地图绘制教程【转】 https://bbs.huaweicloud.com/forum/thread-0240144319944756030-1-1.html  3.hcache 介绍(1)--Ehcache 功能特性 【转】 https://bbs.huaweicloud.com/forum/thread-0268144320319800023-1-1.html  4.Java 操作 XML(1)--DOM 方式处理 XML【转】 https://bbs.huaweicloud.com/forum/thread-02109144320463478034-1-1.html  5.Java操作XML(3)--StAX方式处理XML 【转】 https://bbs.huaweicloud.com/forum/thread-0240144320615655031-1-1.html  6.Java操作XML(4)--使用woodstox处理XML【转】 https://bbs.huaweicloud.com/forum/thread-0270144320690142025-1-1.html  7.Java操作XML(5)--使用JDOM处理XML【转】 https://bbs.huaweicloud.com/forum/thread-0240144320817429032-1-1.html  8.Java操作XML(6)--使用dom4j处理XML【转】 https://bbs.huaweicloud.com/forum/thread-02101144320893290020-1-1.html  9.基于原生Go语言开发一个博客系统【转】 https://bbs.huaweicloud.com/forum/thread-0269144558086016006-1-1.html  10.详解Golang如何使用Debug库优化代码【转】 https://bbs.huaweicloud.com/forum/thread-0225144558556243005-1-1.html  11.Python3中的指针你了解吗【转】 https://bbs.huaweicloud.com/forum/thread-0274144558593208011-1-1.html  12.Python绘图实现坐标轴共享与复用详解【转】 https://bbs.huaweicloud.com/forum/thread-02104144558721772010-1-1.html  13.使用Golang开发一个简易版shell【转】 https://bbs.huaweicloud.com/forum/thread-0226144559187797004-1-1.html  14.python导入其它py文件的实现步骤【转】 https://bbs.huaweicloud.com/forum/thread-0284144559442791006-1-1.html  15.Python property函数的具体使用【转】 https://bbs.huaweicloud.com/forum/thread-0259144559705810008-1-1.html  16.正则表达式的神奇世界之表达、匹配和提取全解析【转】 https://bbs.huaweicloud.com/forum/thread-02104144569438876012-1-1.html  17.正则去除中括号(符号)及里面包含的内容(最新推荐)【转】 https://bbs.huaweicloud.com/forum/thread-0226144569604407008-1-1.html  18.Javaweb项目启动Tomcat常见的报错解决方案【转】 https://bbs.huaweicloud.com/forum/thread-0274144571948983013-1-1.html  19.SpringBoot+Vue前后端分离实现审核功能的示例【转】 https://bbs.huaweicloud.com/forum/thread-0269144572025869007-1-1.html  20.Java中Collections.sort()排序方法举例详解【转】 https://bbs.huaweicloud.com/forum/thread-0269144572170830008-1-1.html  21.Java中回调函数 (callback) 及其实际应用场景【转】 https://bbs.huaweicloud.com/forum/thread-0259144572260172012-1-1.html  22.Redis实现商品秒杀的示例代码【转】 https://bbs.huaweicloud.com/forum/thread-0274144574350854015-1-1.html 
  • [技术干货] Linux socket函数详解【转】
    什么是协议在网络编程中,协议是指计算机系统之间进行通信和交互所遵循的规则和约定。它定义了数据的格式、传输方式、错误处理、认证和授权等方面的规范,以确保不同计算机之间能够正确地交换信息。协议分为多个层次,每个层次负责不同的功能。常见的协议包括物理层协议、数据链路层协议、网络层协议、传输层协议和应用层协议等。这些协议共同构成了网络通信的基础,使得不同类型的计算机和设备能够互相通信。在网络编程中,使用协议可以确保数据的可靠传输、安全性和互操作性。开发者需要根据具体需求选择合适的协议,并按照协议规范进行编码和解码,以实现网络通信功能。常见的网络协议包括TCP/IP协议、HTTP协议、FTP协议、SMTP协议等。总之,协议在网络编程中起着举足轻重的作用,它定义了通信双方的行为规范,确保了网络通信的顺利进行。scoket函数在Linux系统中,使用socket函数进行网络编程时,需要包含 <sys/socket.h> 头文件,并使用以下格式进行函数声明:#include <sys/types.h> #include <sys/socket.h> int socket(int domain, int type, int protocol);这里的 socket 函数用于创建一个套接字(socket),返回一个整数值作为套接字的文件描述符。参数含义如下:domain:套接字的地址族,可以是 AF_INET(IPv4),AF_INET6(IPv6)等。type:套接字的类型,可以是 SOCK_STREAM(面向连接的可靠字节流,如TCP),SOCK_DGRAM(无连接的不可靠数据报,如UDP)等。protocol:协议类型,通常为0表示选择默认协议。在IPv4网络协议家族中,数据传输方式为SOCK_STREAM的协议只有IPPROTO_TCP,数据传输方式为SOCK_DGRAM的协议只有IPPROTO_UDP。函数调用成功时,返回套接字的文件描述符,即一个非负整数,表示成功创建了一个套接字。如果出现错误,返回值为-1,并设置相应的错误码,例如通过 errno 变量进行获取。在函数声明之后,可以使用返回的文件描述符进行各种网络通信操作,如连接到远程主机、发送和接收数据等。需要注意的是,socket函数的具体用法和参数可能会因不同的操作系统和编译环境而有所差异。TCP和UDPTCP和UDP是两种常用的网络传输协议,它们在传输数据时有以下区别:1.连接性:TCP是面向连接的协议,而UDP是面向无连接的协议。对于TCP来说,通信双方需要先建立连接,然后才能进行数据传输;而UDP则不需要建立连接,可以直接发送数据。2.可靠性:TCP提供可靠的数据传输,它使用确认机制和重传机制,确保数据的完整性和按序传输。如果数据丢失或损坏,TCP会重新发送丢失的数据;而UDP不提供可靠性保证,它不进行数据确认和重传,可能会导致数据丢失或乱序。3.效率:由于TCP保证数据的可靠性,所以在传输过程中会引入一定的额外开销,例如确认和重传的处理。相比之下,UDP的开销较小,传输效率更高。4.应用场景:由于TCP具有可靠性的特点,适合用于需要保证数据完整性和顺序的应用,如文件传输、网页浏览、电子邮件等。而UDP适用于实时性要求较高的应用,如音视频传输、在线游戏等,它们对数据的实时性要求比数据的完整性更重要。
  • [技术干货] 关于 Linux Bash Shell 中变量的 5 个易错点【转】
    Linux 中的 Bash 脚本语言支持对变量的操作。但是,如果您从事过其他流行的编程语言开发,那么使用 Bash 处理变量会很容易出错。因为它的语法与其他语法不同(甚至对某些开发人员来说有点奇怪)。这篇文章会根据我的经验给你5个友情提示。阅读后,它可以帮助您避免不必要的错误。0. 等号周围没有空格对于许多语言,例如 Python,在等号周围添加空格是一个好习惯,因为它可以提高代码的可读性。但是在 Bash 中,你不应该在定义变量时添加额外的空格。如果我声明一个变量 name,如下:name = "Yang"这里会有一个错误:-bash: name: command not found如上所示,Bash 将 name 视为命令而不是变量,因为我添加了不必要的空格。因此,定义变量的正确方法如下:name="Yang"1.正确地定义数组在 Bash 中定义一个数组并不难。我们只需要使用一对括号来包含所有元素,如下例所示:names=("Yang" "Elon" "Bill")俗话说得好,“细节决定成败"。我之前在编写 Bash 脚本时犯了一个严重的错误。我习惯性地使用逗号(而非空格)来分隔数组中的每个元素。names=("Yang","Elon","Bill")Bash 不会将逗号视为分隔符,并且在 names 数组中只有一个元素 Yang,Elon,Bill 而不是预期的三个。2.正确选择引号当我们在 Bash 中声明一个变量时,关于引号的使用有 3 个可选的方案:没有引号用单引号用双引号默认情况下,Bash 中的每个值都是一个字符串。因此,如果不需要空格,我们就不需要使用任何引号。(同样,它与其他语言有些不同,在其他语言中,您不能在没有引号的情况下定义字符串)当您需要使用引号时,请注意单引号和双引号之间的区别。例如,让我们声明 3 个变量,如下所示。那么,truth1 和 truth2 有什么区别呢?如果你打印它们,你会看到 truth1 是 ${name} is amazing.。而 truth2 是 Yang is amazing.。总而言之,一对单引号内的字符串将始终被解释为它的本身。3. 避免在命令中使用反引号在 Bash 中,我们可以将命令的结果保存到变量中。有两种可能的方法来做到这一点:variable=`command`variable=$(command)例如,要保存 ls 命令的结果,我们可以这样写:file_list=`ls`或者file_list=$(ls)但是,这里的最佳实践始终是使用第二种方法,尤其是在编写较长的脚本时。因为反引号和单引号看起来很相似,有时你可能会混淆它们。4. 避免使用特殊名称一些名称在 Linux 中被预定义为环境变量,如 USER、HOME、PATH 等。我们可以使用 printenv 命令列出它们。显然,我们不应该用与环境变量相同的名称来声明我们的变量。好消息是 Linux 中所有的环境变量都是用大写字母写的,所以我们可以用小写字母来自定义变量,以区别环境变量。这是一个好习惯。
  • [技术干货] 如何用 10 行 bash shell 脚本监控 Linux?【转】
    监控我们的环境对于服务器运维来说至关重要,尤其是在部署新的应用程序时。如今,公司每天都使用开源解决方案来监控系统资源。但是,当出于测试的目的来监控一定时间时,bash 脚本会派上用场。在本教程中,我们将编写一个 bash shell 脚本,它将输出一个三列表,来显示我们机器上的内存、磁盘和 CPU 的百分比。让我们开始吧!该脚本基本上由三个主要部分组成:监控内存free -m | awk 'NR==2{printf "%.2f%%\t\t", $3*100/$2 }'9.24%free -m是用于显示已使用和空闲内存的命令,输出如下:[root@localhost tmp]# free -m total used free shared buffers cachedMem: 996 92 904 0 11 31-/+ buffers/cache: 49 947Swap: 1583 0 1583但是,我们需要从上面的输出中获取第二行的总内存和已用内存。我们可以使用 AWK 来从给定输出中提取数据。AWK 是一种用于文本处理和数据提取的编程语言。它是大多数 UNIX 系统的标准功能。awk ‘NR==2’从第二行提取数据。$3和$2分别充当已用量和总量。监控磁盘df -h | awk '$NF=="/"{printf "%s\t\t", $5}'7%第二个命令输出使用的磁盘百分比。df -h输出与磁盘使用情况和分区相关的数据。[root@localhost tmp]# df -hFilesystem Size Used Avail Use% Mounted on/dev/mapper/VolGroup-lv_root 14G 814M 12G 7% /tmpfs 499M 0 499M 0% /dev/shm/dev/sda1 485M 32M 428M 7% /bootawk $NF输出字段数。但是,df -h | awk '$NF=="/"将转到包含字符/的那一行。$5将从该行中选择第 5 个字段。这可确保该命令能够提取正确的磁盘使用百分比(在我们的示例中为 %7)。监控 CPUtop -bn1 | grep load | awk '{printf "%.2f%%\t\t\n", $(NF-2)}'top -bn1命令将只执行一次top命令(n1= 一次迭代),当我们想在 bash 脚本中使用top或将其数据输出到文件时使用可以使用-b选项。grep load将输出包含字符串load的行。$(NF-2)将计算该行上的字段数并减 2。[root@localhost tmp]# top -bn1 | grep loadtop - 19:31:25 up 1:47, 1 user, load average: 0.00, 0.00, 0.00在浏览完 bash 脚本的基本部分之后,我们需要将这些命令保存到变量MEMORY、DISK和CPU中:MEMORY=$(free -m | awk 'NR==2{printf "%.2f%%\t\t", $3*100/$2 }')DISK=$(df -h | awk '$NF=="/"{printf "%s\t\t", $5}')CPU=$(top -bn1 | grep load | awk '{printf "%.2f%%\t\t\n", $(NF-2)}')我们需要脚本运行一段时间(比如,一个小时)。为了做到这一点,我们需要使用while do循环,每次循环后延迟 x 秒(取决于您的测试):end=$((SECONDS+3600))while [ $SECONDS -lt $end ]; doecho "$MEMORY$DISK$CPU"sleep 5done为了在一定时间内运行一次循环,我们可以定义一个变量 $end,它从 bash 脚本开始的时间开始计算当前的秒数,因此是SECONDS,并在当前秒数上加上一个数字。所以一个小时就是 3600 秒。上述代码片段的第二行指出,只要$SECONDS(当前秒数)小于$SECONDS+3600,while循环就会继续执行。因此,我们定义了循环的开始时间和结束时间,以及将每个循环暂停 5 秒的睡眠时间。循环内部是每 5 秒将那三个变量分配一次新值,以及将输出三个资源使用情况的echo "$MEMORY$DISK$CPU"。完整代码如下:#! /bin/bashprintf "Memory\t\tDisk\t\tCPU\n"end=$((SECONDS+3600))while [ $SECONDS -lt $end ]; doMEMORY=$(free -m | awk 'NR==2{printf "%.2f%%\t\t", $3*100/$2 }')DISK=$(df -h | awk '$NF=="/"{printf "%s\t\t", $5}')CPU=$(top -bn1 | grep load | awk '{printf "%.2f%%\t\t\n", $(NF-2)}')echo "$MEMORY$DISK$CPU"sleep 5done上面的代码将输出以下内容:[root@localhost tmp]# ./stats.shMemory Disk CPU9.34% 7% 0.00%9.34% 7% 0.00%9.34% 7% 0.00%9.34% 7% 0.00%^C[root@localhost tmp]#您始终可以将数据输出到日志文件:[root@localhost tmp]# ./stats.sh >> log.txtStress 测试由于机器上几乎没有任何负载,我们可以使用stress来使 CPU 和内存负载一段时间。使用以下命令安装(在 CentOS 上):[root@localhost tmp]# yum install stressFailed to set locale, defaulting to CLoaded plugins: fastestmirrorDetermining fastest mirrorsepel/metalink | 4.2 kB 00:00 * base: ba.mirror.garr.it * epel: ftp.riken.jp * extras: centos.fastbull.org * updates: centos.fastbull.orgbase | 3.7 kB 00:00 epel | 4.3 kB 00:00 epel/primary_db | 5.9 MB 00:37 extras | 3.4 kB 00:00 extras/primary_db | 37 kB 00:00 updates | 3.4 kB 00:00 updates/primary_db | 5.2 MB 00:30 Setting up Install ProcessResolving Dependencies--> Running transaction check---> Package stress.x86_64 0:1.0.4-4.el6 will be installed--> Finished Dependency ResolutionDependencies Resolved=================================================================================================== Package Arch Version Repository Size===================================================================================================Installing: stress x86_64 1.0.4-4.el6 epel 36 kTransaction Summary===================================================================================================Install 1 Package(s)Total download size: 36 kInstalled size: 89 kIs this ok [y/N]: yDownloading Packages:stress-1.0.4-4.el6.x86_64.rpm | 36 kB 00:01 Running rpm_check_debugRunning Transaction TestTransaction Test SucceededRunning Transaction Installing : stress-1.0.4-4.el6.x86_64 1/1 Verifying : stress-1.0.4-4.el6.x86_64 1/1 Installed: stress.x86_64 0:1.0.4-4.el6 Complete!现在我们可以使用命令 stress 来负载我们的机器。例如,通过指定两个 CPU 密集型进程、一个 I/O 密集型进程和一个内存分配器进程,对系统施加 4 个平均负载,如下所示。以下压力测试将运行 1 小时。[root@localhost tmp]# stress -c 2 -i 1 -m 1 --vm-bytes 128M -t 3600sstress: info: [1574] dispatching hogs: 2 cpu, 1 io, 1 vm, 0 hddstress: info: [1574] successful run completed in 3600s[root@localhost tmp]# ./stats.sh Memory Disk CPU20.48% 7% 1.21% 20.48% 7% 1.02% 20.48% 7% 0.94% 21.89% 7% 1.18% 20.68% 7% 1.41% 22.09% 7% 1.62% 24.10% 7% 1.81% 24.90% 7% 1.98% 32.93% 7% 2.14% 30.32% 7% 2.29% 20.58% 7% 2.63% 27.91% 7% 2.82% 20.48% 7% 2.59% 20.48% 7% 2.38% 20.48% 7% 2.19% 20.48% 7% 2.02% 20.48% 7% 1.86%关于如何为所有系统管理员创建一个非常容易且有用的 bash 脚本的教程到此结束。
  • [技术干货] CPU 负载与 CPU 使用率可不是一回事【转】
    1、简介存储、内存和 CPU(中央处理器)等系统资源不足会极大地影响应用程序的性能。因此,监控这些组件至关重要。与磁盘和内存不同,监控 Linux 系统上的 CPU 使用率并不那么简单。在本文中,我们将了解如何解释 CPU 指标并以人类可读的格式显示它们。2. CPU 负载与 CPU 使用率尽管 CPU 负载和 CPU 使用率听起来很相似,但它们是不可互换的。CPU 负载定义为在单个时间点使用或等待使用一个内核的进程数。假设我们有一个单核系统,我们的 CPU 平均负载始终低于 0.6。这表明每个需要使用 CPU 的进程都可以立即使用它,而无需等待。如果 CPU 平均负载大于 1,则表示有进程需要使用 CPU,但由于 CPU 不可用,目前无法使用。但是,多处理器系统中高于 1 的平均负载不会成为问题,因为有更多内核可用。uptime命令为我们提供了以 1、5 和 15 分钟为间隔的平均负载视图:[root@localhost ~]# uptime 12:40:05 up 2:29, 1 user, load average: 0.37, 0.08, 0.03如果不知道系统的核心数,就无法解释平均负载:[root@localhost ~]# cat /proc/cpuinfo |grep corecore id : 0cpu cores : 1另一方面,CPU 使用率是 CPU 处理非空闲任务所花费的时间百分比。CPU 使用率只能在指定的时间间隔内测量。我们可以通过将空闲时间的百分比从 100 中减去来确定 CPU 使用率。3.计算CPU使用率3.1 使用vmstat获取 CPU 使用率vmstat命令近乎实时地显示 CPU 活动:[root@localhost ~]# vmstat 3 4procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu----- r b swpd free buff cache si so bi bo in cs us sy id wa st 4 0 0 1347080 6120 941464 0 0 68 11 72 137 1 2 97 0 0 1 0 0 1347080 6120 941464 0 0 0 0 84 157 1 2 97 0 0 1 0 0 1347080 6120 941464 0 0 0 0 59 107 1 1 98 0 0 1 0 0 1347080 6120 941464 0 0 0 1 59 104 1 1 98 0 0CPU 下的列提供了处理器时间花费在哪里的概览:us –运行非内核代码所花费的时间sy -运行内核代码所花费的时间id –空闲时间wa –等待 I/O 所花费的时间st -从虚拟机中窃取时间id列是我们感兴趣的。延迟一秒,我们使用 vmstat 计算CPU使用率:[root@localhost ~]# echo "CPU Usage: "$[100-$(vmstat 1 2|tail -1|awk '{print $15}')]"%"CPU Usage: 2%没有提供任何参数的vmstat命令将给出自引导以来的 CPU 时间。这不会提供准确的 CPU 使用百分比。因此,参数只能是 1 和 2,我们采用一秒钟后计算的指标:vmstat 1 23.2. 使用/proc/stat获取 CPU 使用率CPU 活动也可以从/proc/stat文件中提取。该文件包含自启动以来有关系统的各种指标:[root@localhost ~]# cat /proc/stat cpu 3020 28 1863 22404 35 432 47 0 0 0cpu0 3020 28 1863 22404 35 432 47 0 0 0intr 96468 28 100 0 0 0 0 0 0 1 0 0 0 1263 0 0 0 3696 0 153 928 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 207 0 41 14600 0 0 0 0 0 0 0 0 0 0 0 0 0 0 343 97 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0ctxt 340950btime 1628404433processes 3276procs_running 2procs_blocked 0softirq 112867 1 16857 56 269 510 0 261 0 0 94913第一行, 'cpu' 是系统所有核心指标的聚合。在具有 4 个内核的系统上,将有 4条cpu线——cpu0、cpu1、cpu2和cpu3。' cpu ' 行中的列表示处理不同任务所花费的时间:user – 在用户模式下花费的时间nice – 在用户模式下处理 nice 进程所花费的时间system – 执行内核代码所花费的时间idle - 空闲时间iowait – 等待 I/O 所花费的时间irq - 服务中断所花费的时间softirq – 服务软件中断所花费的时间steal —从虚拟机中窃取的时间guest - 为来宾操作系统运行虚拟 CPU 所花费的时间guest_nice – 为“不错的”客户操作系统运行虚拟 CPU 所花费的时间我们将使用这些指标来计算平均空闲百分比。随后,我们将使用计算值来计算 CPU 使用率。需要注意的是,较旧的 Linux 发行版不计算窃取、来宾或来宾_nice指标。如果我们使用的是旧系统,我们会在计算中忽略这些指标:平均空闲时间 (%) = (idle * 100) / (user + nice + system + idle + iowait + irq + softirq +steal + guest + guest_nice)cat /proc/stat |grep cpu |tail -1|awk '{print ($5*100)/($2+$3+$4+$5+$6+$7+$8+$9+$10)}'|awk '{print "CPU Usage: " 100-$1}'CPU Usage: 2.4219由于我们正在开发单核系统,因此“cpu”行将与“cpu1 ”相同。因此,tail -1 的使用是 只检索其中一行。然而,我们会在多处理器系统上使用“ cpu ”行,因为它是所有内核上的指标的集合。3.3. 使用top获取 CPU 使用率通常,top命令通常用于显示系统上的活动进程以及这些进程消耗了多少资源。不过,我们可以使用这个命令来测量 CPU 的状态:[root@localhost ~]# toptop - 07:08:31 up 2:41, 1 user, load average: 0.00, 0.00, 0.00Tasks: 322 total, 2 running, 320 sleeping, 0 stopped, 0 zombie%Cpu(s): 10.0 us, 15.0 sy, 0.0 ni, 97.8 id, 0.0 wa, 5.0 hi, 0.0 si, 0.0 stMiB Mem : 3709.4 total, 1483.1 free, 1402.0 used, 824.4 buff/cacheMiB Swap: 2048.0 total, 2048.0 free, 0.0 used. 2053.4 avail Mem 此外,需要注意的是,top 命令显示了单个内核的 CPU 百分比。在多处理器系统中,CPU 百分比可能超过 100%。例如,如果 4 个核心为 75%,top命令将显示 CPU 为 300%。我们需要获取空闲时间的值,以便我们可以从 100 中减去它来获得使用情况:[root@localhost ~]# top -bn2 | grep '%Cpu' | tail -1 | grep -P '(....|...) id,'|awk '{print "CPU Usage: " 100-$8 "%"}'CPU Usage: 2.2%-n选项是top命令在结束前应该使用的迭代次数。我们避免使用第一个循环,因为我们检索的指标将是自启动以来的值。因此,我们进行了第二次迭代。或者,在多处理器系统中,我们必须将给定的“ id”值除以内核数,然后从 100 中减去该值。例如,如果我们在四核系统上运行,并且“ id ”值为 304%,我们将 CPU 使用率计算为:CPU 使用率 % = 100 – (304/4)[root@localhost ~]# top -bn2 | grep '%Cpu' | tail -1 | grep -P '(....|...) id,'|awk '{print "CPU Usage: " 100-($8/4) "%"}'4.结论在本文中,我们讨论了 CPU 使用率和 CPU 负载之间的区别。许多人交替使用这两个概念,这是不正确的。之后,我们深入研究了用于检索 CPU 利用率指标的各种方法。
  • [技术干货] find 命令的 7 种用法【转】
    可以很肯定地说,find命令是 Linux 后台开发人员必须熟知的操作之一,除非您使用的是 Windows Server。对于技术面试,它也是一个热门话题。让我们看一道真题:如果你的 Linux 服务器上有一个名为logs的目录,如何删除该目录下最后一次访问时间超过一年的日志文件呢?这种情况很常见,但令人惊讶的是,并非每个开发人员都能在面试中清楚地写出这个命令。答案:首先我们需要使用 cd 命令进入对应的目录,然后,命令如下:find . -type f -atime +365 -exec rm -rf {} \; 如果你还没有完全理解上面的命令,完全不用担心。本文将介绍find命令的 7 个实际用途,您最终会掌握它。如果您已经知道了,那么阅读这篇文章对您来说将是一个很好的回顾。按名称或正则表达式查找文件让我们从最简单的用法开始。要按特定名称搜索文件,命令如下:find . -name test.txt如何查找所有格式为 pdf 的书籍?使用正则表达式:find ./yang/books -name "*.pdf"默认情况下,find 命令会搜索常规文件,但最好进行指定(-type f)以使所有内容更清晰:find ./yang/books -type f -name "*.pdf"查找不同类型的文件除了搜索常规文件外,我们还可以通过指定-type选项来搜索其他类型的文件。例如目录:find . -type d -name "yang*"或者符号链接:find . -type l -name "yang*"按指定的时间戳查找文件要按指定的时间戳搜索文件,我们需要知道 Linux 系统中的 3 个不同的时间戳:访问时间戳(atime):最后一次读取文件的时间。修改时间戳 (mtime):文件内容最后一次被修改的时间。更改时间戳 (ctime):上次更改文件元数据的时间(如,所有权、位置、文件类型和权限设置)所以,正如开头提到的面试题,要搜索atime超过一年的文件,我们可以编写如下命令:find . -type f -atime +365如果我们需要查找 mtime 正好是 5 天前的文件,请不要包含 +,因为它的意思是“大于”。find . -type f -mtime 5显然,+ 表示“大于”,- 表示“小于”。所以我们可以搜索 ctime 在 5~10 天前的文件:find . -type f -ctime +5 -ctime -10按大小查找文件-size选项使我们能够按指定大小查找文件。我们可以将其计量单位指定为以下约定:b:512 字节块(默认)c:字节w:双字节字k:KBM:MBG:GB类似于按时间戳查找文件,+表示“大于”,-表示“小于”。例如,要查找大小为 10 MB ~ 1 GB 的文件:find . -type f -size +10M -size -1G按权限查找文件合理控制文件的权限是 Linux 管理员的一项重要任务。find命令的-perm选项可以帮助我们按指定权限查找文件:find . -type f -perm 777例如,上面的命令会搜索所有具有 777 权限的文件,这意味着一个文件对其持有者、组和所有用户具有所有的读、写和可执行权限。按所有权查找文件这个任务很简单。我们可以使用-user选项指定用户名。例如,以下命令将查找所有属于yang的文件:find -type f -user yang在找到文件后执行命令在大多数情况下,我们希望在找到我们需要的文件后进行后续操作。例如将其删除,或检查它们的详细信息等等。-exec命令使这些所有事情变得更加容易。现在,要了解如何使用它,让我们回到之前提到的面试问题:find . -type f -atime +365 -exec rm -rf {} \;上述命令在-exec选项后是rm -rf,其用于删除文件。{}是用于查找结果的占位符。注意:占位符{}非常重要,尤其是在您想删除文件时。因为,如果您不使用它,该命令将对所有文件执行(而不是您刚刚通过 find 命令找到的文件)。做一个尝试,请在终端上执行以下两个命令,并检查它们的结果有何不同:一个使用占位符:find . -type f -atime +5 -exec ls {} \;另一个不使用:find . -type f -atime +5 -exec ls \;-exec 选项后面的命令必须以分号(;)结束。众所周知,转义字符用于去除单个字符的特殊含义。在 Linux 中,反斜杠\用作转义字符。所以我们将它用于分号字符。总结看完 find 命令的 7 种用法后,开始提到的面试题现在好像很容易解决了。你现在可以直接写下它的答案并将其解释清楚吗?find . -type f -atime +365 -exec rm -rf {} \;
  • [技术干货] nginx做白名单和限流【转】
    在我们生产环境中使用到了地图服务,每个月有免费请求次数,近一个月请求次数突然暴涨,导致直接开启付费模式,一个月上百刀的花销着实难扛,根据实际我们的业务使用情况,远达不到付费标准,故考虑做白名单和限流措施,基于以上情况并遇到春节急需快速处理,所以选择了最简单方便的方式,通过nginx做限流​ 我们都知道nginx里面是可以用lua脚本做一些稍微复杂些的逻辑处理的,要使用lua脚本需要编译lua解释器,时间有限我直接用了openresty,它集成了lua和nginx1、openresty是什么?OpenResty是一个基于Nginx的高性能Web平台,用于方便地搭建能够处理超高并发、扩展性极高的动态 Web 应用、Web 服务和动态网关。具备下列特点:具备Nginx的完整功能基于Lua语言进行扩展,集成了大量精良的 Lua 库、第三方模块,允许使用Lua自定义业务逻辑、自定义库二、OpenResty的安装1、添加OpenResty仓库# 由于公共库中找不到openresty,所以需要添加openresty的源仓库 yum-config-manager --add-repo https://openresty.org/package/centos/openresty.repo # 注意,如果上面命令提示不存在,那就先安装一下 yum install -y yum-utils2. 安装OpenResty# 安装openresty yum install -y openresty # 安装OpenResty管理工具,帮助我们安装第三方的Lua模块 yum install -y openresty-opm3、目录结构​ 默认安装在/usr/local/openresty看到里面有一个nginx目录,进去可以看到跟我们平常用的nginx是一模一样的,OpenResty就是在Nginx基础上集成了一些Lua模块到这里我们就安装好了7. 启动和运行OpenResty底层是基于Nginx的,查看OpenResty目录的nginx目录,结构与windows中安装的nginx基本一致:所以这个里面的nginx和平常的nginx是一样的1)nginx配置文件worker_processes 1; events { worker_connections 1024; } http { server{ listen 999; server_name localhost; location /mapbox/ { access_by_lua_file "/usr/local/openresty/nginx/lua_script/rule.lua"; proxy_pass https://api.mapbox.com/; proxy_ssl_server_name on; } } } 2)lua脚本文件(白名单加限流)通过两个redis的key,map_request_limitation:存放令牌数量,map_request_white_list:白名单列表;白名单的IP,无需限流,只有白名单之外的才需要限流-- 其实这两个值可以从redis取 甚至可以给每个qrcode设置单独的速率和容积 -- 但如果想监听桶的状态 需要持续的请求, 只有每次请求后才重新计算并更新桶状态 否则桶状态不变 local tokens_per_second = 0.2 -- 生成速率 /s local max_tokens = 10 -- 最大溶剂 local current_time = ngx.now() local path = ngx.var.uri local redis_key = "map_request_limitation" local redis_key_white_list = "map_request_white_list" local client_ip = ngx.var.remote_addr -- local redis_key = "path:" .. path -- 连接Redis local redis = require "resty.redis" local red = redis:new() red:set_timeout(1000) local ok, err = red:connect("127.0.0.1", 6379) if not ok then ngx.log(ngx.ERR, "Redis连接失败: ", err) return ngx.exit(500) end -- 权限校验 local res, err = red:auth("123456") if not res then ngx.say("failed to authenticate: ", err) return end -- 发送 Lua 脚本(保证redis原子性操作) local script = [[ local redis_key = KEYS[1] local redis_white_list_key = KEYS[2] local tokens_per_second = tonumber(ARGV[1]) local max_tokens = tonumber(ARGV[2]) local current_time = tonumber(ARGV[3]) local client_ip = ARGV[4] -- ip是否存在列表中 local is_in_whitelist, err = redis.call('sismember', redis_white_list_key, client_ip) if is_in_whitelist == 1 then return 1 end -- 获取上次访问时间和令牌数量 local res = redis.call('HMGET', redis_key, 'last_access_time', 'tokens') local last_access_time local last_tokens if res[1] and res[2] then last_tokens = res[2] last_access_time = res[1] end -- 计算时间间隔 local time_passed = current_time - (tonumber(last_access_time) or 0) -- 计算新的令牌数量 last_tokens = last_tokens and tonumber(last_tokens) or max_tokens local new_tokens = math.min(max_tokens, last_tokens + time_passed * tokens_per_second) -- 判断令牌数量是否足够 if new_tokens >= 1 then -- 消耗令牌 redis.call('HMSET', redis_key, 'last_access_time', current_time, 'tokens', new_tokens - 1) return 1 else return 0 end ]] -- 执行脚本 local result = red:eval(script, 2, redis_key, redis_key_white_list,tokens_per_second, max_tokens,current_time,client_ip) if result == 1 then -- 成功 ngx.log(ngx.INFO, "成功") else -- 令牌不足 ngx.status = ngx.HTTP_TOO_MANY_REQUESTS ngx.say("OVERLOAD!!!!",result) return ngx.exit(ngx.HTTP_TOO_MANY_REQUESTS) end -- 返还redis连接到连接池 local ok, err = red:set_keepalive(10000, 100) if not ok then ngx.log(ngx.ERR, err) end启动之后当通过这个999端口访问之后,我们在redis里面可以看到以下两个key,白名单可以自行添加,即时生效转载自https://www.cnblogs.com/KingArmy/p/18019489
  • [技术干货] OpenResty linux安装教程
     OpenResty是一个基于 Nginx 与 Lua 的高性能 Web 平台,其内部集成了大量精良的 Lua 库、第三方模块以及大多数的依赖项。用于方便地搭建能够处理超高并发、扩展性极高的动态 Web 应用、Web 服务和动态网关。1.更新系统软件包: 运行以下命令来确保您的系统软件包已经是最新的: sudo apt update sudo apt upgrade 2.安装编译OpenResty所需的依赖项: sudo apt install -y build-essential libpcre3 libpcre3-dev zlib1g-dev libssl-dev curl 3.下载OpenResty: 在浏览器中访问OpenResty的官方网站(https://openresty.org/),找到最新版本的下载链接,或者使用以下命令来下载最新版本: curl -OL https://openresty.org/download/openresty-VERSION.tar.gz 请将"VERSION"替换为您想要安装的OpenResty版本号。 4.解压文件并进入目录: tar -xzvf openresty-VERSION.tar.gz cd openresty-VERSION 5.配置和编译: ./configure --prefix=/usr/local/openresty make sudo make install 这将在/usr/local/openresty目录下安装OpenResty。 6.添加OpenResty到环境变量: 编辑~/.bashrc文件,添加以下内容: export PATH=/usr/local/openresty/nginx/sbin:$PATH 7.然后运行以下命令使其生效: source ~/.bashrc 启动OpenResty: 使用以下命令启动OpenResty: 8.sudo /usr/local/openresty/nginx/sbin/nginx 现在,OpenResty已经成功安装并运行。 
  • 使用LVM方式创建Linux文件系统
    使用LVM方式创建Linux文件系统在Linux系统中,LVM(Logical Volume Manager)是一种灵活的磁盘管理技术,它允许用户更方便地管理磁盘空间。LVM将物理磁盘分区划分为物理卷(PV),然后将一个或多个物理卷组合成卷组(VG),最后在卷组上划分逻辑卷(LV)。通过这种方式,用户可以灵活地调整逻辑卷的大小,而无需关心底层物理磁盘的布局。本文将介绍如何使用LVM在Linux系统上创建文件系统。步骤1:安装LVM工具首先,确保您的Linux系统已经安装了LVM工具。在大多数发行版中,LVM工具默认已经安装。如果没有安装,可以使用包管理器进行安装。例如,在Debian/Ubuntu系统上,可以使用以下命令安装:sudo apt-get update sudo apt-get install lvm2步骤2:创建物理卷接下来,将磁盘分区初始化为物理卷。假设您有一个名为/dev/sdb的磁盘,您想将其整个空间用作物理卷。运行以下命令:sudo pvcreate /dev/sdb步骤3:创建卷组现在,创建一个卷组并将物理卷添加到其中。假设您想将卷组命名为myvg,运行以下命令:sudo vgcreate myvg /dev/sdb步骤4:创建逻辑卷在卷组上创建一个逻辑卷。假设您想在myvg卷组上创建一个名为mylv的逻辑卷,大小为10GB,运行以下命令:sudo lvcreate -L 10G -n mylv myvg步骤5:格式化逻辑卷在逻辑卷上创建一个文件系统。假设您想使用ext4文件系统,运行以下命令:sudo mkfs.ext4 /dev/myvg/mylv步骤6:挂载逻辑卷创建一个目录作为挂载点,然后将逻辑卷挂载到该目录。例如,将逻辑卷挂载到/mnt/mylv目录,运行以下命令:sudo mkdir /mnt/mylv sudo mount /dev/myvg/mylv /mnt/mylv现在,您已经成功使用LVM在Linux系统上创建了一个文件系统,并将其挂载到了/mnt/mylv目录。您可以在该目录中存储和管理文件。总结LVM提供了一种灵活且可扩展的磁盘管理方案,使用户能够更方便地调整和管理磁盘空间。通过创建物理卷、卷组和逻辑卷,用户可以将多个磁盘分区组合成一个逻辑单元,并在逻辑卷上创建文件系统。LVM还支持在线调整逻辑卷的大小,无需卸载文件系统或重新启动系统。这使得LVM成为大规模存储和管理数据的理想选择。
  • [技术干货] Linux的Inode号和日志服务管理—转载
     一、Inode号 1.inode和block 文件是存储在硬盘上的,硬盘的最小存储单位叫做扇区sector,每个扇区存储512字节。操作系统读取硬盘的时候,不会一个个扇区地读取,这样效率太低,而是一次性连续读取多个扇区,即一次性读取一个块block。这种由多个扇区组成的块,是文件存取的最小单位。块的大小,最常见的是4KB,即连续八个sector组成一个block。  文件数据存储在块中,那么还必须找到一个地方存储文件的元信息,比如文件的创建者、文件的创建日期、文件的大小等等。这种存储文件元信息的区域就叫做inode,中文译名为索引节点,也叫i节点。因此,一个文件必须占用一个inode,但至少占用一个block。  元信息-----inode  数据-------block  2.查看inode信息 stat:查看inode信息  [root@localhost ~]# mkdir test [root@localhost ~]# echo "this is test file" > test.txt 三个主要的时间属性:  ctime:change time是最后一次改变文件或目录(属性)的时间,例如执行chmod,chown等命令。 atime:access time是最后一次访问文件或目录的时间。 mtime:modify time是最后一次修改文件或目录(内容)的时间。  ls  -i:直接查看文件i节点号  [root@localhost ~]# ls -i 33574991 anaconda-ks.cfg      2086 test  33574994 test.txt df-i: 查看硬盘分区的inode总数和已使用情况  [root@localhost ~]# df -i Filesystem               Inodes IUsed   IFree IUse% Mounted on /dev/mapper/centos-root 8910848 26029 8884819    1% / devtmpfs                 230602   384  230218    1% /dev tmpfs                    233378     1  233377    1% /dev/shm tmpfs                    233378   487  232891    1% /run tmpfs                    233378    16  233362    1% /sys/fs/cgroup /dev/sda1                524288   328  523960    1% /boot tmpfs                    233378     1  233377    1% /run/user/0 二、日志服务管理 作用:  将系统和应用发生的事件记录至日志中,以助于排错和分析使用。  记录的内容包括:时间,地点,人物,事件  1.日志的级别 级别    消息    级别    说明 0    EMERG    紧急    会导致主机系统不可用的情况 1    ALERT    警告    必须马上采取措施解决问题 2    CRIT    严重    比较严重的情况 3    ERR    错误    运行出现错误 4    WARNING    提醒    可能会影响系统功能的事件 5    NOTICE    注意    不会影响系统但值得注意 6    INFO    信息    一般信息 7    DEBUG    调试    程序或系统调试信息等 日志级别数字越小越紧急,一般运维过程中出现4级就要进行检查注意了。  2.日志的种类 系统日志:  messages:系统大部分信息  secure:和安全相关的信息  用户登录日志:  btmp:查看用户登陆失败的信息。(lastb命令可以查看,应为btmp是一个二进制的文件)  wtmp:哪些用户正常登陆到系统中。(可以使用last命令查看)  3.日志的功能和日志文件的分类 功能:  用于记录系统、程序运行中发生的各种事件  通过阅读日志,有助于诊断和解决系统故障  分类:  内核及系统日志 由系统服务rsyslog统一进行管理,目志格式基本相似  用户日志 记录系统用户登录及退出系统的相关信息  程序日志 由各种应用程序独立管理的日志文件,记录格式不统一  4.日志的格式和分析工具  分析工具:users、who、w、lastb、last  三、rsyslog日志处理系统 1、使用Rsyslog创建日志优点 在运维过程中某些服务时自带错误日志和运行日志的,但是有一些服务安装完成后是没有日志的。下面我们以sshd服务为例创建一个日志。  例如sshd本身是有日志的,但是与其他安全服务一样都存放在/var/log/secure/messages文件中不方便我们查看sshd的日志,如果我们将sshd服务的日志单独生成一个日志文件便于我们查看,注意使用Rsyslog创建日志的服务必须支持Rsyslog。  2、Rsyslog配置文件解析 配置文件路径:/etc/rsyslog.conf  分为三大块:  MODULES:相关模块配置  GLOBAL DIRECTIVES:全局配置  RULES:日志记录相关的规则配置  3.通过rsyslog将ssh服务的日志单独设置 第一步在rsyslog的配置文件(/etc/rsyslog.conf)# RULES #模块中设置ssh服务的local等级为local6并设置日志存路径为/mnt/ssh.logs。其中local6后的.*表示所等级的日志都输出,  .表示等于或高于后面等级日志的都会输出,如果是.=则表示只有等于后面的日志的等级才会输出,如果是.!则表示除了后面等级的其他等级日志全部记录  第二步在ssh服务的服务器端配置文件中(/etc/ssh/sshd_conf)修改自定义rsyslog  重启sshd服务和rsyslog服务  本机ssh自己并查看实时日志是否生成记录  将 ssh服务的日志 文件 独立成出来 原来ssh               /var/log/secure         [root@localhost ~]#tail -f /var/log/secure #查看ssh服务的日志位置     [root@localhost ~]#vim /etc/ssh/sshd_config #修改ssh配置文件,32下一行添加自己的自定义 32 #SyslogFacility AUTHPRIV 33 SyslogFacility LOCAL6   local 0-7     [root@localhost ~]#vim /etc/rsyslog.conf #76 行添加自己的文件位置  local6.*                                                /var/log/ssh.log       [root@localhost log]#systemctl restart rsyslog.service sshd #重启服务  4、使用rsyslog搭建日志服务器 第一步将2台服务器的防火墙以及selinux防护关闭  systemctl stop firewalld setenforce 0 第二步在业务服务器A和日志服务器B上配置rsyslog服务开启tcp协议,在业务服务器A上将内核和公共日志实时传输到日志服务器B上   第三步业务服务器A和日志服务器B上重启rsyslog服务并检查514端口是否开启 ———————————————— 版权声明:本文为CSDN博主「Miraitowa_xu」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.csdn.net/Miraitowa_xu/article/details/135458684 
总条数:968 到第
上滑加载中