ansible自动化运维(四)运维实战

相关文章
ansible自动化运维(一)简介及清单,模块-CSDN博客
ansible自动化运维(二)playbook模式详解-CSDN博客
ansible自动化运维(三)jinja2模板&&roles角色管理-CSDN博客

五。运维实战

5.1Ansible自动化安装nginx

编译安装nginx

(1)下载nginx包

使用wget下载nginx包,下载地址:

http://mirrors.sohu.com/nginx/nginx-1.9.6.tar.gz

解压下载nginx包

|---------------------------------------------------------------------------|
| [root@server ~]# wget http://mirrors.sohu.com/nginx/nginx-1.9.6.tar.gz |

进入解压后的目录:

|-----------------------------------------------------------------|
| [root@server ~]# cd nginx-1.9.6 [root@server nginx-1.9.6]# |

这条命令将当前工作目录切换到解压后的Nginx源代码目录。

安装两个依赖

|------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| [root@server nginx-1.9.6]# yum groupinstall "Development Tools" -y [root@server nginx-1.9.6]# yum install pcre pcre-devel zlib zlib-devel openssl openssl-devel -y |

配置编译参数:

|--------------------------------------------------------------------|
| [root@server nginx-1.9.6]# ./configure --prefix=/usr/local/nginx |

这条命令运行configure脚本本来检查系统环境并生成Makefile。-prefix=/usr/local/nginx选项指定了安装路径,即Nginx将被安装到/usr/local/nginx目录下。

编译和安装

|-----------------------------------------------------|
| [root@server nginx-1.9.6]# make && make install |

这两条命令依次执行以下操作:

make:根据Makefile中的规则编译源代码,生成可执行文件和其他必要的文件。
make install:将编译好的文件复制到指定的安装目录(由 --prefix 选项指定),即/usr/local/nginx

(2)编写/etc/init.d/nginx文件

|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| [root@server nginx-1.9.6]# vi /etc/init.d/nginx [root@server nginx-1.9.6]# chmod +x /etc/init.d/nginx [root@server nginx-1.9.6]# cat /etc/init.d/nginx #!/bin/bash # chkconfig: - 30 21 # description: http service. # Source Function Library . /etc/init.d/functions # Nginx Settings NGINX_SBIN="/usr/local/nginx/sbin/nginx" NGINX_CONF="/usr/local/nginx/conf/nginx.conf" NGINX_PID="/usx/local/nginx/logs/nginx.pid" RETVAL=0 prog="Nginx" start() { echo -n "Starting prog: " mkdir -p /dev/shm/nginx_temp daemon NGINX_SBIN -c NGINX_CONF RETVAL=? echo return RETVAL } stop() { echo -n "Stopping prog: " killproc -p NGINX_PID NGINX_SBIN -TERM rm -rf /dev/shm/nginx_temp RETVAL=? echo return RETVAL } reload() { echo -n "Reloading prog: " killproc -p NGINX_PID NGINX_SBIN -HUP RETVAL=? echo return RETVAL } restart() { stop start } configtest() { NGINX_SBIN -c NGINX_CONF -t return 0 } case "1" in start) start ;; stop) stop ;; reload) reload ;; restart) restart ;; configtest) configtest ;; \*) echo "Usage: 0 {start\|stop\|reload\|restart\|configtest}" RETVAL=1 esac exit RETVAL |

(3)清空配置文件重新填写

