王兴隆 - linux
type: channel
link: http://wangxinglong.com.cn/index.php/tag/linux
items: 在阿里云Centos上配置nginx+uwsgi+负载均衡配置
items: LINUX安装nginx
items: linux常见命令
items: linux四剑客
items: Linux用户组及权限管理
items: 命令别名
items: 权限管理
items: 文件管理
items: 用户和组管理
items: VIM

在阿里云Centos上配置nginx+uwsgi+负载均衡配置
type: item
date: 2021-08-03T11:41:51+08:00
description: 在阿里云Centos上配置nginx+uwsgi+负载均衡配置 ​ 负载均衡在服务端开发中算是一个比较重要的特性。因为Nginx除了作为常规的Web服务器外，还会被大规模的用于反向代理后端，Nginx的异步框架可以处理很大的并发请求，把这些并发请求hold住之后就可以分发给后台服务端(backend servers, 后面简称backend)来做复杂的计算、处理和响应，并且在业务量增加的时候可以方便地扩容后台服务器。 ​ 说白了就是，随着业务和用户规模的增长，仅仅一台服务器无法肩负起高并发的响应，所以需要两台以上的服务器共同分担压力，而分担压力的媒介就是万能的Nginx。 ​ ​ 首先，利用wsgi在不同的端口上起两个Django服务，比如8002和8003 ​ 然后修改nginx网站配置 vim /etc/nginx/conf.d/default.conf，将原uwsgi_pass注释，改成变量绑定 ​ server { listen 80; server_name localhost; access_log /root/myweb_access.log; error_log /root/myweb_error.log; client_max_body_size 75M; location / { include uwsgi_params; #uwsgi_pass 127.0.0.1:8000; uwsgi_pass mytest; uwsgi_param UWSGI_SCRIPT mypro.wsgi; uwsgi_param UWSGI_CHDIR /root/mypro; } location /static { alias /root/mypro/static; } } 然后修改主配置文件 vim /etc/nginx/nginx.conf，在http配置内添加负载均衡配置 http { include /etc/nginx/mime.types; default_type application/octet-stream; log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; access_log /var/log/nginx/access.log main; sendfile on; #tcp_nopush on; keepalive_timeout 65; #gzip on; include /etc/nginx/conf.d/*.conf; upstream mytest { server 127.0.0.1:8002; #负载均衡服务器群 server 127.0.0.1:8003; } } 然后重启服务即可： systemctl restart nginx.service 值得注意的是常用的负载均衡策略有以下几种： 1、轮询（默认） 每个请求按时间顺序逐一分配到不同的后端服务器，如果后端服务器down掉，能自动剔除。 upstream backserver { server 192.168.0.14; server 192.168.0.15; } 2、权重 weight 指定轮询几率，weight和访问比率成正比，用于后端服务器性能不均的情况。 upstream backserver { server 192.168.0.14 weight=3; server 192.168.0.15 weight=7; } 3、ip_hash（ IP绑定） 上述方式存在一个问题就是说，在负载均衡系统中，假如用户在某台服务器上登录了，那么该用户第二次请求的时候，因为我们是负载均衡系统，每次请求都会重新定位到服务器集群中的某一个，那么已经登录某一个服务器的用户再重新定位到另一个服务器，其登录信息将会丢失，这样显然是不妥的。 我们可以采用ip_hash指令解决这个问题，如果客户已经访问了某个服务器，当用户再次访问时，会将该请求通过哈希算法，自动定位到该服务器。 每个请求按访问ip的hash结果分配，这样每个访客固定访问一个后端服务器，可以解决session的问题。 upstream backserver { ip_hash; server 192.168.0.14:88; server 192.168.0.15:80; } 4、fair（第三方插件） 按后端服务器的响应时间来分配请求，响应时间短的优先分配。 upstream backserver { serv…

LINUX安装nginx
type: item
date: 2021-08-03T11:41:00+08:00
description: LINUX安装nginx详细步骤 1.安装依赖包 //一键安装上面四个依赖 yum -y install gcc zlib zlib-devel pcre-devel openssl openssl-devel 2.下载并解压安装包 //创建一个文件夹 cd /usr/local mkdir nginx cd nginx //下载tar包 wget http://nginx.org/download/nginx-1.13.7.tar.gz tar -xvf nginx-1.13.7.tar.g 3.安装nginx //进入nginx目录 cd /usr/local/nginx //执行命令 ./configure //执行make命令 make //执行make install命令 make install 4.配置nginx.conf # 打开配置文件 vi /usr/local/nginx/conf/nginx.conf 将端口号改成8089，因为可能apeache占用80端口，apeache端口尽量不要修改，我们选择修改nginx端口。 localhost修改为你服务器ip地址。 5.启动nginx /usr/local/nginx/sbin/nginx -s reload 查看nginx进程是否启动： ps -ef | grep nginx 6.若想使用外部主机连接上虚拟机访问端口192.168.131.2，需要关闭虚拟机的防火墙： centOS6及以前版本使用命令： systemctl stop iptables.service centOS7关闭防火墙命令： systemctl stop firewalld.service 随后访问该ip即可看到nginx界面。 7.访问服务器ip查看 安装完成一般常用命令 进入安装目录中， 命令： cd /usr/local/nginx/sbin 启动，关闭，重启，命令： ./nginx 启动 ./nginx -s stop 关闭 ./nginx -s reload 重启

linux常见命令
type: item
date: 2021-08-03T11:40:35+08:00
description: 系统信息 arch 显示机器的处理器架构 uname -m 显示机器的处理器架构 uname -r 显示正在使用的内核版本 dmidecode -q 显示硬件系统部件 - (SMBIOS / DMI) hdparm -i /dev/hda 罗列一个磁盘的架构特性 hdparm -tT /dev/sda 在磁盘上执行测试性读取操作 cat /proc/cpuinfo 显示CPU info的信息 cat /proc/interrupts 显示中断 cat /proc/meminfo 校验内存使用 cat /proc/swaps 显示哪些swap被使用 cat /proc/version 显示内核的版本 cat /proc/net/dev 显示网络适配器及统计 cat /proc/mounts 显示已加载的文件系统 lspci -tv 罗列 PCI 设备 lsusb -tv 显示 USB 设备 date 显示系统日期 cal 2007 显示2007年的日历表 date 041217002007.00 设置日期和时间 - 月日时分年.秒 clock -w 将时间修改保存到 BIOS 关机 (系统的关机、重启以及登出 ) shutdown -h now 关闭系统 init 0 关闭系统 telinit 0 关闭系统 shutdown -h hours:minutes & 按预定时间关闭系统 shutdown -c 取消按预定时间关闭系统 shutdown -r now 重启 reboot 重启 logout 注销 文件和目录 cd /home 进入 '/ home' 目录' cd .. 返回上一级目录 cd ../.. 返回上两级目录 cd 进入个人的主目录 cd ~user1 进入个人的主目录 cd - 返回上次所在的目录 pwd 显示工作路径 ls 查看目录中的文件 ls -F 查看目录中的文件 ls -l 显示文件和目录的详细资料 ls -a 显示隐藏文件 ls [0-9] 显示包含数字的文件名和目录名 tree 显示文件和目录由根目录开始的树形结构 lstree 显示文件和目录由根目录开始的树形结构 mkdir dir1 创建一个叫做 'dir1' 的目录' mkdir dir1 dir2 同时创建两个目录 mkdir -p /tmp/dir1/dir2 创建一个目录树 rm -f file1 删除一个叫做 'file1' 的文件' rmdir dir1 删除一个叫做 'dir1' 的目录' rm -rf dir1 删除一个叫做 'dir1' 的目录并同时删除其内容 rm -rf dir1 dir2 同时删除两个目录及它们的内容 mv dir1 new_dir 重命名/移动 一个目录 cp file1 file2 复制一个文件 cp dir/* . 复制一个目录下的所有文件到当前工作目录 cp -a /tmp/dir1 . 复制一个目录到当前工作目录 cp -a dir1 dir2 复制一个目录 cp -r dir1 dir2 复制一个目录及子目录 ln -s file1 lnk1 创建一个指向文件或目录的软链接 ln file1 lnk1 创建一个指向文件或目录的物理链接 touch -t 0712250000 file1 修改一个文件或目录的时间戳 - (YYMMDDhhmm) file file1 outputs the mime type of the file as text iconv -l 列出已知的编码 iconv -f fromEncoding -t toEncoding inputFile > outputFile creates a new from the given input file by assuming it is encoded in fromEncoding and converting it to toEncoding. find . -maxdepth 1 -name .jpg -print -exec convert "{}" -resize 80x60 "thumbs/{}" \; batch resize files in the current directory and send them to a thumbnails directory (requires convert from Imagemagick) 文件搜索 find / -name file1 从 '/' 开始进入根文件系统搜索文件和目录 find / -user user1 搜索属于用户 'user1' 的文件和目录 find /home/user1 -name *.bin 在目录 '/ home/user1'…

linux四剑客
type: item
date: 2021-08-03T11:39:59+08:00
description: Find 查询命令，就是find usage: find [-H | -L | -P] [-EXdsx] [-f path] path ... [expression] find [-H | -L | -P] [-EXdsx] -f path [path ...] [expression] 常用参数 -name file #查找名为file的文件； -type b/d/c/p/l/f #查是块设备、目录、字符设备、管道、符号链接、普通文件； -size n[c] #查长度为n块[或n字节]的文件； -perm #按执行权限来查找； -user username #按文件属主来查找； -group groupname #按组来查找； -mtime -n +n #按文件更改时间来查找文件，-n指n天以内，+n指n天以前； -atime -n +n #按文件访问时间来查找文件； -ctime -n +n #按文件创建时间来查找文件； -mmin -n +n #按文件更改时间来查找文件，-n指n分钟以内，+n指n分钟以前； -amin -n +n #按文件访问时间来查找文件； -cmin -n +n #按文件创建时间来查找文件； -nogroup #查无有效属组的文件； -nouser #查无有效属主的文件； -newer f1 !f2 #找文件，-n指n天以内，+n指n天以前； -depth #使查找在进入子目录前先行查找完本目录； -fstype #查更改时间比f1新但比f2旧的文件； -mount #查文件时不跨越文件系统mount点； -follow #如果遇到符号链接文件，就跟踪链接所指的文件； -cpio #查位于某一类型文件系统中的文件； -prune #忽略某个目录； -maxdepth #查找目录级别深度 -name find /home/ -name 'file' # 查询home目录下文件名为file的文件 find /home/ -name '[a-z]*' # 查找home目录下文件名以小写字母开头的文件 -type find /home/ -type d # 查找home目录下的目录 find /home/ ! -type d # 查找home目录下的非目录 find /home -type d | xargs chmod 755 -R # 查找home目录下的目录，并将这个目录里的文件的权限设置为755 -size find /home/ -size +1K # 查找home目录下文件大于1K的文件 find /home/ -size -1M # 查找home目录下文件小于1M的文件 find /home/ -size 10K # 查找home目录下文件等于10K的文件 -perm find /home/ -perm -775 # 减号代表的意思是 比当前775更充足的权限 所有1的部分必须被匹配 find /home/ -perm +001 # 加号代表的意思是 只要有权限位置符合查询条件即可 find /home/ -perm 644 # 查询 644的文件及目录 Grep Global search regular expression usage: grep [-abcDEFGHhIiJLlmnOoqRSsUVvwxZ] [-A num] [-B num] [-C[num]] [-e pattern] [-f file] [--binary-files=value] [--color=when] [--context[=num]] [--directories=action] [--label] [--line-buffered] [--null] [pattern] [file ...] 常用参数 -a # 以文本文件方式搜索； -c # 计算找到的符合行的次数； -i # 忽略大小写； -n # 顺便输出行号； -v # 反向选择，即显示不包含匹配文本的所有行； -h # 查询多文件时不显示文件名； -l # 查询多文件时只输出包含匹配字符的文件名； -s # 不显示不存在或无匹配文本的错误信息； -E # 允许使用egrep扩展模式匹配。 常用通配符 * # 0个或者多个字符、数字； ? # 匹配任意一个字符； # # 表示注解； | # 管道符号； ; # 多个命令连续执行； & # 后台运行指令； ! # 逻辑运算非； [] # 内容范围，匹配括号中内容； {} # 命令块，多个命令匹配 正则表达式 * # 前一个字符匹配0次或多次 + # 前面的正则表达式1次或多次 ? # 前面的正则表达式出现0次或多次 ^ # 匹配行首，即以某个字符开头； $ # 匹配行尾，即以某个字符结尾； \(…

Linux用户组及权限管理
type: item
date: 2021-08-03T11:39:23+08:00
description: Linux用户组及权限管理 用户和组 Linux是一个多用户的操作系统，引入用户，可以更加方便管理Linux服务器 系统默认需要以一个用户的身份登入，而且在系统上启动进程也需要以一个用户身份器运行，用户可以限制某些进程对特定资源的权限控制 Linux用户及组 Linux操作系统对多用户的管理，是非常繁琐的，所以用组的概念来管理用户就变得简单，每个用户可以在一个独立的组，每个组也可以有零个用户或者多个用户。 Linux系统用户是根据用户ID来识别的，默认ID长度为32位，从默认ID编号从0开始，但是为了和老式系统兼容，用户ID限制在60000以下，Linux用户分总共分为三种，分别如下 超级用户：root，ID为0 系统用户：ID从1到499 普通用户：ID为500以上 Linux系统中的每个文件或者文件夹，都有一个所属用户及所属组 使用id命令可以显示当前用户的信息，使用passwd命令可以修改当前用户密码。Linux操作系统用户的特点如下 每个用户拥有一个UserID，操作系统实际读取的是UID，而非用户名； 每个用户属于一个主组，属于一个或多个附属组，一个用户最多有31个附属组； 每个组拥有一个GroupID； 每个进程以一个用户身份运行，该用户可对进程拥有资源控制权限； 每个可登陆用户拥有一个指定的Shell环境 Linux用户管理 Linux用户在操作系统可以进行日常管理和维护，涉及到的相关配置文件如下 /etc/passwd：保存用户信息 /etc/shadow：保存用户密码（以加密形式保存） /etc/group：保存组信息 /etc/login.defs：用户属性限制，密码过期时间，密码最大长度等限制 /etc/default/useradd：显示或更改默认的useradd配置文件 创建新用户 useradd usertest # 创建用户usertest 创建新用户，可以使用命令useradd，执行命令即可创建新用户 同时会创建一个同名的组，默认该用户属于该用户组 创建用户，会根据如下步骤进行操作 在/etc/passwd文件中添加用户信息 如使用passwd命令创建密码，密码会被加密保存在/etc/shdaow中 为用户创建家目录：/home/usertest，创建目录操作应操作系统而异 将/etc/skel中的.bash开头的文件复制至用户家目录 创建与用户名相同的组，该用户默认属于这个同名组，组信息保存在/etc/group配置文件中 其他命令可选参数如下所示 -d # 指定新用户的主目录 -G # 指定新用户的组列表 -s # 新用户所使用的shell环境 useradd usertest -s /bin/bash -d /home/usertest # 创建新用户usertest，指定shell环境为bash，主目录在/home/usertest 删除用户 userdel # 保留用户的家目录 userdel –r usertest # 删除用户及用户家目录，用户login系统无法删除 userdel –rf usertest # 强制删除用户及该用户家目录，不论是否login系统 当一个用户创建之后，我们可以通过usermod命令来修改用户及组的属性 linux下命令选项 选项： -c, --comment 注释 GECOS 字段的新值 -d, --home HOME_DIR 用户的新主目录 -e, --expiredate EXPIRE_DATE 设定帐户过期的日期为 EXPIRE_DATE -f, --inactive INACTIVE 过期 INACTIVE 天数后，设定密码为失效状态 -g, --gid GROUP 强制使用 GROUP 为新主组 -G, --groups GROUPS 新的附加组列表 GROUPS -a, --append GROUP 将用户追加至上边 -G 中提到的附加组中， 并不从其它组中删除此用户 -h, --help 显示此帮助信息并推出 -l, --login LOGIN 新的登录名称 -L, --lock 锁定用户帐号 -m, --move-home 将家目录内容移至新位置 (仅于 -d 一起使用) -o, --non-unique 允许使用重复的(非唯一的) UID -p, --password PASSWORD 将加密过的密码 (PASSWORD) 设为新密码 -R, --root CHROOT_DIR chroot 到的目录 -s, --shell SHELL 该用户帐号的新登录 shell -u, --uid UID 用户帐号的新 UID -U, --unlock 解锁用户帐号 -Z, --selinux-user SEUSER 用户账户的新 SELin…

命令别名
type: item
date: 2021-08-03T11:34:55+08:00
description: 命令别名（alias） alias 查看当前系统所有别名 alias v0='vi /etc/sysconfig/network-scripts/ifcfg-eth0' 设置别名（仅对当前shell进程有效） 如果需要别名永久生效，需要修改配置文件、 1、仅对当前用户有效 修改~/.bashrc 2、对所有用户有效 修改/etc/bashrc 使配置文件生效 source 配置文件 . 配置文件 撤销别名 unalias 撤销所有 unalias 别名 撤销对应的别名 \ 不执行别名 如果别名同原命令名称，希望使用原命令而不是用别名可以使用\ \ls

权限管理
type: item
date: 2021-08-03T11:34:33+08:00
description: 权限管理 权限管理 文件的权限主要针对三类对象进行定义： owner：属主,u group：属组,g other：其他,o 每个文件针对每类访问者都定义了三种权限 r:Readable w:Writeable x:eXcuteable 文件 r：可使用文件查看类工具查看文件 w：可修改文件内容 x：可以将文件启动为一个进程 目录 r：可以使用ls查看此目录文件列表 w：可以在此目录中创建文件，也可以删除此目录中的文件 x：可以进入此目录 --- 000 0 --x 001 1 -w- 010 2 -wx 011 3 r-- 100 4 r-x 101 5 rw- 110 6 rwx 111 7 例如： rwxr-xr-x 可以表示为755 修改文件权限： chmod 755 文件名 -R 递归修改文件权限，一般用于目录 chmod [模式] 文件名 u 属主 g 属组 o其他 a 所有 u= ug= ugo= u=,g= a= 示例： chmod u=rwx 1.txt chmod ug=rw- 1.txt chmod ug=rw 1.txt chmod g= 1.txt chmod u=rwx,g=rw 1.txt chmod a=rwx 1.txt 增加对应的权限 u+ g+ a+ ug+ u+,g+ 示例： chmod u+w 1.txt chmod a+rx 1.txt 减去对应的权限 u- g- a- ug- u-,g- chmod --reference=参考文件 修改文件 chmod --reference=2.txt 1.txt 参考2.txt的文件权限修改1.txt的文件权限 修改文件的属主和属组： 仅root可用 修改文件的属主：chown chown 属主[:属组] 文件名 chown group1 文件名 修改文件属主为group1 chown group1:group2 文件名 修改文件属主为group1，属组为group2 chown :group2 文件名 修改文件属组为group2 :可以使用.替代 -R 递归 chown -R group1:group2 文件名 修改文件的属组 chgrp -R 递归 文件和文件夹默认权限的确定 文件或目录创建时的遮罩码：umask FILE：666-umask 如果某类用户减去的结果权限存在执行权限，则加1 DIR:777-umask umask 查看 umask 数字 设置umask umask 3 umask 4 umask 114 umask 224

文件管理
type: item
date: 2021-08-03T11:34:13+08:00
description: 文件管理 cp 用法：cp [选项]... [-T] 源文件 目标文件 或：cp [选项]... 源文件... 目录 或：cp [选项]... -t 目录 源文件... 将源文件复制至目标文件，或将多个源文件复制至目标目录。 cp 源文件 目标文件 如果目标不存在，新建目标文件，将源文件中的内容填充至目标文件。 如果目标存在，将源文件中的内容覆盖目标文件 cp 源文件 目录 将源文件复制到目录，保留原名 cp 源文件... 目录 此写法用于复制多个文件到指定目录，目录必须存在，否则会报错。 cp -r 源目录 目标目录 cp不能直接复制目录，所以需要专用选项-r 常用选项 -i 交互式，目标文件存在时提示是否覆盖。 -r 递归复制 -f 强制，不交互 -a 或者 -dR 归档复制，保留文件的属性 (保留符号链接的指向) cp /etc/system-release system-release 无法完整复制链接文件 cp -a /etc/system-release system-release 使用-a选项才能完整复制文件，但是链接的指向如果没有复制过来，链接也是无效的。 cp /etc/centos-release centos-release 将链接内容也复制过来，链接正常 mv 用法：mv [选项]... [-T] 源文件 目标文件 或：mv [选项]... 源文件... 目录 或：mv [选项]... -t 目录 源文件... 将源文件重命名为目标文件，或将源文件移动至指定目录。 移动文件 使用方法类似于copy 如果目标文件存在，覆盖文件 如果目标文件是个目录，移动到指定目录 如果源文件是多个，目标目录必须存在 -i 交互式 -f 强制 rm rm [OPTION]... FILE... -r 递归 -f 强制 -i 交互式（root用户默认使用i） rm -rf / 此命令默认无法执行 如果需要删除整个文件系统 --no-preserve-root 退出安全选项 ！！！！！！了解即可

用户和组管理
type: item
date: 2021-08-03T11:33:51+08:00
description: 用户和组管理 用户和组管理 token 只有密码，没有用户名 （令牌） identity(username,password) 根据用户分配资源 资源分配的三种形式 Authentication:认证 Authorization:授权 Accounting:审计 Linux用户 username/UID 管理员:root 0 普通用户:除了root以外的其他用户 1-65535 系统用户: 1-499 为守护进程获取资源进行权限分配 登录用户: 500+ 交互式登录使用 Linux用户组 groupname/GID 管理员组:root 0 普通组： 系统组: 1-499 普通组（登录用户组）:500+ Linux安全上下文: 运行中的程序：进程（process） Linux中的进程通常以进程发起者的身份运行。 进程能够访问的所有资源权限取决于发起者的身份。 Linux组的类别： 用户的基本组（主组）： 组名同用户名，且仅包含一个用户：私有组 创建用户时如果不指定组名，通常会给用户创建私有组 用户的附加组（额外组）： Linux用户和组相关的配置文件： /etc/passwd:用户及其属性信息（名称、UID、基本ID等） /etc/group:组及其属性信息 /etc/shadow:用户密码及其相关属性 /etc/gshadow:组密码及其相关属性（一般用于用户组切换） man 5 passwd 查看 /etc/passwd 文件格式 account:password:UID:GID:GECOS:directory:shell 用户名:密码:UID:GID:用户完整信息:用户主目录:默认shell man group 查看/etc/group 文件格式 group_name:passwd:GID:user_list 组名:密码:GID:以当前组为附加组的用户列表（如果有多个，使用逗号分割） /etc/shadow 文件格式 用户名：密码密文:最近一次更改密码的日期:密码的最小使用期限:最大密码年龄:密码警告时间段:密码禁用期:账号过期日期:保留字段 加密机制： 加密:明文->密文 解密:密文->明文 单向加密：提取数据指纹 md5:message digest，128位加密 md5sum 文件 sha1：secure hash algorithm，160位加密 sha1sum sha224sum sha256sum sha384sum sha512sum 文件 雪崩效应：初始条件的微小改变，将会引起结果的巨大改变 定长输出： root:$6$1.500R6jenhcppjX$4VDU2SHTciy6Nlb96cToGEk6Ae88rbFUbony99/YQqUxjekr7lOnXDHHvQsF..gHVXYLcVXp/qAknEVhjpuyJ1:17771:0:99999:7::: 6指代加密程序为sha512sum 1.500R6jenhcppjX指代加密杂质 密码的复杂性策略： 1、使用数字，大小写字母，特殊字符至少3中 2、足够长 3、使用随机密码 4、定期更换，不要使用最近使用过的密码 用户和组相关的管理命令 useradd user1 创建用户user1 tail -1 /etc/passwd 查看用户信息 tail -1 /etc/group 查看用户组信息 tail -l /etc/shadow 查看用户密码信息 （没有密码 ！用户禁用状态） -u 指定uid [UID_MIN,UID_MAX],定义在/etc/login.defs -g 指定用户的基本组 （可以指定组名，也可以指定gid） -c 指定用户全名（用户的注释信息） -d 指定用户的家目录（不要指定已经存在的路径，否则会提示警告信息，也容易出现错误） -s 指明用户默认shell 可用列表在/etc/shells文件中 -G 指明用户所属的附加组，可以有n个，使用逗号隔开（组必须实现存在） -D 修改useradd的默认选项 -s 设定默认shell id 用户名 显示指定用户的用户和组信息 -u 显示 uid -g 显示gid -G 显示附加组 -n 显示用户名字 su 切换用户或以其他用户身份执行命令 su 用户名 非登陆式切换 不会读取目标用户的配置文件 su - 用户名 登录式切换 会读取目标用户的配置文件 我们可以在两种切换模式后分别输出 $PATH环境变量来进行验证 -c 换个身份执行命令 例如 su root -c ls -l 相当于- 登录式切换 groupadd 组名 创建用户组 -g 指定gid [GID_MIN,GID_MAX] -r 创建系统组 usermod 用户属性修改 -u uid -g gid -G 新附加组，使用逗号分…

VIM
type: item
date: 2021-08-03T11:32:56+08:00
description: VIM编辑器 vi : visual interface,文本编辑器 文本：ASCII，Unicode 文本编辑器种类： 行编辑器：sed 全屏编辑器：nano，vi VIM： vi improved 模式化的编辑： 基本模式： 编辑模式，命令模式 输入模式，插入模式 末行模式：内置的命令行接口 打开文件： vim [选项][文件] vi +5 文件名 打开文件，光标位于文件的第五行行首。 vi +/内容 文件名 打开文件，光标位于第一个匹配到的内容的第一行行首。 模式转换： 编辑模式->输入模式，插入模式 i:insert ，在光标所在处插入 a:append ，在光标所在处后面插入 o:在当前光标所在行的下一行打开一个新行。 I：在当前光标所在行的行首输入。 A：在当前光标所在行的行尾输入。 O：在当前光标所在行的上方打开一个新行。 输入模式->编辑模式 ESC 编辑模式->末行模式 ： 末行模式->编辑模式 ESC 关闭文件： :q 退出 如果文件编辑过，无法使用:q退出。 :q! 强制退出，丢弃作出的修改 :wq 保存退出 :x 保存退出 :w 保存路径 【另存为】 光标跳转： 字符间跳转 h,j,k,l 左 下 上 右 使用数字接命令可以跳转对应数量。 3h 左移3 4j 下移4 单词间跳转 w 跳转到下一个单词的首字母 b 跳转到当前或者上一个单词的首字母 e 跳转到当前或者下一个单词的最后一个字母 使用数字接命令可以指定跳转的单词数 3w 跳转到后3个单词的首字母 4b 跳转到前面3个或者4个单词的首字母 行首行尾跳转 ^:跳转至行首的第一个非空白字符 0:跳转至行首 $:跳转至行尾 行间移动 数字G 移动到数字对应的行 3G 移动到第3行 G 跳转到最后一行 1G 或者 gg 跳转到第一行 句间移动 ) 跳转到下一个句子 ( 跳转到前一个句子 } 跳转到下一个段落 { 跳转到上一个段落 vim的编辑命令 字符编辑： x:删除光标处的单个字符 数字x:删除光标之后的数字个字符 6x 删除光标之后的6个字符 xp：交换光标所在字符与其后字符两个字符的位置 删除命令 d:删除命令，可结合光标跳转字符，实现范围删除。 d$:z删除光标到行尾 dG:删除光标到文件结尾 d0:从行首删除到光标所在位置 dd: 删除光标所在的行 数字dd：删除包括光标所在行一共数字行、 3dd 删除3行 粘贴命令（paste） 粘贴的内容来自于删除或者复制命令的缓冲区内容。 p:缓冲区中如果存储的为整行(dd)，则粘贴至当前光标所在行的下方，否则粘贴至当前光标所在行。 P:如果缓冲区中为整行(dd)，则粘贴至当前光标所在行的上方，否则粘贴至当前光标前面。 复制命令（yank） y:复制，工作行为类似于d命令 y$ y0 y^ ye yw yb 数字y yy 数字yy 改变命令(change) c:修改 编辑模式->输入模式 c$ 将当前光标到行尾的内容删除，并且进入编辑模式 cgg 将光标之前的所有内容删除，并且进入编辑模式 其他跳转命令也可以结合使用 cc 删除当前行，并且进入编辑模式 替换命令（replace） r:替换光标处所在字符 r替换的字符 替换单个字符 数字r替换的字符 替换数字个字符，当前行字符不够，不能替换 其他编辑操作： 可视化模式（visual） v:逐个字符选定 V:整行整行的选定 撤销此前的编辑（undo） u 撤销此前的撤销 Ctrl+R 重复前一个编辑操作 . 翻屏操作 Ctrl+f 向文件尾部翻一屏 Ctrl+b 向文件首部翻一屏 Ctrl+d 向文件尾部翻半屏 Ctrl+u 向文件首部翻半屏 vimtutor 查看vim的内置教程 末行模式 内建的命令行接口 (1)支持地址定界机制 :开始位置,结束位置 :2 定位到第2行 :2,100 从第2到100行 :2,100d 删除2到100行 :2,+100 从第二行开始，到后面的100行 :2,+100d 从第2行开始，向后删除100行 . 当前行 $ 最后一行 % 全文，相当于1,$ 使用方式 后跟一个编辑命令或者保存命令 :1,15w ~/store.txt 将文件的1到15行保存到home目录下的store.txt下 :10r ~/store.txt 在文件的第10行插入home目录下的store.txt的所有内容 (2)支持查找 /test 从当前光标所在处向文件尾部查找test字符串 ?test 从当前光标所在处向文件首部查找test字符串 使用n 移动到下一个匹配位置 使用N 移动到上一个匹配位置 (3)查找并替换 s: 在末行模式下完成查找替换操作 %s/aaa/123 全文搜索aaa替换为123 其中/可以替换为其他字符（在替换内容中没有出现的…