liunxzzl
我们先不说怎么写脚本,因为写shell脚本很灵活,只要懂了用touch命令创建日期文件或者使用mkdir创建日期文件夹就行
mkdir `date +%Y%m%d` 生成一个年月日格式的文件夹
mkdir `date +%Y-%m-%d` 生成一个年-月-日格式的文件夹
touch `date +%Y%m%d` 生成一个年月日格式的文件
touch `date +%Y-%m-%d` 生成一个年-月-日格式的文件
如果想生成的文件或者文件夹更细化一下的话,
利用date命令来获取时间,
用到以下几个选项
%Y表示年
%m表示月
%d表示日
%H表示小时
%M表示分钟
%S表示秒
%N表示纳秒
查看liunx系统基本信息
halt powerof 关机:
/boot:引导文件存放目录,内核文件(vmlinuz)、引导加载器(bootloader, grub)都存放于此目录 /bin:所有用户使用的基本命令;不能关联至独立分区,OS启动即会用到的程序 /sbin:管理类的基本命令;不能关联至独立分区,OS启动即会用到的程序 /lib:启动时程序依赖的基本共享库文件以及内核模块文件(/lib/modules) /lib64:专用于x86_64系统上的辅助共享库文件存放位置 /etc:配置文件目录 /home/USERNAME:普通用户家目录 /root:管理员的家目录 /media:便携式移动设备挂载点 /mnt:临时文件系统挂载点 /dev:设备文件及特殊文件存储位置 b: block device,随机访问 c: character device,线性访问 /opt:第三方应用程序的安装位置 /srv:系统上运行的服务用到的数据 /tmp:临时文件存储位置 /usr: universal shared, read-only data bin: 保证系统拥有完整功能而提供的应用程序 sbin: lib:32位使用 lib64:只存在64位系统 include: C程序的头文件(header files) share:结构化独立的数据,例如doc, man等 local:第三方应用程序的安装位置 bin, sbin, lib, lib64, etc, share /var: variable data files cache: 应用程序缓存数据目录 lib: 应用程序状态信息数据 local:专用于为/usr/local下的应用程序存储可变数据 lock: 锁文件 log: 日志目录及文件 opt: 专用于为/opt下的应用程序存储可变数据 run: 运行中的进程相关数据,通常用于存储进程pid文件 spool: 应用程序数据池 tmp: 保存系统两次重启之间产生的临时数据 /proc: 用于输出内核与进程信息相关的虚拟文件系统 /sys:用于输出当前系统上硬件设备相关信息虚拟文件系统 /selinux: security enhanced Linux,selinux相关的安全策略等信息的存储位置
lscpu cpu查看 free -h 内存查看 lsblk 硬盘查看
ll /etc/localtime 时区:
init 3 关闭可视化窗口 init 6 重启 reboot 重启
host name -i 查看 ip ip addr show 查看网卡
uname -r 查看内核
cat /etc/redhat-release 查看操作系统
cat /root/.bashrc 别名修改
cat /etc/profile 环境变量 gedit /etc/profile
cat /etc/selinux/config seliux SELINUX=disabled 禁用 SELINUX=enforcing 执行 关闭SELinux的两种方法
cat /etc/sysconfig/network-scripts/ifcfg-eth0 ifcfg-ens33 网卡设置 ifcfg-ens33
硬盘分区
硬盘分区 分区1 / 100G 分区2 /data 50G 存数据 例如数据库数据 分区3 swap 内存的2倍 内存大于8g就和内存值一样 分区4 /boot 存放内核 一般 1G
软件启动
systemctl status httpd systemctl stop httpd systemctl start httpd systemctl enable httpd systemctl disable httpd 在不改变状态的条件下重新加载防火墙 firewall-cmd --reload yum install firewalld systemd -y systemctl status firewalld systemctl start firewalld.service systemctl stop firewalld.service systemctl enable firewalld.service systemctl disable firewalld.service firewall-cmd --reload netstat -anp firewall-cmd --query-port=8080/tcp ps -ef | grep tomcat 查看挂载状态
service network restartdf -h 重新挂载系统分区 -o mount -a cd /etc/yum.repos.d/
tty 查看当前的终端设备
echo ${SHELL} 显示当前使用的shell
cat /etc/shells 显示当前使用的shell
#hostname bj-yz-k8s-node1-100-10.magedu.com 设置主机名
# 管理员 $ 普通用户
]#echo $PS1 显示提示符格式 \[\e[1;35m\][\u@\h \W]\$\[\e[0m\]
PS1="\[\e[1;5;41;33m\][\u@\h \W]\\$\[\e[0m\]" 修改提示符格式范例 提示符格式说明: \e 控制符\033 \u 当前用户 \h 主机名简称 \H 主机名 \w 当前工作目录 \W 当前工作目录基名 \t 24小时时间格式 \T 12小时时间格式 ! 命令历史数 # 开机后命令历史数
PS1=PS1="\[\e[1;32m\][\t \[\e[1;33m\]\u\[\e[35m\]@\h\[\e[1;31m\] \W\
[\e[1;32m\]]\[\e[0m\]\\$"
shell中可执行的两类命令 内部命令:由shell自带的,而且通过某命令形式提供 外部命令:在文件系统路径下有对应的可执行程序文件
type COMMAND type -a echo 范例: 查看是否存在对应内部和外部命令
help 内部命令列表 enable 管理内部命令 enable cmd 启用内部命令 enable –n cmd 禁用内部命令 enable –n 查看所有禁用的内部命令
alias NAME='VALUE'
echo "alias free='free -h'" >> /root/.bashrc
仅对当前用户:~/.bashrc
对所有用户有效:bashrc
\ALIASNAME
source /path/to/confi 编辑配置给出的新配置不会立即生效,bash进程重新读取配置文件
id -u wang
whoami: 显示当前登录有效用户 who: 系统当前所有的登录会话 w: 系统当前所有的登录会话及所做的操作 用户登录信息查看命令
#yum -y install screen 利用screen 可以实现会话管理,如:新建会话,共享会话等
yum install tmux Tmux 是一个终端复用器(terminal multiplexer),类似 screen,但是更易用,也更强大
echo [-neE][字符串] echo 命令可以将后面跟的字符进行输出 功能:显示字符,echo会将输入的字符串送往标准输出。输出 的字符串间以空白字符隔开, 并在最后加上换行号 语法:
选项: -E (默认)不支持 \ 解释功能 -n 不自动换行 -e 启用 \ 字符的解释功能
显示变量 启用命令选项-e,若字符串中出现以下字符,则特别加以处理,而不会将它当成一般文字输出 \a 发出警告声 \b 退格键 \c 最后不加上换行符号 \e escape,相当于\033 \n 换行且光标移至行首 \r 回车,即光标移至行首,但不换行 \t 插入tab \ 插入\字符 \0nnn 插入nnn(八进制)所代表的ASCII字符 \xHH插入HH(十六进制)所代表的ASCII数字(man 7 ascii)
echo -e '\033[43;31;5mmagedu\e[0m'
echo "This system's name is $(hostname) "
echo "i am `whoami` "
把一个命令的输出打印给另一个命令的参数 范例:. $(CMD) 或 `CMD`
echo file{1,3,5} 2 括号扩展:{ } {} 可以实现打印重复字符串的简化形式
history 命令行历史 -c: 清空命令历史 -d offset: 删除历史中指定的第offset个命令 n: 显示最近的n条历史 -a: 追加本次会话新执行的命令历史列表至历史文件 echo file{1,3,5} 结果为:file1 file3 file5 rm -f file{1,3,5} echo {1..10} echo {a..z} echo {000..20..2} history [-c] [-d offset] [n] history -anrw [filename] history -ps arg [arg...] -r: 读历史文件附加到历史列表 -w: 保存历史列表到指定的历史文件 -n: 读历史文件中未读过的行到历史列表 -p: 展开历史参数成多行,但不存在历史列表中 -s: 展开历史参数成一行,附加在历史列表后
持久保存变量 以上变量可以 export 变量名="值" 形式存放在 /etc/profile 或 ~/.bash_profile
PATH=$PATH:$HOME/bin export PATH export HISTCONTROL=ignoreboth export HISTTIMEFORMAT="%
调用命令行历史 #重复前一个命令方法 重复前一个命令使用上方向键,并回车执行 按 !! 并回车执行 输入 !-1 并回车执行 按 Ctrl+p 并回车执行 !:0 执行前一条命令(去除参数)
1.13 bash的快捷键 Ctrl + l 清屏,相当于clear命令 Ctrl + o 执行当前命令,并重新显示本命令 Ctrl + s 阻止屏幕输出,锁定 Ctrl + q 允许屏幕输出 Ctrl + c 终止命令 Ctrl + z 挂起命令 Ctrl + a 光标移到命令行首,相当于Home Ctrl + e 光标移到命令行尾,相当于End Ctrl + f 光标向右移动一个字符 Ctrl + b 光标向左移动一个字符 Alt + f 光标向右移动一个单词尾 Alt + b 光标向左移动一个单词首 Ctrl + xx 光标在命令行首和光标之间 移动 Ctrl + u 从光标处删除至命令行首 Ctrl + k 从光标处删除至命令行尾 Alt + r 删除当前整行 Ctrl + w 从光标处向左删除至单词首 Alt + d 从光标处向右删除至单词尾 Ctrl + d 删除光标处的一个字符 Ctrl + h 删除光标前的一个字符 Ctrl + y 将删除的字符粘贴至光标后 Alt + c 从光标处开始向右更改为首字母大写 的单词 Alt + u 从光标处开始,将右边一个单词更改为大写 Alt + l 从光标处开始,将右边一个单词更改 为小写 Ctrl + t 交换光标处和之前的字符位置 Alt + t 交换光标处和之前的单词位置 Alt + # 提示输入指 定字符后,重复显示该字符#次 注意:Alt组合快捷键经常和其它软件冲突
man命令 man 提供命令帮助的文件,手册页存放在/usr/share/man 几乎每个命令都有man的“页面” 中文man需安装包man-pages-zh-CN man页面分组为不同的“章节”,统称为Linux手册,man 1 man 1:用户命令 2:系统调用 3:C库调用 4:设备文件及特殊文件 5:配置文件格式 6:游戏 7:杂项 8:管理类的命令 9:Linux 内核API man命令的配置文件:
2.6 Linux 安装提供的本地文档获取帮助 Applications -> documentation->help(centos7) System->help(centos6) 2.7 命令自身提供的官方使用指南 /usr/share/doc目录 多数安装了的软件包的子目录,包括了这些软件的相关原理说明 常见文档:README INSTALL CHANGES 不适合其它地方的文档的位置 配置文件范例 HTML/PDF/PS 格式的文档 授权书详情 2.8 系统及第三方应用官方文档 2.8.1通过在线文档获取帮助 http://httpd.apache.org http://www.nginx.org https://mariadb.com/kb/en https://dev.mysql.com/ doc/ http://tomcat.apache.org http://www.python.org 2.8.2 红帽知识库和官方在线文档 通过发行版官方的文档光盘或网站可以获得安装指南、部署指南、虚拟化指南等 http://kbase.redhat.com http://www.redhat.com/docs http://access.redhat.com https://help.ub untu.com/lts/serverguide/index.html 2.8.3 红帽全球技术支持服务 rhn.redhat.com或者本地卫星服务器/代理服务器 RHN账户为及其注册和基于网络管理的RHN用户 sosreport 收集所有系统上的日志信息的工具,并自动打成压缩包,方便技术支持人员和红帽全球支持 提供分析问题依据 2.9 网站和搜索 http://tldp.org http://www.slideshare.net http://www.google.com Openstack filetype:pdf rhca site:redhat.com/docs
CentOS 7 以后版本目录结构变化 /bin 和 /usr/bin /sbin 和 /usr/sbin /lib 和/usr/lib /lib64 和 /usr/lib64
1.3 应用程序的组成部分 二进制程序:/bin, /sbin, /usr/bin, /usr/sbin, /usr/local/bin, /usr/local/sbin 库文件:/lib, /lib64, /usr/lib, /usr/lib64, /usr/local/lib, /usr/local/lib64 配置文件:/etc, /etc/DIRECTORY, /usr/local/etc 帮助文件:/usr/share/man, /usr/share/doc, /usr/local/share/man, /usr/local/share/doc
1.4 Linux下的文件类型 - 普通文件 d 目录文件 b 块设备 c 字符设备 l 符号链接文件 p 管道文件pipe s 套接字文件socket
ls -l /run/
基名:basename,只取文件名而不要路径 目录名:dirname,只取路径,不要文件名
切换至父目录: cd .. 切换至当前用户主目录: cd 切换至以前的工作目录: cd -
命令 cd : change directory 改变目录 选项:-P 切换至物理路径,而非软链接目录
相关的环境变量: PWD:当前目录路径 OLDPWD:上一次目录路径
ls 命令可以列出当前目录的内容或指定目录 -a 包含隐藏文件 -l 显示额外的信息 -R 目录递归 -ld 目录和符号链接信息 -1 文件分行显示 -S 按从大到小排序 -t 按mtime排序 -u 配合-t选项,显示并按atime从新到旧排序 -U 按目录存放顺序显示 -X 按文件后缀排序
查看文件状态 stat 文件相关信息:metadata, data 每个文件有三个时间戳: access time 访问时间,atime,读取文件内容 modify time 修改时间,mtime,改变文件内容(数据) change time 改变时间,ctime,元数据发生改变
file [options] <filenam 文件可以包含多种类型的数据,使用file命令检查文件的类型,然后确定适当的打开命令或应用程序使 用 -b 列出文件辨识结果时,不显示文件名称 -f filelist 列出文件filelist中文件名的文件类型 -F 使用指定分隔符号替换输出文件名后默认的”:”分隔符 -L 查看对应软链接对应文件的文件类型 ls [options] [files_or_dirs] [root@centos8 ~]#stat /etc/passwd File: /etc/passwd Size: 1306 Blocks: 8 IO Block: 4096 regular file Device: 802h/2050d Inode: 134792556 Links: 1 Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root) Access: 2019-12-09 20:37:12.830991350 +0800 Modify: 2019-12-09 20:37:12.826991351 +0800 Change: 2019-12-09 20:37:12.826991351 +0800 Birth: - file [options] <filename>... --help 显示命令在线帮助 确定文件内容
#显示编码列表 [15:34:50 root@centos8 ~]#iconv -l #将windows10上文本默认的编码转换成UTF-8 [15:34:50 root@centos8 ~]#iconv -f gb2312 win.txt -o win2.txt [15:34:50 root@centos8 ~]#file linux.txt linux.txt: ASCII text [15:34:31 root@centos8 ~]#file windows.txt windows.txt: ASCII text, with CRLF line terminators #将windows的文本格式转换成Linux的文本格式 [15:35:26 root@centos8 ~]#dos2unix windows.txt dos2unix: converting file windows.txt to Unix format... [15:36:00 root@centos8 ~]#file windows.txt windows.txt: ASCII text #将Linux的文本格式转换成windows的文本格式 [15:36:02 root@centos8 ~]#unix2dos windows.txt unix2dos: converting file windows.txt to DOS format... [15:36:10 root@centos8 ~]#file windows.txt windows.txt: ASCII text, with CRLF line terminators [15:33:05 root@centos8 ~]#cat list.txt /etc/ /bin /etc/issue [15:34:28 root@centos8 ~]#file -f list.txt /etc/: directory /bin: symbolic link to usr/bin /etc/issue: ASCII text
文件通配符模式 wildcard pattern
touch命令可以用来创建空文件或刷新文件的时间
选项说明: -a 仅改变 atime和ctime -m 仅改变 mtime和ctime -t [[CC]YY]MMDDhhmm[.ss] 指定atime和mtime的时间戳 -c 如果文件不存在,则不予创建
#touch `date -d "-1 day" +%F_%T`.log
#touch $(date -d "1 year" +%F_%T).log
ls 2019-12-12_16:11:48.log 2020-12-1
复制文件和目录
常用选项 -i 覆盖前提示 -n 不覆盖,注意两者顺序 -r, -R 递归复制目录及内部的所有内容 -a 归档,相当于-dR --preserv=all -d --no-dereference --preserv=links 不复制原文件,只复制链接名 --preserv[=ATTR_LIST] mode: 权限 ownership: 属主属组 timestamp: links xattr context all -p 等同--preserv=mode,ownership,timestamp -v --verbose -f --force -u --update 只复制源比目标更新文件或目标不存在的文件 -b 目标存在,覆盖前先备份,形式为 filename~ --backup=numbered 目标存在,覆盖前先备份加数字后缀
cp -av /etc/ /data/backup`date +%F`
cp -a /root /data/rootdir
移动和重命名文件
常用选项: -i 交互式 -f 强制 -b 目标存在,覆盖前先备份 利用rename 可以批量修改文件名 #为所有的conf文件加上.bak后缀: rename 'conf' 'conf.bak' f* #去掉所有的bak后缀: rename '.bak' '' *.bak
1 删除文件 / 范例: 范例:删除特殊文件 rm虽然删除了文件,但是被删除的文件仍然可能被恢复,在安全要求较高的场景下,可以使用shred安 全删除文件 格式 常见选项: -z 最后一次覆盖添加0,以隐藏覆盖操作 -v 能够显示操作进度 -u 覆盖后截断并删除文件 -n # 指定覆盖文件内容的次数(默认值是3次) 范例: #为所有的conf文件加上.bak后缀: rename 'conf' 'conf.bak' f* #去掉所有的bak后缀: rename '.bak' '' *.bak rm rm -rf /* #将名为 “/data/-f” 的文件删除 rm -f -f 此方式错误 rm -- -f rm ./-f rm /data/-f rm虽然删除了文件,但是被删除的文件仍然可能被恢复,在安全要求较高的场景下,可以使用shred安 全删除文件
shred [OPTION]... FILE...
常见选项: -z 最后一次覆盖添加0,以隐藏覆盖操作 -v 能够显示操作进度 -u 覆盖后截断并删除文件 -n # 指定覆盖文件内容的次数(默认值是3次)
[root@centos8 ~]#shred -zvun 5 passwords.txt shred: passwords.txt: pass 1/6 (random)... shred: passwords.txt: pass 2/6 (000000)... shred: passwords.txt: pass 3/6 (random)... shred: passwords.txt: pass 4/6 (ffffff)... shred: passwords.txt: pass 5/6 (random)...
tree
常见选项: -d: 只显示目录 -L level:指定显示的层级数目 -P pattern: 只显示由指定wild-card pattern匹配到的路径 2.12.2 创建目录mkdir 常见选项: -p: 存在于不报错,且可自动创建所需的各目录 -v: 显示详细信息 -m MODE: 创建目录时直接指定权限 2.11.3 删除空目录rmdir 常见选项: -p 递归删除父空目录 -v 显示详细信息 注意:rmdir只能删除空目录,如果想删除非空目录,可以使用rm -r 命令,递归删除目录树
alias rm='DIR=/data/backup`date +%F%T`;mkdir $DIR;mv -t $DIR'
mv和inode 如果mv命令的目标和源在相同的文件系统,作为mv 命令 用新的文件名创建对应新的目录项 删除旧目录条目对应的旧的文件名 不影响inode表(除时间戳)或磁盘上的数据位置:没有数据被移动! 如果目标和源在一个不同的文件系统, mv相当于cp和rm
#df -i /boot
2.1标准输出和错误重新定向
&> 覆盖重定向&>> 追加重定向
ll &>>zzl
echo zzl &>>zzl
tr 命令
选项: -c –C --complement:取字符集的补集 -d --delete:删除所有属于第一字符集的字符 -s --squeeze-repeats:把连续重复的字符以单独一个字符表示,即去重 -t --truncate-set1:将第一个字符集对应字符转化为第二字符集对应的字符[:alnum:]:字母和数字[:alpha:]:字母[:digit:]:数字[:lower:]:小写字母[:upper:]:大写字母[:space:]:空白字符[:print:]:可打印字符[:punct:]:标点符号[:graph:]:图形字符[:cntrl:]:控制(非打印)字符[:xdigit:]:十六进制字符范例:范例:tr[OPTION]...SET1[SET2]#该命令会把/etc/issue中的小写字符都转换成大写字符tr‘a-z’‘A-Z’</etc/issue#删除fstab文件中的所有abc中任意字符tr–dabc</etc/fstab
#该命令会把/etc/issue中的小写字符都转换成大写字符tr‘a-z’‘A-Z’</etc/issue#删除fstab文件中的所有abc中任意字符tr–dabc</etc/fstab
-c –C --complement:取字符集的补集 -d --delete:删除所有属于第一字符集的字符 -s --squeeze-repeats:把连续重复的字符以单独一个字符表示,即去重 -t --truncate-set1:将第一个字符集对应字符转化为第二字符集对应的字符[:alnum:]:字母和数字[:alpha:]:字母[:digit:]:数字[:lower:]:小写字母[:upper:]:大写字母[:space:]:空白字符[:print:]:可打印字符[:punct:]:标点符号[:graph:]:图形字符[:cntrl:]:控制(非打印)字符[:xdigit:]:十六进制字符
cat zzl | tr 'a-z' 'A-Z'
Authentication:认证,验证用户身份 Authorization:授权,不同的用户设置不同权限 Accouting|Audition:审计
Linux中每个用户是通过User Id (UID)来唯一标识的。
管理员:root, 0
普通用户:1-60000 自动分配
系统用户:1-499 (CentOS 6以前), 1-999 (CentOS7以后) 对守护进程获取资源进行权限分配
登录用户:500+ (CentOS6以前), 1000+(CentOS7以后) 给用户进行交互式登录使用
普通组:500+(CentOS 6以前), 1000+(CentOS7以后), 给用户使用
用户的主要组(primary group):用户必须属于一个且只有一个主组,默认创建用户时会自动创建 和用户名同名的组,做为用户的主要组,由于此组中只有一个用户,又称为私有组
用户的附加组(supplementary group): 一个用户可以属于零个或多个辅助组
Linux安全上下文Context:运行中的程序,即进程 (process),以进程发起者的身份运行,进程所能够 访问资源的权限取决于进程的运行者的身份
cat /etc/ shadow
/etc/passwd:用户及其属性信息(名称、UID、主组ID等) /etc/shadow:用户密码及其相关属性 /etc/group:组及其属性信息 /etc/gshadow:组密码及其相关属性
passwd文件格式 [root@centos8 ~]#id postfix uid=89(postfix) gid=89(postfix) groups=89(postfix),12(mail) [wang@centos8 ~]$cat /etc/shadow cat: /etc/shadow: Permission denied [root@centos8 ~]#cat /etc/shadow root:$6$zsrWEC56PrKifAEz$hylCuGySe.H6l6O2MRvbtqy/VZgnZbau.y57dE85.YHq03MTJVV4UvQ VIDcYA1IJzbgpWE0vTU.BtPHLbNBNn0:18246:0:99999:7::: bin:*:18027:0:99999:7::: daemon:*:18027:0:99999:7::: adm:*:18027:0:99999:7::: lp:*:18027:0:99999:7::: login name:登录用名(wang) passwd:密码 (x) UID:用户身份编号 (1000) GID:登录默认所在组编号 (1000) GECOS:用户全名或注释 home directory:用户主目录 (/home/wang) shell:用户默认使用shell (/bin/bash)
shadow文件格式 登录用名 用户密码:一般用sha512加密 从1970年1月1日起到密码最近一次被更改的时间 密码再过几天可以被变更(0表示随时可被变更) 密码再过几天必须被变更(99999表示永不过期) 密码过期前几天系统提醒用户(默认为一周) 密码过期几天后帐号会被锁定 从1970年1月1日算起,多少天后帐号失效 更改密码加密算法:
authconfig --passalgo=sha256 --update
密码的安全策略 足够长 使用数字、大写字母、小写字母及特殊字符中至少3种 使用随机密码 定期更换,不要使用最近曾经使用过的密码
group文件格式 群组名称:就是群组名称 群组密码:通常不需要设定,密码是被记录在 /etc/gshadow GID:就是群组的 ID 以当前组为附加组的用户列表(分隔符为逗号)
gshdow文件格式 群组名称:就是群的名称 群组密码: 组管理员列表:组管理员的列表,更改组密码和成员 以当前组为附加组的用户列表:多个用户间用逗号分隔
文件操作 vipw和vigr pwck和grpck
用户和组管理命令
用户管理命令
useradd usermod userdel
组帐号维护命令
groupadd groupmod groupdel
用户创建 useradd 命令可以创建新的Linux用户 useradd [options] LOGIN
常见选项: -u UID -o 配合-u 选项,不检查UID的唯一性 -g GID 指明用户所属基本组,可为组名,也可以GID -c "COMMENT“ 用户的注释信息 -d HOME_DIR 以指定的路径(不存在)为家目录 -s SHELL 指明用户的默认shell程序,可用列表在/etc/shells文件中 -G GROUP1[,GROUP2,...] 为用户指明附加组,组须事先存在 -N 不创建私用组做主组,使用users组做主组 -r 创建系统用户 CentOS 6之前: ID<500,CentOS 7以后: ID<1000 -m 创建家目录,用于系统用户 -M 不创建家目录,用于非系统用户
useradd -r -u 48 -g apache -s /sbin/nologin -d /var/www -c "Apache" apache
useradd 命令默认值设定由/etc/default/useradd定义
cat /etc/default/useradd
显示或更改默认设置
useradd -D useradd –D -s SHELL useradd –D –b BASE_DIR useradd –D –g GROU
新建用户的相关文件
/etc/default/useradd /etc/skel/* /etc/login.defs
新建用户的相关文件
/etc/default/useradd /etc/skel/* /etc/login.defs
批量创建用户
newusers passwd格式文件
批量修改用户口令
echo username:passwd | chpasswd
用户属性修改
usermod 命令可以修改用户属性
usermod [OPTION] login
常见选项: -u UID: 新UID -g GID: 新主组 -G GROUP1[,GROUP2,...[,GROUPN]]]:新附加组,原来的附加组将会被覆盖;若保留原有,则要同时 使用-a选项 -s SHELL:新的默认SHELL -c 'COMMENT':新的注释信息 -d HOME: 新家目录不会自动创建;若要创建新家目录并移动原家数据,同时使用-m选项 -l login_name: 新的名字 -L: lock指定用户,在/etc/shadow 密码栏的增加 ! -U: unlock指定用户,将 /etc/shadow 密码栏的 ! 拿掉 -e YYYY-MM-DD: 指明用户账号过期日期 -f INACTIVE: 设定非活动期限
删除用户
userdel 可删除Linux 用户
userdel [OPTION]... Login
常见选项: -f, --force 强制 -r, --remove 删除用户家目录和邮箱
查看用户相关的ID信息 id 命令可以查看用户的UID,GID等信息
id [OPTION]... [USER]
常见选项: newusers passwd格式文件 echo username:passwd | chpasswd usermod [OPTION] login userdel [OPTION]... Login id [OPTION]... [USER] -u: 显示UID -g: 显示GID -G: 显示用户所属的组的ID -n: 显示名称,需配合ugG使用
切换用户或以其他用户身份执行命令
su: 即switch user,命令可以切换用户身份,并且以指定用户的身份执行命令
su [options...] [-] [user [args...]]
切换用户的方式:
su UserName:非登录式切换,即不会读取目标用户的配置文件,不改变当前工作目录
su - UserName:登录式切换,会读取目标用户的配置文件,切换至家目录,完全切换
说明:root su至其他用户无须密码;非root用户切换时需要密码
换个身份执行命令:
su [-] UserName -c 'COMMAND'
[wang@centos8 ~]$su - root -c "getent shadow
常见选项: -l --login su -l UserName 相当于 su - UserName
常见选项: -l --login su -l UserName 相当于 su - UserName
常见选项: -l --login su -l UserName 相当于 su - UserName
3.6 设置密码 passwd 可以修改用户密码
格式: 常用选项: -d:删除指定用户密码 -l:锁定指定用户 -u:解锁指定用户 -e:强制用户下次登录修改密码 -f:强制操作 -n mindays:指定最短使用期限 -x maxdays:最大使用期限 -w warndays:提前多少天开始警告 -i inactivedays:非活动期限 --stdin:从标准输入接收用户密码 范例: su [options...] [-] [user [args...]] su [-] UserName -c 'COMMAND' [wang@centos8 ~]$su - root -c "getent shadow" passwd [OPTIONS] UserName
echo "PASSWORD" | passwd --stdin USERNAME
修改用户密码策略
chage 可以修改用户密码策略
chage [OPTION]... LOGIN
常见选项: -d LAST_DAY -m --mindays MIN_DAYS -M --maxdays MAX_DAYS -W --warndays WARN_DAYS -I --inactive INACTIVE 密码过期后的宽限期 -E --expiredate EXPIRE_DATE 用户的有效期 -l 显示密码策略
范例: 3.8 用户相关的其它命令 chfn 指定个人信息 chsh 指定shell finger 可看用户个人信息 范例: chage [OPTION]... LOGIN [root@centos8 ~]#chage -m 3 -M 42 -W 14 -I 7 -E 2020-10-10 wang [root@centos8 ~]#chage -l wang Last password change : Dec 18, 2019 Password expires : Jan 29, 2020 Password inactive : Feb 05, 2020 Account expires : Oct 10, 2020 Minimum number of days between password change : 3 Maximum number of days between password change : 42 Number of days of warning before password expires : 14 [root@centos8 ~]#getent shadow wang wang:$6$82L7A37XJgzKTegH$lFzqrMHmFwW740U32bvWHUuakPDKOiULE/CxcyDzSe1qi1X2ALulDw1 WYrhd2wE00.lWO0im5//7biyV.juk5.:18248:3:42:14:7:18545: #下一次登录强制重设密码 [root@centos8 ~]#chage -d 0 wang [root@centos8 ~]#getent shadow wang wang:$6$82L7A37XJgzKTegH$lFzqrMHmFwW740U32bvWHUuakPDKOiULE/CxcyDzSe1qi1X2ALulDw1 WYrhd2wE00.lWO0im5//7biyV.juk5.:0:3:42:14:7:18545: [root@centos8 ~]#chage -l wang Last password change : password must be changed Password expires : password must be changed Password inactive : password must be changed Account expires : Oct 10, 2020 Minimum number of days between password change : 3 Maximum number of days between password change : 42 Number of days of warning before password expires : 14 [root@centos8 ~]#getent shadow wang wang:$6$82L7A37XJgzKTegH$lFzqrMHmFwW740U32bvWHUuakPDKOiULE/CxcyDzSe1qi1X2ALulDw1 WYrhd2wE00.lWO0im5//7biyV.juk5.:0:3:42:14:7:18545:
paste 合并多个文件同行号的列到一行 格式 -d 分隔符:指定分隔符,默认用TAB -s : 所有行合成一行显示
paste -s title.txt emp.txt
wc story.txt 39 237 1901 story.txt 行数 单词数 字节数
tail [参数] [文件]
-f 循环读取 -q 不显示处理信息 -v 显示详细的处理信息 -c<数目> 显示的字节数 -n<行数> 显示文件的尾部 n 行内容 --pid=PID 与-f合用,表示在进程ID,PID死掉之后结束 -q, --quiet, --silent 从不输出给出文件名的首部 -s, --sleep-interval=S 与-f合用,表示在每次反复的间隔休眠S秒
Crontab 定时
- 添加或更新crontab中的命令
crontab -e
- 查看当前系统登录用户的Crontab命令集合
crontab -l
如何 添加/编辑 Crontab 添加或更新crontab中的命令 crontab -e 默认情况下,系统会编辑当前登录用户的crontab命令集合。需要编辑其他用户的命令集合,需要使用到如下的命令 crontab -u username -e 查看Crontab命令集合 查看当前系统登录用户的Crontab命令集合 crontab -l 查看其他用户的Crontab命令集合 crontab -u username -l 20个超实用的Crontab使用实例 1.每天 02:00 执行任务 0 2 * * * /bin/sh backup.sh 2.每天 5:00和17:00执行任务 0 5,17 * * * /scripts/script.sh 3.每分钟执行一次任务 通常情况下,我们并没有每分钟都需要执行的脚本(默默的想到了12306--) * * * * * /scripts/script.sh 4.每周日 17:00 执行任务 0 17 * * sun /scripts/script.sh 5.每 10min 执行一次任务 */10 * * * * /scripts/monitor.sh 6.在特定的某几个月执行任务 * * * jan,may,aug * /script/script.sh 7.在特定的某几天执行任务 0 17 * * sun,fri /script/scripy.sh 在每周五、周日的17点执行任务 8.在某个月的第一个周日执行任务 0 2 * * sun [ $(date +%d) -le 07 ] && /script/script.sh 9.每四个小时执行一个任务 0 */4 * * * /scripts/script.sh 10.每周一、周日执行任务 0 4,17 * * sun,mon /scripts/script.sh 11.每个30秒执行一次任务 我们没有办法直接通过上诉类似的例子去执行,因为最小的是1min。但是我们可以通过如下的方法。 * * * * * /scripts/script.sh * * * * * sleep 30; /scripts/script.sh 12.多个任务在一条命令中配置 * * * * * /scripts/script.sh; /scripts/scrit2.sh 13.每年执行一次任务 @yearly /scripts/script.sh @yearly 类似于“0 0 1 1 *”。它会在每年的第一分钟内执行,通常我们可以用这个发送新年的问候。 14.系统重启时执行 @reboot /scripts/script.sh 15.将 Cron 结果重定向的特定的账户 默认情况下,cron 只会将结果详情发送给 cron 被制定的用户。如果需要发送给其他用户,可以通过如下的方式: # crontab -l MAIL=bob 0 2 * * * /script/backup.sh 16.将所有的 cron 命令备份到文本文件当中 这是一个当我们丢失了cron命令后方便快速的一个恢复方式。 下面是利用这个方式恢复cron的一个小例子。(看看就行~) 首先:检查当前的cron # crontab -l MAIL=rahul 0 2 * * * /script/backup.sh 然后:备份cron到文件中 # crontab -l > cron-backup.txt # cat cron-backup.txt MAIL=rahul 0 2 * * * /script/backup.sh 接着:移除当前的cron # crontab -r # crontab -l no crontab for root 恢复:从text file中恢复 # crontab cron-backup.txt # crontab -l MAIL=rahul 0 2 * * * /script/backup.sh