|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| [root@server nginx-1.9.6]# vi /usr/local/nginx/conf/nginx.conf [root@server nginx-1.9.6]# cat /usr/local/nginx/conf/nginx.conf user nobody nobody; #//定义nginx运行的用户和用户组 worker_processes 2; #//nginx进程数,一般为CPU总核心数 error_log /usr/local/nginx/logs/nginx_error.log crit; #//全局错误日志定义类型 pid /usr/local/nginx/logs/nginx.pid; #//进程文件 worker_rlimit_nofile 51200; events #//工作模式与连接数上限 { use epoll; worker_connections 6000; } http #//http下的一些配置 { include mime.types; #//文件扩展名与文件类型映射表 default_type application/octet-stream; #//默认文件类型 server_names_hash_bucket_size 3526; server_names_hash_max_size 4096; log_format combined_realip 'remote_addr http_x_forwarded_for [time_local\]' 'host "request_uri" status' '"http_referer" "http_user_agent"'; sendfile on; #//开启高效文件传输模式 tcp_nopush on; #//防止网络阻塞 keepalive_timeout 30; #//长连接超时时间,单位为秒 client_header_timeout 3m; client_body_timeout 3m; send_timeout 3m; connection_pool_size 256; client_header_buffer_size 1k; large_client_header_buffers 8 4k; request_pool_size 4k; output_buffers 4 32k; postpone_output 1460; client_max_body_size 10m; client_body_buffer_size 256k; client_body_temp_path /usr/local/nginx/client_body_temp; proxy_temp_path /usr/local/nginx/proxy_temp; fastcgi_temp_path /usr/local/nginx/fastcgi_temp; fastcgi_intercept_errors on; tcp_nodelay on; #//防止网络阻塞 gzip on; #//开启gzip压缩输出 gzip_min_length 1k; gzip_buffers 4 8k; gzip_comp_level 5; gzip_http_version 1.1; gzip_types text/plain application/x-javascript text/css text/htm application/xml; server #//虚拟主机配置 { listen 80; server_name localhost; index index.html index.htm index.php; root /usr/local/nginx/html; location ~ \.php { include fastcgi_params; fastcgi_pass unix:/tmp/php-fcgi.sock; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME /usr/1ocal/nginx/htmlfastcgi_script_name; } } } |

(4)编写完成后检查

|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| [root@server nginx-1.9.6]# /usr/local/nginx/sbin/nginx -t nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful |

(5)启动nginx

|-----------------------------------------------------------------------------------------------------------------------|
| [root@server nginx-1.9.6]# service nginx start Reloading systemd: [ 确定 ] Starting nginx (via systemctl): [ 确定 ] |

编译安装完成

5.2环境准备

(1)移动目录文件

将nginx.tar.gz复制到/etc/ansible/nginx_install/roles/install/files下

启动脚本和配置文件都放到/etc/ansible/nginx_install/roles/install/template下

|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| [root@server ~]# mv nginx-1.9.6.tar.gz /etc/ansible/nginx_install/roles/install/files/ [root@server ~]# cp nginx-1.9.6/conf/nginx.conf /etc/ansible/nginx_install/roles/install/templates/ [root@server ~]# cp nginx-1.9.6/conf/nginx.conf /etc/ansible/nginx_install/roles/install/templates/ |

(2)编辑需要的yml文件

|----------------------------------------------------------------------------------|
| [root@server nginx_install]# vi /etc/ansible/hosts #清单文件中加入这两条 [nginx] Host2 |

|------------------------------------------------------------------------------------------------------------------------------------------|
| [root@server nginx_install]# cat install.yml --- - hosts: nginx #//入口文件 remote_user: root gather_facts: True roles: - common - install |

|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| [root@server nginx_install]# cat roles/common/tasks/main.yml - name: install initialization require software #//安装需要的依赖 yum: name={{ item }} state=installed with_items: - zlib-devel - pcre-devel - gcc |

|--------------------------------------------------------------------------------------------------------------------------------------------|
| [root@server nginx_install]# cat roles/install/vars/main.yml nginx_user: nobody #//定义所需变量 nginx_port: 80 nginx_basedir: /usr/local/nginx |

|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| [root@server nginx_install]# cat roles/install/tasks/copy.yml - name: Copy Nginx Software #//复制压缩包 copy: src=nginx-1.9.6.tar.gz dest=/tmp/nginx.tar.gz owner=root group=root - name: Uncompression Nginx Software #//解压压缩包 shell: tar zxf /tmp/nginx.tar.gz -C /usr/local/ - name: install Nginx shell: cd /usr/local/nginx-1.9.6 && ./configure --prefix=/usr/local/nginx && make && make install - name: Copy Nginx Start Script #//复制启动脚本 template: src=nginx dest=/etc/init.d/nginx owner=root group=root mode=0755 - name: Copy Nginx Config #//复制nginx配置文件 template: src=nginx.conf dest={{ nginx_basedir }}/conf/ owner=root group=root mode=0644 |

