LInux基础命令
一、基础命令
内部命令: 由shell自带的,而且通过某些命令形式提供
help 内部命令列表
enable cmd 启用内部命令
enable -n cmd 禁用内部命令
enable -n 查看所有禁用的内部命令
外部命令:在文件系统路径下有对应的可执行程序文件
查看路径: which cmd | whereis cmd
区别指定的命令是内部或外部命令
type cmd
hash 查看命令缓存表
alias 起别名
alias cdnet='cd /etc/sysconfig/network-script'
存别名的文件”
用户家目录下.bashrc 仅当前用户生效
/etc/bahsrc 对所有用户生效
命令执行过程
1. 别名
2. 内部
3. 外部命令hash表
4. 外部命令 $PATH
命令格式
command [option] [arguments]
短选项: -c 例如: -l, -h
长格式:--word 例如: --all
多条命令在一行用分号隔开
日期与时间
Linux的两种时钟
系统时间:由Linux内核通过CPU的工作频率进行的
硬件时间:主板
相关命令
date 显示和设置系统时间
date + %s
date -d @
hwclock, clock: 显示硬件时间
clock -s 系统同步硬件时间
clock -w 硬件同步系统时间
获取帮助
whatis cmd 查看某个命令的简要说明
mandb 生成whatis数据库, 一般会自己生成
内部命令
help command 或 man bash
外部命令
command --help 或 command -h
whoami
who
w 显示当前谁在登录,编辑哪个文件
screen 在一个终端上虚拟出一个终端来
echo: 显示字符
调颜色: echo -e ['\e[32m OK \e[0m]'
命令行扩展、被括起来的集合
命令扩展: $()或`` 把一个命令的输出打印给另一个变量的参数
echo "This system's name is $(hostname)"
括号扩展: {} 打印重复字符串的简化形式
echo {a..z} 打印出a~z
单引号:把特殊符号挡着普通字符
双引号:解析特殊符号的含义,不解析命令
反撇号:把执行的结果,由另一个命令来引用
tab 自动补全
history 查看历史命令
-c 清除历史
-d offset 清除指定行历史
在/etc/profile 里面该历史记录条数
一般会保存在用户家目录下.bash_history
屏幕快捷键
二、 文件系统和文件管理命令
特殊目录: 这两个目录不占磁盘空间
sys: 映射硬件设备
proc: 进程相关
文件后缀颜色定义文件:/etc/DIR_COLORS
lsblk: 查看磁盘列表
pwd: 查看当前目录
-P 查看真实路径
cd: 切换文件夹
cd - 回到刚才切换过来的目录
cd ~ 到家目录
basename: 取出文件,不要文件夹
dirname: 和上面相反
ls: 列出列表
-R 递归跌出
-l 查看属性
-d 列出文件夹本身
--time=atime 查看文件读时间 并不是所有的场景都会记录
--time=ctime 文件属性更改时间
l. 列出当前所有隐藏的文件夹
stat: 查看文件元数据
文件通配符
* 匹配零个或多个字符 (不包含隐藏文件)
?匹配任意一个字符
~ 当前家目录
~- 前一个文件夹
[0-5] 表示一个范围里面取一个,大小写敏感
[^0-5] 排除中括号里面的内容
[a-c] a A b B c
[:lower:] 小写a-z
[:upper:] 大写
touch: 创建文件
touch `date -d '-d day' +%F`.log 创建昨天时间命名的文件
xxd: 查看文件16进制
hexdump: 查看二进制文件
cp: 拷贝
-p 保留原权限
-a 保留最全的属性
-r 复制目录
-i 覆盖前提示
-n 不覆盖
-d 只复制链接名 不复制文件
-v 拷贝过程
-f 强制
-u 复制源比目标更新文件,或目标不存在的文件
-b 目标存在,覆盖前先备份
--backup=numberd 覆盖前备份,加数字命名
常见组合 -av
mv 移动和重命名
-i 交互
-f
-b 目标存在,覆盖前先备份
rm 删除
-r 递归
-f 强制喊出
-i 交互
mkdir 创建文件夹
-p 如果上级不存在,创建上级
-v 查看创建过程
tree 显示目录树
-d 只显示目录
-L 指定显示的层级数目
-P 只显示由pattern匹配到的路径
rmdir 删除空文件夹
rename 批量改名
例子: rename .log .log.bak *
释放磁盘空间的正确方法
> filename
rm -f filename
索引节点
ls -i 查看文件节点
df -i 查看磁盘每个挂载点能创建多少个文件
inode (index node)表中包含文件系统
一个节点是
ln 创建硬连接
特性: (同一个文件多个名称)删除源文件,链接文件还在,平级关系,不能跨设备创建,不能针对文件夹创建
ln -s 创建软连接
特性: 删除软连接时不要加斜线
file: 判断一个文件的格式
三、文本编辑工具vim
文本编辑种类
行编辑器: sed
全屏编辑器: nano, vi
vim的用法:
vim +n filename 进入到指定的行
-d file1 file2 文件做比较
-b file 二进制方式打开文件
-m 只读打开文件
vim的三种模式
命令模式:默认模式,移动光标,剪切/粘贴文本
ZZ
ZQ
字符间跳转:h左 l右 j下 k上
w 跳到下一个单词词首
e 跳到上一个单词词首
当前页跳转: H 页首 M 页中间行 L 页底
行首行尾跳转:
^ 跳转到行首的第一个非空白字符
0 跳转至行首
$ 跳转至行尾
行间移动
#G 跳转到指定的行
G 最后一行
gg 第一行
字符编辑
x 删除光标处的字符
#x 删除光标所在处起始的#个字符
xp 交换光标所在处的字符及其后面字符的位置
~ 交换大小写
J 删除当前行后的换行符
替换命令
r 替换光标所在处的字符
R 切换成REPLACE模式
删除命令:
d 删除命令,可结合光标 跳转字符,实现范围删除
d$ 删除到行尾
d^ 删除到非空行首
d0 删除到行首
dd 删除光标所在行
yy 复制
p 粘贴
搜索
/ n N
?
撤销
u 撤销最近的更改
#u 撤销之前多次更改
U 撤销光标落在这行后所有此行的更改
插入模式:修改文本,i I o O a A
扩展命令: 保存 退出
q 退出
q! 强制退出
wq 保存退出
x 退出保存
!临时调用linux命令
r!command 把linux命令执行结果放到当前文件
替换
Esc键 退出当前模式
四、标准输入输出
程序: 指令 + 数据
读入数据: Input
输出数据:Output
pidof command 查看执行程序分配的id号
标准输入的方法
<
tr 转换和删除字符
cat 也有单行重定向的功能
cat > filename
多行重定向生成新文件
cat << EOF
....
EOF
管道符 | 只能执行标准输出的结果
2>&1 | 解决错误输出
tee 标准输出在屏幕上显示,也可以做重定向
hostname | tee tee.txt
-a 追加
seq
五、用户和组管理
资源分配: 认证 授权 审计
用户user
令牌token,identity
Linux用户: Username/UID
管理员: root, 0
普通用户: 1-60000自动分配
系统用户 1-499,500-999
登录用户 500+
组group
安全上下文
配置文件
opensssl 生成 随机口令
openssl rand -base64 9
修改用户口令信息
chage 用户名
getent shawon 用户名 过滤出shadown里面的某一个用户
vipw
vigr
pwck 检查passwd文件是否争取
grpck 检查group 是否正确
组的操作
groupadd
groupmod
groupdel
用户操作
useradd
-u 指定uid
-o 忽略id唯一
-r 系统账号 不会创建家目录
-s 指定shell类型
-g 指定组
-G 指定附加组
-N 不创建和自己同名的组
-d 指定家目录
-M
-m
-c
创建用户时使用的文件/etc/default/useradd /etc/skel/
/etc/login.defs 定义口令的信息
usermod
/etc/passwd 一个叹号代表锁定
-G 配合-a 用
-L 锁定用户
-U 解锁
-e 指定有效期
-f 设置宽限期
userdel
-r 删除时连加目录和邮箱也删除
批量创建用户
准备一个和/etc/password相同格式的文件
newusers 文件
chpasswd 改口令
用户名:密码
也可以准备用文件存放数据根式为 用户名:密码
执行命令:cat 文件 | chpasswd
id命令
-u 显示UID
-g 显示GID
-G 显示用户所属的组的ID
-n 显示名称,先要配合前面三个使用
su 切换用户
- 带家目录
sudo -i 提权
passwd
-d 删除指定用户密码
-l 锁定指定用户
-u 解锁指定用户
-e 强制次登录修改密码
-f 强制操作
n 指定最短使用期限
-x 最大使用期限
-w 提前多少天使用
echo 密码 | passwd --stdin 用户 &> /dev/null
groupmembers 管理组相关的
chown 修改所有者
chmod 修改权限
chgrp 修改组相关
目录
读权限: 可以列出文件名
执行:可以进出目录,可以访问目录的文件内容
写:决定了能不能创建新文件
特殊权限
suid 作用域可执行的二进制的程序,功能:用户执行此程序时,将继承此程序的所有者权限
sgid 作用域可执行的二进制的程序,功能:用户执行此程序,将继承此程序的所有属组权限
作用在目录: 将来新建的文件将自动继承此目录的所属组
sticky 作用域目录,功能: 只能删除自己的文件
设定文件特定属性
chattr +i 不能删除,改名,更改
-i 取消权限
-a 可以用echo >> 追加
lsattr 查看权限
umask权限
功能:将777|666中对应权限去掉,得出默认权限
默认权限
目录: 777 - umask
文件: 666 -umask 如果有奇数+1 偶数保持不变
FACL 访问控制列表
除了文件的所有者 所属组 其它,还可以设置其它权限
setfacl -m -u:用户:权限 文件 给用户设置acl
setfacl -m -g:用户:权限 文件 给组设置acl
setfacl -x -g:用户 文件 查看权限
setfacl -R -b dir 删除所有acl权限
getfacl 文件 查看权限
六、正则表达式
匹配文本中的内容
抽取文本的工具
文本内容:cat, more, less
文件截取:head, tail
按列抽取:cut
排序和统计: sort, wc
按关键字抽取:grep
cat的常见选项
-E 显示回车换行
-A 显示所有的符号
-V 显示
-n 加行号
-b 非空行
-s 压缩多个空行
tac 倒着显示
nl 跟cat -n一个效果
rev 同一行倒着显示
more 允许分页显示
-d 显示翻页信息
less 分页处理
head
-c 指定获取多少字节
-n 指定获取多少行
tail 默认后十行
-c 取几个字符
-f 动态显示新追加的内容
例如:tr -dc [:alnum:] < /dev/urandom | head -c 12
查看被跟踪的文件:ls /proc/`pidof tailf`/fd -l
cut 对文本的特定列抽取
cut -d: -f1,3 /etc/passwd
-d 指定分隔符
-f 指定要抽取的列
-c 指定字符数量
--output-delimiter=分隔符
指定输出分隔符
cut -d: -f1,3-5 --output-delimiter=" " /etc/passwd
ifconfig eth0 | head -n 2 | tail -n 1 | tr -s " " | cut -d" " -f3
paste 横向合并文件
-d 指定合并符号
-s 把原来的文件放在一行然后再合并
wc 文本数据统计
-l 统计行
-w 统计单词
-c
-L
-m
sort 文本排序
把整理过的文本显示stdout,不改变原始文件
sort [options] file(s)
r 执行反方向(由上至下)整理
-R 随机排序
-n 执行按数组大小整理
-f 选项忽略
-u 删除输出中的重复行
-t c 选项使用c做为字段界定符
-k X 选项按照使用c字符分割
uniq 从舒服中删除前后相接的重复的行
uniq [option] [file]
-c 显示每行重复出现的次数
-d 仅显示重复过的行
-u 显示不重复的
diff 比较两个文件
patch
grep: 文本过滤
命令选项
--color=auto: 对匹配到的文本着色显示
-m # 匹配#次后停止
-v 取反
-i 忽略大小写
-n 显示匹配的行号
-c 统计匹配的行数
-o 仅显示匹配的字符串
-q 静默默认,不输出任何 信息
-A # after 后多少行
-B # before 前#行
-C # content, 前后各#行
-e 实现多个选项之间的逻辑or关系
grep -e 小e表示或的关系
-w 单词
-E 表示用正则表达试
-F 表示用普通匹配模式
-f 指文件,把搜索的关键字放在文件里面进行过滤
正则表达式
元字符分类:字符匹配、匹配次数、位置锚定、分组
man 7 regex
字符匹配
* 前面的字符出现任意次
. 匹配任意单个字符
[] 匹配指定范围外的任意单个字符
[^ ] 匹配指定范围外的任意单个字符
[:alnum:] 字母和数字
[:alpha:] 代表任何英文大小写字符
[:lower:] 小写字母 [:upper:] 大写字母
[:blank:] 空白字符
[:space:] 空白字符和制表符
[:cntrl:] 不可打印的控制符
[:digit:] 十进制数字
[:graph:] 可打印非空白字符
[:print:] 可打印字符
[:punct:] 表达符号
匹配次数
位置锚定:定位出现的位置
分组:将一个或多个字符捆绑在一起,当作一个整体
egrep扩展正则表达式
egrep = grep -E
egrep [OPTION] PATTERN FILE
扩展正则表达式的元字符
字符匹配
. 任意单个字符
[] 规定范围内的字符
[^] 不在指定范围的字符
匹配次数
位置锚定
^ 行首
$ 行尾
\<,\b 语首
\>,\b 语尾
分组
()
向后引用:\1, \2
或者
a|b
C|cat
(C|c)at