命令替换
把命令中某个子命令替换为其执行结果
$()
echo "The current directory is $(pwd)."
touch ./file$(date +%H-%M-%S).txt 以文件创建时间并以相应格式命名文件
date 显示时间
``
echo "The current directory is `pwd`"
echo 'The current directory is `pwd`'
bash支持的引号
`` 反引号,命令替换
"" 双引号,可以实现变量替换
'' 强引用,不完成变量替换
vim 文本编辑器 纯文本 重点中的重点
vi 文本编辑 vim
交互式
命令模式 执行操作命令
插入模式 输入内容
末行模式 做一些操作 保存退出 导入文本
命令模式
删除:
d 进入删除状态
d 删除当前行
$ 删除光标所在字符到行尾,包含光所在字符
^ 删除光标所在字符到行首,不包含光标所在字符
gg 删除光标所在行到文档首部
G 删除光标所在行到文档尾部
w 删除光标所在字符往后一个单词(同类字符)
x 在命令行按字符进行往右删除
s 删除光标所在处的字符并进入插入模式
r 替换光标所在处的字符
光标的跳转:
$ 跳转到行尾
^ 跳转到行首
gg 跳转到文档首行行首
G 跳转到文档末行行首
line_num G 跳转到 line_num 数字行号的行首
w 按单词(同类字符)往右跳转
h 光标往左移动(字符)
l 光标往右移动
j 光标往下移动
k 光标往上移动(行)
其他指令:
u 撤销之前的操作 1 2 3 3 2 1
Ctrl + r 重做 1 2 3 3 2 2 3
line_count(数字) yy 复制光标所在行之后的 line_count 数量的行
yy 表示复制当前行
p 表示粘贴复制的行
line_count(数字) cc 剪切光标所在行之后的 line_count 数量的行
cc 表示剪切当前行 直接进入插入模式
p 表示粘贴剪切的行
末行模式:
:w
:q
:wq
:w filename(文件名)
:q! 强制退出不保存
:set nu 显示行号
:set nonu 取消显示行号
:r /dir1/dir2/filename 表示读取指定文件的内容到当前文件
/var/log/messages 案例文件
:line_num 表示直接跳转到指定行行首
cp /etc/passwd . 拷贝文件到当前目录
查找替换
:%s/被替换内容/替换后的内容 表示查找当前文件中所有的 被替换内容 替换成 替换后的内容,但是每行匹配到的只替换第一个匹配到的
:%s/被替换内容/替换后的内容/g 表示替换所有被匹配到的关键字 g 表示全局
:%s/被替换的关键字//g 表示删除匹配到的所有关键字
查找字符串:
/关键字 表示在文档中查找关键字
n 在所有匹配到的关键字之间往后循环切换
N 在所有匹配到的关键字之间往前循环切换
?关键字 表示在文档中查找关键字
n 在所有匹配到的关键字之间往前循环切换
N 在所有匹配到的关键字之间往后循环切换
文本排序
seq 打印一个数字序列
arg1 结束位置
arg1 arg2 起始位置 结束位置
arg1 arg2 arg3 起始位置 步长 结束位置
tac 按行逆序显示
sort 默认根据每个字符比较在ASCII码中的升序排序
man sort 查看sort帮助文档
-n 按数值排序
-r(reverse) 先排序后逆序
-t 指定字段分隔符
cp /etc/passwd .
-k(key) 指定字段进行排序
sort -t : -k 3 passwd 按ASCII表排序
sort -t : -k 3 -n passwd 按数值排序
-u(unique) 排序后去重
-f 排序时忽略字符大小写
uniq 等同于sort -u,报告重复的行,注意,重复的行必须相邻
sort 1 | uniq
-d 只显示重复的行
-D 显示所有重复的行
-c 显示重复行重复的次数
文本统计
wc(word count) 显示顺序为:行 - 单词数(同类字符) - 字节数
字节(容量) 字符(描述)
二进制 bit 0 1
ASCII 8bit字节 = 字符
字符集 utf-8 Linux gb2312
1字符 = 3字节
-w 单词
-c 字节
-l(小写字母l) 行
-m 字符
-L 最长的一行有多少宽度(不含结尾符$)
date(软件时间:系统计算) 输出和更改日期时间 19700101开始 到 当前经历的秒数
更改日期的格式 月日时分年.秒 ntp(网络时间协议) 时间同步
date -s //设置当前时间,只有root权限才能设置,其他只能查看
date -s 20160813 //设置成20160813,这样会把具体时间设置成空00:00:00
date -s 01:01:01 //设置具体时间,不会对日期做更改
date -s “01:01:01 2016-08-13″ //这样可以设置全部时间
date -s “01:01:01 20160813″ //这样可以设置全部时间
date -s “2016-08-13 01:01:01″ //这样可以设置全部时间
date -s “20160813 01:01:01″ //这样可以设置全部时间
clock(硬件时间) 查看时间 BIOS计时器 晶振
hwclock 查看硬件时间
-r or hwclock --show
-w or hwclock --systohc 软件时间导入到硬件时间
-s or hwclock --hctosys 硬件时间导入到系统时间
cal 查看日历,如果只有一个参数则表示年份,如果有两个则表示月份,年份
cal [参数] [月份] [年份]
-1 显示一个月的月历
-3 显示系统前一个月,当前月,下一个月的月历
-s 显示星期天为一个星期的第一天,默认的格式
-m 显示星期一为一个星期的第一天
-j 显示在当前年份中的第几天
-y 显示当前年份的日历
1752年9月为什么少了11天?
用户和组
创建
删除
修改
创建用户
useradd userName 表示创建userName 为名称的用户
id userName 表示查看 userName 名称的用户是否存在
如果存在,则默认显示用户的相关信息
uid 表示的是用户的数字编号
gid 用户组的数字编号。
groups 表示该用户属于哪个用户组
passwd 修改用户密码
如果是root用户执行该操作,则:
如果passwd指令后带参数(用户名),则直接修改指定用户名的密码
如果没有带参数,则修改root用户的密码
其他用户:则只能修改自己的密码,且不能指定用户
root用户在修改密码时,默认可以修改成任何密码
如果是其他用户,则密码必须符合密码复杂型规则要求
root用户修改任何用户的密码,都不需要原密码。
su(switch user) 切换用户
如果需要切换用户环境,则使用su username,如果不需要切换用户环境,则直接用su切换即可,但是一般不建议,除非你知道你在做什么。
root用户切换任何用户都不需要密码,其他任何用户切换任何用户都需要切换到的用户的密码
exit 切换到某个用户之后,用完以后,麻烦退出该用户
创建用户组
groupadd groupname 创建 groupname用户组
创建用户时,如果没有指定让用户所属哪个组,那么会自动创建一个与用户名相同的组。
如果指定让用户所属哪个组,则使用 -g 选项 ,选项后 跟上 组名,而且组名必须存在
[root@localhost ~]# ll /etc/passwd 用户数据库
-rw-r--r--. 1 root root 2632 Jan 16 15:15 /etc/passwd
[root@localhost ~]# ll /etc/group
-rw-r--r--. 1 root root 1012 Jan 16 15:11 /etc/group
[root@localhost ~]# ll /etc/shadow
----------. 1 root root 1395 Jan 16 15:15 /etc/shadow
[root@localhost ~]# ll /etc/gshadow
----------. 1 root root 814 Jan 16 15:11 /etc/gshadow
/etc/passwd
haha:x:1001:1001::/home/haha:/bin/bash
haha: 用户名
x: 密码占位符
1001: 该用户的uid
1001: 该用户所属组的gid
: 昵称或描述
/home/haha: 用户的家目录
/bin/bash: 用户的shell(一个进程,将用户的操作传给内核)
什么是shell? 中间 shell 多个shell
系统默认是/bin/bash
/sbin/nologin 不允许登录
/etc/group
zhangsan:x:1002:
zhangsan: 组名称
x: 密码占位符
1002: 组的gid
: 该组作为附加组的用户
附加组: 用户除了基本组之外的其他的所属组。
基本组: 当用户在创建时自动创建的和用户名一样的组,当创建用户时指定-g 的组为 基本组
/etc/shadow
redhat: 用户名
$6 加密算法
$NQb.pJ6PUCD0Bo90 盐(salt)
$IIMJUCKuizRT4RPBbZBv66hIUaeE2ZDfZ/u0ixu14xKmX19WUk1EBdyx8/8oPBchfxHaJ8LE/qU7BQ9LBG0Lj0: 密文
张三 明文 加密算法 + salt 密文 不可逆算法(md5) 摘要算法
李四 明文 加密算法 + salt 密文 瀑布效应 蝴蝶效应
19008: 自动1970年1月1日开始到上一次修改密码的时间所经历的天数
0: 密码最短使用期限 为0表示不限制
99999: 密码最长使用期限 密码使用多长时间之后必须要改密码,99999表示可不更改 100*365=36500
7: 密码过期警告时间 密码过期前多少天进行警告,提示用户改密码,但是不锁定用户
: 密码过期宽限期限 密码过期后必须改密码的时间,如果还没改,锁定用户,就只能找网管了
: 账号过期精确时间 如果为99999,意味着永不过期
: 保留字段
/etc/gshadow
zhangsan: 组名称
$6$fXxkaFG/e$wFrtezmR.cPVQ3mnWBwnErUQNSotaeeldDbcYiX0uhzsvzGtouhDCB2xUHa3vOueS1011KGmDm6z7.wvX2qiI/ 密文
:
:
/etc/login.defs 创建用户时使用的一些配置信息。
/etc/skel 有默认四个隐藏文件,该隐藏文件会在创建用户时,自动复制到用户所在的家目录
当创建一个用户时,做了些什么:
1、/etc/passwd 用户
2、/etc/shadow 用户密码
3、/etc/group 组
4、/etc/gshadow 组密码
5、/home/ 创建家目录
6、/var/spool/mail 创建用户的邮箱
手动创建一个新用户
vim /etc/passwd
bluefly:x:1003:1003:miaoshu:/home/bluefly:/bin/bash
348 id bluefly
349 vim /etc/group
bluefly:x:1003:
350 id bluefly
351 cd /home
352 ll
353 mkdir bluefly
354 ll
355 chown 1003:1003 bluefly/
356 ll
357 cd /var/spool/
358 ll
359 cd mail/
360 ll
361 mkdir bluefly
362 ll
363 rm -rf bluefly/
364 touch bluefly
365 chown bluefly:mail bluefly
366 ll
367 cd
368 cd /home/bluefly/
369 ls -A
370 cp /etc/skel/.bash* .
371 ls -A
372 cp -r /etc/skel/.mozilla/ .
373 ls -A
374 ls -lA
375 cd
376 su - bluefly
377 id bluefly
378 history