|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| [root@server nginx_install]# cat roles/install/tasks/install.yml - name: create nginx user #//创建用户 user: name={{ nginx_user }} state=present createhome=no shell=/sbin/nologin - name: start nginx service #//开启服务 shell: /etc/init.d/nginx start - name: add boot start nginx service #//加入开机启动 shell: chkconfig --level 345 nginx on - name: delete nginx compression files #//删除压缩包 shell: rm -rf /tmp/nginx.tar.gz |

|--------------------------------------------------------------------------------------------------------------------------------------|
| [root@server nginx_install]# cat roles/install/tasks/main.yml - include: copy.yml #//调用copy.yml和install.yml - include: install.yml |

5.3执行文件

(1)运行install.yml

|----------------------------------------------------------------------------------------|
| [root@server nginx_install]# ansible-playbook /etc/ansible/nginx_install/install.yml |

|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| [root@server nginx_install]# ansible-playbook /etc/ansible/nginx_install/install.yml [WARNING]: Invalid characters were found in group names but not replaced, use -vvvv to see details PLAY [nginx] ******************************************************************************************************* TASK [Gathering Facts] ********************************************************************************************* ok: [host2] TASK [common : install initialization require software] ************************************************************ [DEPRECATION WARNING]: Invoking "yum" only once while using a loop via squash_actions is deprecated. Instead of using a loop to supply multiple items and specifying `name: "{{ item }}"`, please use `name: ['zlib-devel', 'pcre- devel', 'gcc']` and remove the loop. This feature will be removed in version 2.11. Deprecation warnings can be disabled by setting deprecation_warnings=False in ansible.cfg. ok: [host2] => (item=[u'zlib-devel', u'pcre-devel', u'gcc']) TASK [install : Copy Nginx Software] ******************************************************************************* ok: [host2] TASK [install : Uncompression Nginx Software] ********************************************************************** [WARNING]: Consider using the unarchive module rather than running 'tar'. If you need to use command because unarchive is insufficient you can add 'warn: false' to this command task or set 'command_warnings=False' in ansible.cfg to get rid of this message. changed: [host2] TASK [install Nginx] *********************************************************************************************** changed: [host2] TASK [install : Copy Nginx Start Script] *************************************************************************** ok: [host2] TASK [install : Copy Nginx Config] ********************************************************************************* ok: [host2] TASK [install : create nginx user] ********************************************************************************* ok: [host2] TASK [install : start nginx service] ******************************************************************************* changed: [host2] TASK [install : add boot start nginx service] ********************************************************************** changed: [host2] TASK [install : delete nginx compression files] ******************************************************************** [WARNING]: Consider using the file module with state=absent rather than running 'rm'. If you need to use command because file is insufficient you can add 'warn: false' to this command task or set 'command_warnings=False' in ansible.cfg to get rid of this message. changed: [host2] PLAY RECAP ********************************************************************************************************* host2 : ok=11 changed=5 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0 |

2.管理配置文件

生产环境中大多数时候需要管理配置文件的,安装软件包只是在初始化环境的时候用一下。下面给写一个管理nginx配置文件的playbook。

(1)实现

创建目录结构

|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| [root@server ~]# mkdir -p /etc/ansible/nginx_config/roles/{new,old}/{files,handlers,vars,tasks} [root@server ~]# tree /etc/ansible/nginx_config/ /etc/ansible/nginx_config/ └── roles ├── new │ ├── files │ ├── handlers │ ├── tasks │ └── vars └── old ├── files ├── handlers ├── tasks └── vars 11 directories, 0 files |

