�>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
- 一般文件操作
- useradd alex 创建新用户 Alex
- passwd alex Apasswd123 给用户 alex 设置密码为 Apasswd123
- userdel alex 删除这个用户
- rm -rf alex 删除这个用户下的所有文件
- PATH="${PATH}:/root" // 把 /root 加入环境变量里
- echo $PATH // 查看环境变量里都有哪些文件
- cp -a (属性全复制) -i (存在询问是否覆盖) -r(复制目录跟目录下的内容会改变属性,也可用-a) -l(硬链接) -s(软链接) -u(目标文件与源文件有差异时复制) -d(链接文件,复制过来还是链接文件**不加-d 复制过来的是真正文件)
- rm -f(不存在的文件也不产生警告) -i(询问是否删除) -r(递归删除,危险的操作)
- ctrl + c 快捷键,可以终止一些终端的等待操作(比如下载等待...)
- mv -f(force 强制) -i(询问) -u (update 目标文件已存在,源文件比较新才会执行)
- pwd 显示当前目录的路径
- 文件权限属性
- 查看文件: cat nl more less head(head -n 10 文件 : 截取前10行显示) tail od(读取二进制文件)
- mtime -> 文件的修改时间 ctime -> 状态时间 atime 读取时间
- touch 可以修改文件的时间
- umask 建文件时默认的权限(展示的是减后的状态值后三位)
- chattr [+-=] [ASacdisu] 设置文件隐藏属性 重点说明: +i文件不能修改 +a 文件只能增加不能进行其他修改操作(日志文件)
- lsattr [-adR] 文件名或目录 显示文件的隐藏属性
- 文件的特殊权限 SUID SGID SBIT (linux 私房菜 198 页)
- file 查看文件类型
- owner 拥有者 ,group 用户组 , other 其他用户
- chgrp [-R] 文件 修改文件所属用户组 -R 递归修改目录内的文件
example: chgrp users /root/test 修改test 文件所属的用户组为 users - chown 修改文件的拥有者
- chmod 修改文件的权限 读read 权限 对应数字4 ,写write权限 对应数字2 ,执行execute权限 对应数子 1
example : chmod 752 .bash 修改 .bash 文件的权限为 owner --> rwx , group --> r-x , other --> -w-
- 查找跟搜索
- which [-a] 查找执行文件(命令)的完整目录
- whereis 只找系统内特定目录下的文件 (可以使用 -l 查看找的那几个目录)
- locate [-ir] keyword 查找 mlocate.db 数据库中的数据 数据库中的数据未必是最新数据,可以用updatedb 命令来更新数据库
- find / -mtime 0 查看一天内修改过的文件
- find /etc -newer /etc/passwd 找出比 passwd 更新的文件
- find /home -user dmtsai 查找 /home 下属于用户 dmtsai 的文件
- find / -name passwd 找出文件名为passwd 的这个文件
- find / -name "*passwd*" 找出文件名中包含passwd 的文件
- find /run -type s 找出/run 目录下文件类型为socket的文件名有哪些
文件类型大致有: 一般正规文件 f ; 设备文件(b,c); 目录 d ; 链接文件 l ; socket s ;FIFO p; - find /usr/bin /usr/sbin -perm /6000 查找两个目录下的有SUID 跟 SGID 这两个特殊权限的文件
- find /usr/bin -perm /7000 -exec ls -l { } ; -exec 到 \ 之间 为额为的命令 { }代表的是find 查找出来的文件
- 硬盘操作
- dumpe2fs 查看ext2类型的文件系统的相关信息
- ls -l /lib/modules/$(uname -r)/kernel/fs 查看你的Linux 支持的哪些文件系统
- cat /proc/filesystems 系统目前已经加载到内存中支持的文件系统
- df [-ahikHTm] [目录或文件名] 列出文件系统的整体磁盘使用量
- du [-ahskm] 文件或目录名字 查看目录所占磁盘空间
- ln [-sf] 源文件路径 目标文件 加-s 软连接(源文件如果删了链接文件就打不开了) 什么都不加是硬链接(源文件删了也没事,但是不能链接目录文件)-f如果目标文件存在,主动的删除重建
- lsblk [-dfimpt] [device] 列出系统上所有的磁盘列表 -f 列出文件系统名称UUID 信息 -p 展示全路径 -d 仅列磁盘本身不列分区内容
- blkid 显示出目前系统被格式化的设备(UUID展示)
- parted /dev/sda print 列出磁盘的分区表类型与分区信息
- gdisk/fdisk 磁盘分区命令 gdisk 是GPT 分区磁盘使用(现在磁盘几乎都是GPT分区,fdisk是MBR分区磁盘几乎被淘汰)进入命令函数,敲?即可查看提示命令 q 离开
- partprobe -s 更新linux内核的分区表信息
vi编辑器
一般命令模式 , 编辑模式 , 命令行模式 ,i 一般 进入 编辑模式 ,esc 编辑退 回一般模式 , :、/ 、? 一般进入命令行模式 。一般模式是中间状态,从编辑模式不能直接进入命令行模式
h、j、k、l 对应 光标 向左 、向下、向上、向右 移动,←↓↑→ 键同效果,输入数字再按方向键,可以让光标对应移动相应距离example: 输入 20 再按 j 光标向下移动20行
[ctrl] + f 向下翻页 相当于 [Page Down] 按钮 , [ctrl] + b 向上翻页
0 光标移动到这一行的行首 ,$ 移到行尾
G 移动到文件的最后一行 输入数字 10 再 按 G 移动到文本的第10行
/word 向下寻找 word, ?word 向上寻找 word , n 重复上一次命令的查找 , N 上一次查找的反方向查找
:n1,n2s/word/word1/g n1 到n2 行之间查找到word 并把它替换成 word1
:1,$s/word/word1/g 第一行到最后一行 查找替换
:1,$s/word/word1gc 替换 并且在每一次替换时询问是否进行替换
一般模式下: x向后删除,X 向前删除一个字符 ,输入数字10 再按 x 删除光标后连续10个字符, 按X 删除光标前10个字符
dd 删除光标所在那一整行, yy 复制
ndd n为数字删除光标向下n 行 ,nyy 复制
d1G 删除光标所在到第一行的数据 , y1G 复制
dG 删除光标到最后一行的数据 , yG 复制
d0 删除光标所在到这行最前面的字符 , y0 复制
d$ 删除光标所在到这行末尾 , y$ 复制
p 把复制的内在粘贴到光标之后,P 复制到光标之前
u 回复上一个操作(撤销),[ctrl] + r 重做前一个操作 , . 点也是重做前一个操作
:set nu 设置行号, :set noun 取消行号
:w [filename] 另存为一个文件
:r [filename] 把另一个文件内容读入光标处
在一般命令模式下按v 会进入可视化区块模式,这个时候光标移动过的地方会反白 ,按 y 可以将反白的地方复制下来, d 将泛白的地方删除 , p 粘贴。
vim 后跟多个文件可以一次性打开多个文件 , :w 保存写入的内容 ,:n 编辑下一个文件 , :N 编辑上一个文件。 :files 列出目前打开的所有文件
:sp {filename} 打开多窗口 , 如果不跟文件名,就是自己本身的文件再开一个窗口展示, 【ctrl】+ w + ↑ ,【ctrl】+ w + ↓ 来上下移动鼠标进入对应的窗口操作, 【ctrl】+ w + q 退出正在操作的窗口
vim 语法补全功能, 【ctrl】+ x --> 【ctrl】+ n 根据上下文进行代码补全
【ctrl】+ x --> 【ctrl】+ o 以vim 内置的关机词进行代码补全,(该功能是根据文件名来的,比如你想要进行html 的标签补全,文件要是以 .html 结尾文件)-
vim 总的环境设置文件是 /etc/vimrc ,单独的环境配置是 ~/.vimrc(这个文件默认不存在需要你手动建立,这个文件编写的时候 "" 双引号是注释的意思)
bash Shell
alias 查看命令别名,alias lm='ls -al' 设置ls -al 命令的别名为 lm
type + 命令 可以查看该命令是shell 内部命令builtin 还是别名alias 还是外部命令file
当命令过长时,输入反斜杠 \ 紧跟【return】按钮可以进行换行
【ctrl】+ u 光标处向前删除命令串 【ctrl】+ k 光标处向后删除命令串
【ctrl】+ a 光标移动到最前面 【ctrl】+ e 光标移动到最末尾
echo $PATH ,查看 $PATH 变量
myname=zhangsan 就在设置了变量 myname的内容为zhangsan 了(注意中间不能有空格)变量不能以数字开头,双引号内可以以$开头引用变量,单引号内不行,export MYNAME 可以将 MYNAME 变成环境变量(环境变量一般都是大写) , unset myname 取消变量 myname 变量
bash 进入子程序,exit 退出子程序
在一串命令中想使用其他命令,`命令` 或 $(命令) 。example1: cd /lib/modules/`uname -r`/kernel 或 cd /lib/modules/$(uname -r)/kernel 进入内核的模块目录 ,其中 uname -r 是版本输出的命令
example2: ls -ld $(locate crontab) locate 是列出所有相关文件的文件名 ,这个命令串是列出所有crontab 相关文件的文件名跟权限。env 展示所有的环境变量
set 展示所有的变量,包括环境变量跟自定义变量
PS1 变量是命令提示符展示形式 [root@bogon home]$ 这个东西,可以用man bash 去查看它的相关设置
“ $ ” 是shell 进程的PID 你可以 echo $$ 试试看
“ ? ” 关于上一个命令的执行结果,如果执行正确了就 返回 0 ,执行错误可以根据相关的软件排错
locale 语系变量
history , history 10 ,查看10条历史命令, !61 执行第61 条命令, !en 执行最近的以en 开头的命令
name=${mm-kunge} 如果没有mm 变量 name 变量被赋值为kunge 如果mm 变量为空字符串 name 变量为空,如果mm 变量为mengge name 变量为mengge
source ~/.bashrc 把文件 ~/.bashrc 的配置文件读取到shell 环境中 (source 也可以用 "." 来代替)
stty -a 展示所有的bash 操作快捷键
快捷键 : ctrl + c 终止目前命令 , ctrl + U 将整列命令删除
通配符与特殊字符
1 : * 代表0到无穷多个任意字符
2 : ? 代表一定有一个任意字符
3 : [] 一定有一个[]内的字符 ,example: [abcd] 代表一定有abcd 中的一个字符 可能是a,b,c,d 中的任何一个。
4 :[-] example : [0-9] 代表0到9之间的所有数子
5 : [^] 反向选择, example : [^abc] 代表一定有一个字符,只要不是a,b,c 的其他字符都可以
6 : 数据流重定向 , > 输出定向,会覆盖之前的内容,>> 定向输入,累加,不会覆盖之前的内容,(2> ,2>> 对应是standard error out 错误输出的重定向) 。< 输入定向 , << 输入定向,后面加结束字符。
example:查找/home 文件下的.bashrc 文件,并把正常错误信息输出到list_info 文件内: find /home -name .bashrc 2>&1 list_info (也可写 &> )
查找/home 文件下的.bashrc 文件,并把正常信息输出到list_right 文件内 错误信息输出到 list_error 文件内 :find /home -name .bashrc > list_right 2> list_error
输入重定向: cat > catfile < ~/.bashrc ,把~/.bashrc 文件 重定向输入进 catfile 文件内,键盘输入内容也可以,cat > catfile << "eof" 以 “eof”结束输入
7 : | 管道命令
8 : ' ' 单引号不具备变量替换功能
9 : " " 双引号具备变量替换功能
10 : ( ) 中间为子 shell 的起始与结束
11 : { } 中间为子命令区块的组合cut -d ":" -f 3 展示的数据以 ":" 分割,只展示第3段数据 , -c 切割数据格式比较整齐的数据,对行数据进行处理
example: echo ${PATH} | cut -d ":" -f 3 ,输出全局变量文件的第3个文件路径
example: export | cut -c 12-20 , 输出每一行的第12到20个字符。grep -a : 将二进制文件以文本文件的方式查找数据。
-c : 计算找到‘查找字符’的次数
-i : 忽略大小写的不同,所以大小写视为相同
-n : 顺便输出行号
-v : 反向选择,亦即显示出没有‘查找字符’的那一行
--color=auto : 可以将找到的关键字部分加上颜色显示sort -f : 忽略大小写的差异
-b : 忽略最前面的空格字符部分
-M : 以月份的名字来排序
-n : 使用纯数字进行排序(默认是以文字的形式来排序的)
-r : 反向排序
-u : 就是uniq 相同的数据中,仅出现一行代表
-t : 分隔符号,默认是用tab 键来分隔
-k : 以哪个区间来进行排序的意思uniq 去重
wc -l : 列出有多少行
-w : 列出有多少字
-m : 列出有多少字符tee : 双向重定向 -a :以累加的方式把输出到屏幕的东西同时存入某个文件
example : last | tee last.list | cut -d " " -f 1 // last 输出的系统登录人信息在显 示到屏幕的同时也往last.list 文件内存一份,还不耽误后面的管道命令tr -d 'set' :删除文件中的 set 字符
-s : 替换字符
example : last | tr '[a-z]' '[A-Z]' 小写变大写col :讲tab 转为空格
join : 处理两个文件当中,有相同数据的那一行,才将它加在一起
paste : join需要对比两个文件数据的相关性,paste 直接将他们贴在一起用tab 隔开
expand:将tab 转空格sed -n : 使用安静(silent)模式,之有经过sed 特殊处理过的那一行才会被现实到屏幕上。
-e: 直接在命令行模式上进行sed的操作编辑。
-f: 直接将sed操作写到一个文件内,跟filename则可以执行filename内的sed操作。
-r: 使用扩展型表达式。
-i: 直接修改文件的内容而不是屏幕输出。
n1,n2: 操作选择行内的。
a: 新增 ,example: sed '2a drink tea' , drink tea 就会被新增到下一行
d: 删除,example: sed '2,4d' , 会删除第二到四行的数据。
c: 替换,后面跟字符串 example: sed '2,5c no I`m good' ,第二行到第五行就会替换成 no I`m good
i: 插入,会在上一行插入数据。
p: 打印
s:替换,搭配正则表达式,printf ,格式化输出。
awk ,主要处理每一行的字段内的数据
awk '条件类型1 {操作1} 条件类型2 {操作2} ...' filename
NF : 每一行$0 拥有的字段总数
NR : 目前 awk 所处理的是第几行数据
FS : 目前的分隔字符,默认是空格键。
- shell 脚本
- sh 执行脚本,是开一个子线程执行,声明的变量也不会变成全局变量,source 执行脚本就是在父进程中执行
-
test 测试功能,偷个懒 ^_^