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 关机:

 linux下各文件夹的意义   

/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 控制符33 u 当前用户 h 主机名简称 H 主机名 w 当前工作目录 W 当前工作目录基名 24小时时间格式 T 12小时时间格式 ! 命令历史数 # 开机后命令历史数

PS1=PS1="[e[1;32m][ [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 发出警告声  退格键 c 最后不加上换行符号 e escape,相当于33 换行且光标移至行首 回车,即光标移至行首,但不换行 插入tab 插入字符 nnn 插入nnn(八进制)所代表的ASCII字符 xHH插入HH(十六进制)所代表的ASCII数字(man 7 ascii)

echo -e '33[43;31;5mmagedue[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
原文地址:https://www.cnblogs.com/zzl0916/p/13830880.html