其中new为更新时用到的,old为回滚时用到的,files下面为nginx.conf和vhosts目录,handlers为重启nginx服务的命令

关于回滚,需要在执行playbook之前先备份一下旧的配置,所以对于老配置文件的管理一定要严格,千万不能随便去修改线上机器的配置,并且要保证new/files下面的配置和线上的配置一致。

|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| [root@server ~]# cd /usr/local/nginx/conf/ [root@server conf]# ls fastcgi.conf fastcgi_params.default mime.types nginx.conf.default uwsgi_params fastcgi.conf.default koi-utf mime.types.default scgi_params uwsgi_params.default fastcgi_params koi-win nginx.conf scgi_params.default win-utf [root@server conf]# cp nginx.conf ./vhosts [root@server conf]# cp -r nginx.conf vhosts /etc/ansible/nginx_config/roles/new/files/ |

定义变量

|-------------------------------------------------------------------------------------------------------------|
| [root@server conf]# cat /etc/ansible/nginx_config/roles/new/vars/main.yml nginx_basedir: /usr/local/nginx |

定义重新加载nginx服务

|------------------------------------------------------------------------------------------------------------------------------------|
| [root@server conf]# cat /etc/ansible/nginx_config/roles/new/handlers/main.yml - name: restart nginx shell: service nginx restart |

核心任务

|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| [root@server conf]# cat /etc/ansible/nginx_config/roles/new/tasks/main.yml - name: copy conf file copy: src={{ item.src }} dest={{ nginx_basedir }}/{{ item.dest }} backup=yes owner=root group=root mode=0644 with_items: - { src: nginx.conf, dest: conf/nginx.conf } - { src: vhosts, dest: conf/ } notify: restart nginx |

定义总入口配置

|-----------------------------------------------------------------------------------------------------------|
| [root@server conf]# cat /etc/ansible/nginx_config/update.yml --- - hosts: nginx user: root roles: - new |

执行

|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| [root@server conf]# cat /etc/ansible/nginx_config/update.yml --- - hosts: nginx user: root roles: - new [root@server conf]# ansible-playbook /etc/ansible/nginx_config/update.yml [WARNING]: Invalid characters were found in group names but not replaced, use -vvvv to see details PLAY [nginx] ******************************************************************************************************* TASK [Gathering Facts] ********************************************************************************************* ok: [host2] TASK [new : copy conf file] **************************************************************************************** changed: [host2] => (item={u'dest': u'conf/nginx.conf', u'src': u'nginx.conf'}) changed: [host2] => (item={u'dest': u'conf/', u'src': u'vhosts'}) RUNNING HANDLER [new : restart nginx] ****************************************************************************** [WARNING]: Consider using the service module rather than running 'service'. If you need to use command because service is insufficient you can add 'warn: false' to this command task or set 'command_warnings=False' in ansible.cfg to get rid of this message. changed: [host2] PLAY RECAP ********************************************************************************************************* host2 : ok=3 changed=2 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0 |

(2)验证结果

将80端口改为19端口执行剧本查看端口。

|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| [root@server conf]# cd /etc/ansible/nginx_config/roles/new/files/ [root@server files]# vi nginx.conf [root@server files]# vi nginx.conf [root@server files]# ansible-playbook /etc/ansible/nginx_config/update.yml [WARNING]: Invalid characters were found in group names but not replaced, use -vvvv to see details PLAY [nginx] ******************************************************************************************************* TASK [Gathering Facts] ********************************************************************************************* ok: [host2] TASK [new : copy conf file] **************************************************************************************** changed: [host2] => (item={u'dest': u'conf/nginx.conf', u'src': u'nginx.conf'}) ok: [host2] => (item={u'dest': u'conf/', u'src': u'vhosts'}) RUNNING HANDLER [new : restart nginx] ****************************************************************************** [WARNING]: Consider using the service module rather than running 'service'. If you need to use command because service is insufficient you can add 'warn: false' to this command task or set 'command_warnings=False' in ansible.cfg to get rid of this message. changed: [host2] PLAY RECAP ********************************************************************************************************* host2 : ok=3 changed=2 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0 [root@server files]# ansible all-server -m shell -a "ss -tunlp | grep nginx" [WARNING]: Invalid characters were found in group names but not replaced, use -vvvv to see details [WARNING]: Could not match supplied host pattern, ignoring: all-server [WARNING]: No hosts matched, nothing to do [root@server files]# ansible nginx -m shell -a "ss -tunlp | grep nginx" [WARNING]: Invalid characters were found in group names but not replaced, use -vvvv to see details host2 | CHANGED | rc=0 >> tcp LISTEN 0 128 *:19 *:* users:(("nginx",pid=6250,fd=6),("nginx",pid=6249,fd=6),("nginx",pid=6247,fd=6)) |

