By BarryZed
权限
文件属性
- 第一个字符,文件类型:
d:目录-:普通文件l:快捷方式,指向其他文件b、c:外围设备s、p:数据结构与管道
- 文件名以
.开头表示为隐藏文件
修改权限
chmod
chmod <n1n2n3> <File Name> r | 4 |
w | 2 |
x | 1 |
- | 0 |
chmod <who><+/-/=><permission> <File Name> who :u、g、o、a(all)chown
chown [owner]:[owner_group] <File Name>- 权限掩码(umask)
创建文件时在预设权限中减掉umask值对应的权限
默认umask
- root:022
- 普通用户:002
用
umask 修改的是当前用户的umask,且不改变夏梓桐文件,是临时设置,重启后恢复默认- 特殊权限位
- SUID
- SGID
- SBIT
执行文件时,临时变成“文件所有者”身份运行
s 出现在 user 的 x 位(-rwsr-xr-x)使用
chmod 时在三位数字前加 4 :chmod 4755 file对文件:执行时使用“文件所属组权限”
对目录:新建文件自动继承目录的组
s 出现在group的 x 位(-rwxr-sr-x)使用
chmod 时在三位数字前加 2 :chmod 2755 file只对目录有效:该目录中的文件只能被文件所有者和root删除
t 出现在other的第x位(drwxrwxrwt )使用
chmod 时在三位数字前加 1 :chmod 1755 file常用命令
ls
-a :列出目录下的所有文件,包括以.开头的隐含文件;
-l :列出文件的详细信息;
-k:以k字节的形式表示文件的大小;
-t:以时间排序cat
-n: 由 1 开始对所有输出的行数编号-b: 和 -n 相似 ,只不过对于空白行不编号。-s: 当遇到有连续两行以上的空白行 ,就代换为一行的空白行cat file2 file1>file3 :把file 1和file 2文件的内容合并为file 3head
显示文件前10行
-n num: 显示指定文件的前num行-c num: 显示指定文件的前num个字符。-num: 从倒数第num行开始显示指定文件的内容more/less
分屏显示文件内容
硬链接
多个名字指向同一个文件实体
= 多个文件名,1个inode
只有把一个inode的全部硬链接删除,文件才真正消失
ln file1 file2符号链接
一个文件指向另一个文件的“路径”
类似快捷方式
ls 中有->ln -s file1 link1文件压缩与归档
gzip
生成
.gz 文件bzip2
生成
.bz2 文件xz
生成
.xz 文件tar
-c:创建新的文件。如果用户想备份一个目录或一些文件,就要选择这个选项。-f:指定备份文件名。-t:列出备份文件的内容,查看已经备份的文件。-x:从备份文件中还原文件。-v:显示指令执行过程。-r:添加文件到归档包文件的尾部-C:解压到指定的目录dir-z:用gzip来压缩/解压缩文件,加上该选项后可以将文件进行压缩,但还原时也要用该选项进行解压缩。Vi编辑器
按键 | 作用 |
i | 在光标前插入 |
a | 在光标后插入 |
o | 下一行插入新行 |
I | 行首插入 |
A | 行尾插入 |
移动光标
按键 | 作用 |
h | 左 |
l | 右 |
j | 下 |
k | 上 |
数字+空格 | 右移n个字符 |
数字+回车 | 下移n行 |
0 | 移到行首 |
$ | 移到行尾 |
gg | 移到开头 |
数字+G | 移到第n行 |
G | 移到尾行 |
删除
按键 | 作用 | 例子 |
x | 后删[del] | ㅤ |
X | 前删[Backspace] | ㅤ |
dd | 删除整行 | ㅤ |
数字+dd | 向下删除n行 | ㅤ |
d+范围 | 选中删除 | d1G :删除光标到第一行
d$ :删除光标到本行尾 |
dw | 删除一个单词 | ㅤ |
复制/粘贴
按键 | 作用 |
yy | 复制一行 |
数字+yy | 向下复制n行 |
y+范围 | 选中复制 |
p | 粘贴到下一行 |
P | 粘贴到上一行 |
撤销
按键 | 作用 |
u | 撤销 |
Ctrl + r | 重做 |
命令 | 作用 |
:w | 保存 |
:q | 退出 |
:wq | 保存并退出 |
:q! | 强制退出不保存 |
ZZ | = :wq |
set nu | 显示行号 |
set nonu | 隐藏行号 |
搜索
向下搜索 hello
向上搜索
替换(substitute)
范围:
1,$:第一行到最后一行
100, 200:100~200行
%:全文
参数:
- 不写:每行只替换第一个
g:一行内所有匹配都替换
c:每次替换前确认
库
静态库(.a)
a:archive
每个程序都有自己的一份库代码,不共享内存
ar :archiver :replacec :creates :symbol index,创建索引调用
-L :在后面的目录找库,这里是. 所以是当前目录-lmylib :使用 libmylib.so动态库(.so)
so:shared object
内核可以把一个库映射到多个进程的内存,节省空间
f :flag(不用管)PIC :Position Independent Code(位置无关代码)命名规范
lib + 名字 + .a 使用时:
-l名字Git
初始化:
git init工作区(Working Directory)
正在改的文件
加入缓存区
暂存区(Staging Area)
准备提交的“草稿箱”
提交
仓库(Repository)
正式历史记录(永久存档)
查看历史
Make
Makefile
一般格式
前置条件与命令至少存在一个即可
- target:本质上是要生成的目标
- 如果是多个文件 用空格分开
- 也可以是操作
如果是操作,可在前面加上
.PHONY 防止混淆(避免当前目录有同名文件)- prerequisites
- 通常是⼀组⽂件名,之间⽤空格分隔。它指定了“⽬标”是否重新构建的判断标准: 只要⼀个前置⽂件不存在,或者更新过,“⽬标”就需要重新构建。
- 在执行到这个目标时,先检查前置条件是否存在且为最新,否则生成或重建
- command
- 每行命令都是在一个单独的Shell中运行,没有继承关系;
- 使用
;在同一行写即可继承 - 使用
;\换行也可继承 - 在文件开头写
.ONESHELL:,即可让整个命令块在同一个Shell中执行
一整套
target + prerequisites + command 是一个规则变量系统
本质上来说是把所有“变量”在当前命令执行前替换/字符串展开
有局部变量和全局变量
- 定义
- 使用
- 自动变量(automatic variable)
$@:target$<:第一个前置条件$^:全部前置条件$?:所有比target时间戳新的前置条件
通配符
*
任意长度
?
一个字符
[...]
字符集合
用户与群组管理
UID
0:root
1~999:系统用户
1000~:普通用户
在 Linux 系统中,创建用户账户时通常会自动创建一个与用户名相同的主组,该组作为用户的主群组使用。
/etc/passwd
在Linux系统中,所创建的用户账户及其相关信息(密码除外)
内容格式:
用户名:加密口令:UID:GID:用户的描述信息:主目录:命令解释器(登录shell) 所有用户都有读权限
/etc/shadow
经过加密后的密码,只对root可读
内容格式:
字段 | 含义 |
1 | 用户名(username) |
2 | 加密后的密码(password hash), * 表示非登录用户,!! 表示没有设置密码 |
3 | 上次修改密码的时间(last password change) |
4 | 最小使用天数(min days) |
5 | 最大使用天数(max days) |
6 | 密码过期前警告天数(warn days) |
7 | 过期后还能用多久(inactive days) |
8 | 账户过期时间(expire date) |
9 | 保留字段(reserved) |
用户账户管理
新建用户
useradd [] <username> -d :指定主目录-f inactive_days :过期多久后停用,若为-1 则不会停用修改口令
passwd [选项] [username] root直接
passwd 即可修改root密码进程
ps
查看进程
-e :全部进程-f :完全显示nice
nice值越高,优先级越低
在进程开始时修改
只有 root 才有权限提高一个进程的优先权,即降低nice值。
renice :运行中修改进程nice值Shell
Shell变量
调用:
${name} 或$name双引号内的可以调用,单引号内的完全原样输出
赋值:不能有空格(
name=BarryZed)可以累加(
PATH="$PATH":/home/bin )read [] name -p :prompt-t :wait time设为环境变量:
export PATH取消变量:
unset PATH命令的别名
alias 别名='指令 选项' 取消别名:
unalias 别名输入输出重定向
> :擦除重写>> :接着写2> :擦出重写错误结果2>> :接着写错误结果< :从单个文件输入<< :从当前shell输入多行(从EOF 到EOF )多命令间的逻辑关系
cmd1 && cmd2 :1正确,则执行2cmd1 || cmd2 :1错误,则执行2$? :保存“上一个命令”的退出状态(exit status)(0为成功)管道命令
cut
cut -d ":" -f 1,3,7 /etc/passwd :指定分隔符(delimiter),取第1、3、7列(field)grep
grep "hello" test.txt :找出所有包含 hello 的行(输出整行)-i :忽略大小写-n :输出行和行号-v :输出补集sort
-b :忽略前导空格-n :按数值大小-u :去重-r :逆序-t :分割栏位字符,-k 栏数 正则表达式
^ :匹配行首$ :匹配行尾[^] :匹配[^字符]之外的任意一个字符\{n,m\}:匹配连续n到m个前一个字符a{n,m} :a至少出现n次,至多出现m次[0-9]{3,5} :3-5位数b{n} :b出现n次[:alnum:] 匹配任意一个字母或数字字符
[:alpha:] 匹配任意一个字母字符(包括大小写字母)
[:blank:] 空格与制表符(横向和纵向)
[:digit:] 匹配任意一个数字字符
[:lower:] 匹配小写字母
[:upper:] 匹配大写字母
[:punct:] 匹配标点符号
[:space:] 匹配一个包括换行符、回车等在内的所有空白符
[:graph:] 匹配任何一个可以看得见的且可以打印的字符(不包括空格)
[:xdigit:]任何一个十六进制数(即:0-9,a-f,A-F)
[:cntrl:] 任何一个控制字符(ASCII字符集中的前32个字符)
[:print:] 任何一个可以打印的字符- 作者:BarryZed
- 链接:
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。









.jpg?table=block&id=2cb05109-5451-8092-a42a-ffaf40797495&t=2cb05109-5451-8092-a42a-ffaf40797495)