(3)回滚

回滚的backup.yml对应的roles为old

|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| [root@server files]# rsync -av /etc/ansible/nginx_config/roles/new/ /etc/ansible/nginx_config/roles/old/ sending incremental file list files/ files/nginx.conf files/vhosts handlers/ handlers/main.yml tasks/ tasks/main.yml vars/ vars/main.yml sent 4,706 bytes received 127 bytes 9,666.00 bytes/sec total size is 4,183 speedup is 0.87 |

回滚操作就是把旧的配置覆盖,然后重新加载nginx服务,每次改动nginx配置文件之前先备份到old里,对应目录为/etc/ansible/nginx_config/roles/old/files

定义总入口配置

|--------------------------------------------------------------------------------------------------------------|
| [root@server files]# cat /etc/ansible/nginx_config/rollback.yml --- - hosts: nginx user: root roles: - old |

(4)验证结果

把配置文件的端口改为80端口之后执行new剧本查看端口。

|-------------------------------------------------------------------------------------------------------------------|
| [root@server files]# vi nginx.conf [root@server files]# ansible-playbook /etc/ansible/nginx_config/update.yml |

|----------------------------------------------------------------------------|
| [root@server files]# ansible nginx -m shell -a "ss -tunlp | grep nginx" |

在执行old剧本文件在查看端口

|--------------------------------------------------------------------------------|
| [root@server files]# ansible-playbook /etc/ansible/nginx_config/rollback.yml |

|----------------------------------------------------------------------------|
| [root@server files]# ansible nginx -m shell -a "ss -tunlp | grep nginx" |

看到这了给个一键三连呗谢谢各位看官,可以一起交流学习

相关文章
ansible自动化运维(一)简介及清单,模块-CSDN博客
ansible自动化运维(二)playbook模式详解-CSDN博客
ansible自动化运维(三)jinja2模板&&roles角色管理-CSDN博客
相关推荐
Jinkxs1 小时前
LoadBalancer- 主流负载均衡工具盘点:Nginx / Haproxy / Keepalived 基础介绍
运维·nginx·负载均衡
CQU_JIAKE2 小时前
4.28~4.30【Q】
linux·运维·服务器
先知后行。2 小时前
Linux 设备模型和platform平台
linux·运维·服务器
掌心向暖RPA自动化2 小时前
如何获取网页某个元素在屏幕可见部分的中心坐标影刀RPA懒加载坐标定位技巧
java·javascript·自动化·rpa·影刀rpa
leaves falling3 小时前
Linux 基础指令完全指南 —— 从入门到熟练
linux·运维·服务器
charlie1145141914 小时前
嵌入式Linux驱动开发——新字符设备驱动 API 概览
linux·运维·驱动开发
架构源启5 小时前
OpenClaw 只能手动写脚本?我用 Chrome 插件实现了“录制即生成“
前端·人工智能·chrome·自动化
DFT计算杂谈5 小时前
VASP官方教程 TRIQS DFT+DMFT计算教程
运维·css·自动化·html·css3
2301_803554525 小时前
Linux里面的文件描述符和windows里面的句柄
linux·运维·服务器
IT摆渡者5 小时前
linux 系统安全检查
运维·网络·经验分享·笔记