Linux基本命令大总结

时间:2024-04-17 10:10:18

写在开头的话:本文是本人对自我学习Linux过程中的总结笔记,纯属原创。原创不易,请勿随意转载。


java:1995 SUN公司
unix:1969 AT&T的贝尔实验室
linux:1991
linux之父:李纳斯·托尔兹(Linus Torvalds)

1.常用命令

  • uname -a:详细显示内核版本
  • uname -r: 简单显示内核版本
  • ulimit -a:查看内核相关的限制参数
  • cat /etc/issue:查看系统版本
  • echo $SHELL:查看默认的shell是那种
  • cat /etc/shells:查看系统里有多少种shell可以使用
  • free -m:以M为单位显示内存的使用情况
  • cat /proc/cpuinfo:查看cpu的信息
  • cat /proc/meminfo:查看内存信息
  • echo $$:查看当前shell的进程号
  • ps aux:查看当前系统进程信息,aux 是选项,ax显示所有的进程
  • bash:执行一个bash程序–》开启一个shell
  • env:查看系统里的环境变量
  • set:查看系统里的变量(环境变量和自定义变量)
  • lsof -i:80 查看80端口被谁占用
  • who:登录的终端号
  • w:查看当前系统有多少用户登录,并且正在使用的命令
  • uptime:查看系统开机了多长时间了
  • top:查看进程占用率
  • free:查看内存使用率
  • 语言的扩展:
# LANG=en_US.UTF-8    
修改语言编码为美式英语编码 US 代表美国 United States
# LANG=zh_CN.UTF-8  
修改语言编码为简体中文 zh 中国 CN china
# LANG=zh_TW.UTF-8  
修改语言编码为繁体中文 zh 中国 TW *
修改下面的文件里的编码,可以更改语言
# vim  /etc/sysconfig/i18n 
# cat /etc/sysconfig/i18n 
LANG="zh_CN.UTF-8"

2 主机名

hostname liupeng 更改主机名为liupeng(临时)
hostname 查看主机名
法①

  • 进setup里改–网络配置–dns配置–主机名 (永久)

法②

vim  /etc/sysconfig/network
NETWORKING=yes
HOSTNAME=liupeng

3 用户

  • useradd lp 新建普通用户lp
  • su - root 切换root用户
  • su - lp 切换用户lp登录系统
  • exit 注销系统/退出当前普通用户
  • 关于ip

    • ip add 查看当前使用的IP地址
    • ifconfig eth0 172.16.70.125 把eth0网卡临时设置成此IP

4 命令行编辑的几个辅助操作

  • Tab键:自动补齐
  • Ctrl+C:终止当前进程
  • Ctrl+D: 输入结束
  • Ctrl+L:清屏
  • Ctrl+K:删除从光标到行末所有字符
  • Ctrl+U:删除从光标处到行首的字符

5 文件系统基本命令

根下面的文件结构:

这里写图片描述

根目录下文件夹的作用:

  • /boot 存放系统的引导文件—》相当于windows里的c盘
  • /root 是root用户的家目录(一登录系统所在的文件夹)
  • /home 是普通用户的家目录
  • /etc 是存放配置文件(重要文件)
  • /dev 是存放设备文本 device
  • /bin 是存放可执行文件(系统里的命令)binary二进制文件
  • /sbin 是有重要权限的用户可以使用的命令存放的位置(超级用户使用的命令存放的位置,这样命令比较重要)—-》御用 super user binary
  • /usr 是linux下存放安装程序的目录 —》windows里的program files,unix system resource —》unix系统资源
  • /tmp 是存放临时文件的目录,任何用户都可以使用 temporary
  • /var 是存放可以变化的文件的目录。variable
  • /lib 是存放系统的库文件 library
  • /proc 是存放进程信息的(内核的信息也存放在此)

5.1 家目录和根目录

  • 根目录:/ 所有的文件和文件夹都在根目录下
  • 家目录:用户登录系统的时候进入的目录,不同的用户家目录的路径不一样

5.2 常规操作

  • 目录操作命令
    • pwd、cd、ls、mkdir、du
  • 文件操作命令
    • touch、file、cp、rm、mv、ln
  • 查找命令

    • which、whereis、locate、find
  • 文件内容操作命令

    • cat、more、less、head、tail
  • 归档及压缩命令
    • zip、gzip、bzip2、zcat、bzat、tar

5.2.1 常规目录操作

  • pwd 显示当前所在路径
  • cd 进入文件夹
    • . 当前目录
    • .. 上一级目录
    • ~ 用户主目录
    • - 上个工作目录
  • mkdir 新建文件夹
    • -p 没有父目录时,自动创建父目录,不报错
  • ls
    • 用途:列表(List)显示目录内容
    • 格式:ls [选项]… [目录或文件名]
      • -a 显示所有文件和文件夹(包括隐藏文件)
      • -l 长格式(详细信息,文件名,大小,时间,权限等)
      • -h 以人能看懂的方式呈现,例K、M、G human-readable
      • -d 显示目录本身的属性 directory
      • -t 按文件修改时间进行排序 time
      • -r 将目录的内容清单以英文字母顺序的逆序显示
      • -A 类似于“-a”,但不显示“.”和“..”目录的信息
      • -R 递归显示内容 recursive
        例子:
# ls -l
total 16
d rwxr-xr-x  4  root  root  4096 Sep 23 19:23 xiaodeng
文件类型  权限  链接数  用户 组  大小   创建时间       文件名
  • - :代表是普通的文件 d 代表目录
  • rw-r–r– :代表权限 read write execute(执行)
  • 4:文件的链接数
  • 第一个root 这个文件是属于那个用户的
  • 第二个root 这个文件是属于那个组的
  • 文件类型:
    • 常规文件 -
    • 目录 d (directory)
    • 符号链接 l (link) —-快捷方式
    • 字符设备节点 c(character)
    • 块设备节点 b(block) –磁盘设备

5.2.2 常规文件操作

  • du(统计目录及文件的空间占用情况)
  • 格式:du [选项]… [目录或文件名]
    • -a 统计时包括所有的文件,而不仅仅只统计目录
    • -h 以更易读的字节单位(K、M等)显示信息
    • -s 只统计每个参数所占用空间总的大小
  • touch 文件不存在时,新建空文件;文件存在时,更改文件时间
  • cp 复制
    • -r: 递归复制整个目录树
    • -a: 复制时保留链接、文件属性,并递归地复制目录
    • -i: 实现人机交互
    • -p: 连同档案的属性一起复制过去,而非使用预设属性
  • mv:
    • 移动(Move)文件或目录。若如果目标位置与源位置相同,则相当于改名。
  • file查看文件类型
    • 格式: file 文件名…
  • rm删除文件或目录
    • 格式:rm [选项]… 文件或目录
    • -f:强行删除文件或目录,不进行提醒
    • -r:递归删除整个目录树
  • awk 截取命令
awk    \'$1>4096000{print  "name is "$0""}\'
查看根目录下所有大于4G的文件(单位默认为K)

awk :

  • 是一个截取命令,可以根据某些条件进行判断,截取自己想要的内容。
  • $1 代表第一个字段,$2代表第二个字段 ……
  • $0 代表整行
  • print 是输出命令

  • ln命令

    • 链接文件=windows里的快捷方式
    • -s 作用:创建一个类似于windows里的快捷方式
# ln  -s  liupeng  pengpeng
          源文件   目标文件
# pwd -P  显示目标文件所在的真正的路径

5.2.3 文件内容查看命令

  • cat:显示出文件的全部内容
    • 格式:cat -n 文件名
  • tac:从最后一行倒着显示出文件的全部内容

  • more:全屏方式分页显示文件内容

    • 交互操作方法:
      • 按Enter键向下逐行滚动
      • 按空格键向下翻一屏、按b键向上翻一屏
      • 按q键退出
  • less:全屏方式分页显示文件内容,但扩展功能更多

    • 交互操作方法:
      • 与more命令基本类似,但个别操作会有些出入
      • 【page down】【page up】上翻下翻页
  • tail

    • tail -n +3 /etc/passwd 从第三行开始显示
    • tail -n -3 /etc/passwd 显示最后三行
  • head
    • head -n -3 /etc/passwd 不显示最后三行
    • head -n +3 /etc/passwd 显示前三行
  • sed:对文本文件进行处理的命令
    • # cat -n messages |sed -n ‘1,3p’ 显示1到3行
    • # cat -n messages |sed -n ‘1p;3p;5p’ 显示第1行、第3行、第5行,p输出相关的内容到屏幕上(print)

5.2.4 文件查找

  • [ -d /LP ] :查找根目录下的LP文件夹
  • which (查不到shell内部命令,比如cd命令)
    • 用途:查找可执行文件并显示所在的位置,搜索范围由 PATH 环境变量指定;
    • 格式:which 命令或程序名
  • whereis:查找文件的路径、该文件的帮助文件路径,原理和which类似
    • 格式:whereis 命令或程序名
  • locate命令
    • 格式:locate 文件名
    • 根据每天更新的数据库(/var/lib/mlocate)查找,速度块,不能找到自己新建的文件但会找到已经删除的文件,手动更新数据库updatedb。
  • find命令:用于查找文件或目录
    • 格式:find [查找范围] [查找条件] [动作]
    • 常用查找条件
      • -name: 按文件名称查找
      • -size: 按文件大小查找
      • -user: 按文件属主查找
      • -type: 按文件类型查找
      • -perm: 按文件权限查找
      • -mtime: 按文件更改时间查找
      • -newer: 按比某个文件更新的查找
    • 特殊查找条件
      • -o :逻辑或,只要所给的条件中有一个满足,寻找条件就算满足
      • -not :逻辑非,在命令中可用“!”表示。该运算符表示查找不满足所给条件的文件
      • -a:逻辑与,系统默认是与,可不加,表示只有当所给的条件都满足时,寻找条件才算满足。
    • -type 类型
      • f:(file) 普通文件
      • d:(directory) 目录(文件夹)
      • c:字符设备(character)
      • b:块设备 (block)
      • l:(link) 链接文件
      • p:管道 pipe
    • find高级用法
      例子:
# find /boot -size +1024k -o -name “vmlinuz*”  
在/boot下查找大小大于1024K或者名为vmlinuz开头的文件或目录。

# find /home -user hello -exec ls -ld {} \;    
在/home下查找属于hello用户的文件或目录,并且显示出来
  • 常用动作

    • -exec:将find查找的结果交给-exec后面的命令执行
    • -ok:比-exec动作多了一个确认

      例:

    • find /home -user hello -exec ls -ld {} \;

    • find /usr -mtime 4 表示4天前那一天
    • find /usr -mtime -4 表示4天内
    • find /usr -mtime +4 表示4天前
      这里写图片描述

5.2.5 文件压缩

  • zip:制作 .zip格式压缩文件
    • 格式:zip 压缩文件名 文件1 文件2
  • unzip [-l] 文件名

  • gzip:制作 .gz格式压缩文件、解开.gz压缩文件

    • 格式:gzip [-9] 文件名…
    • 常用命令选项:
      • -9:表示高压缩比,取值1-9,默认为6
      • -d:用于解压缩文件,同gunzip命令
      • -c:将输出重定向到标准输出
  • gunzip:对.gz格式压缩文件进行解压缩

    • 格式:gunzip hosts.gz
  • zcat:不解压查看压缩文件内容

    • 格式:zcat 压缩文件名
  • bzip2:制作 .bz2 格式的压缩文件、解开压缩文件
    • 格式:bzip2 [-9] 文件名…
      • 常用命令选项:
        • -9:表示高压缩比,取值1-9,默认为6
        • -d:用于解压缩文件,同bunzip2命令
        • -c:将输出重定向到标准输出
  • bzcat:查看 .bz2 格式压缩文件内容
    • 格式:bzcat 压缩文件名

小总结:

  • zip:另外新建一个压缩文件,不在源文件上操作
  • gzip:直接在源文件上操作压缩
  • bzip2:直接在源文件上操作压缩
    三个命令都只能对文件进行压缩,不能对文件夹进行压缩

5.2.6 文件归档

  • tar(☆☆☆☆☆)
    • 用途:制作归档文件、释放归档文件
    • 格式:
      • tar [选项]… 归档文件名 源文件或目录
      • tar [选项]… 归档文件名 [-C 目标目录]
    • 常用命令选项:
      • -c:创建 .tar 格式的包文件
      • -x:解开.tar格式的包文件
      • -v:输出详细信息
      • -f:表示使用归档文件
      • -t:列表查看包内的文件
      • -p:保持原文件的原来属性
      • -P:保持原文件的绝对路径
      • -r :添加文件到已压缩的文件
      • -u:添加改变了和现有的文件到已经存在的压缩文件
      • -A:新建压缩文件到已存在的压缩文件–》合并多个压缩文件
      • -C:建包或解包时进入指定的目标文件夹
      • -z:调用gzip程序进行压缩或解压
      • -j:调用bzip2程序进行压缩或解压
      • 常用:
      • cjvf —>.tar.bz2
      • czvf —>.tar.gz
      • cJvf —>.tar.xz

注意事项

  • 一定要注意绝对路径和相对路径问题,推荐使用相对路径。
  • 使用z或j压缩的文件,解压缩的时候不需要加上z或j,tar直接可以识别。
  • tar对目录和文件都可以进行操作,gzip和bzip2只能对文件进行操作。

压缩对比例子:

# ll
总用量 336
-rw-r--r-- 1 root root    326 12月 17 08:19 hosts
-rw------- 1 root root 229215 12月 17 08:11 messages
-rw-r--r-- 1 root root  30276 12月 17 08:19 messages_passwd.tar.gz
-rw-r--r-- 1 root root  18382 12月 17 08:25 messages.tar.bz2
-rw-r--r-- 1 root root  28829 12月 17 08:24 messages.tar.gz
-rw-r--r-- 1 root root  15156 12月 17 08:25 messages.tar.xz
-rw-r--r-- 1 root root   3242 12月 17 08:11 passwd
-rw-r--r-- 1 root root   1256 12月 17 08:22 passwd.tar.gz

可以得到结论,当文件为200M左右时,压缩效果:xz 好于 bzip2 好于 gz
PS:

  • xf 可以解压.tar.gz .tar.bz2 .tar.xz 的压缩包;
  • 解压文件的时候,解压出来的文件默认情况下放在当前目录,如果当前目录下有相同的文件,后来解压出来的文件会替换原来的文件。
# tar xf messages.tar.bz2
解压messages.tar.bz2文件,存放在当前目录下
# tar xvf messages.tar.bz2 
messages
# tar  xf  messages.tar.bz2  -C  /liuzhuang/
将当前目录下的messages.tar.bz2解压到/liuzhuang目录下备份            
b_time=`date +%F-%H_%M_%S`             
#获得当时的时间
tar  czf /bak/$b_time-log.tar.gz  /var/log     
#备份/var/log到/bak
find  /bak  -mtime +7  -exec rm -rf {} \;    
#删除7天前的文件

5.2.7 文本编辑器的使用

5.2.7.1 Linux中最常用的文本编辑器

vi:类Unix系统中默认的文本编辑器
vim:vi编辑器的增强版本,习惯上也称为vi
设置别名,以便执行vi时自动调用增强版编辑器

# alias vi=\'/usr/bin/vim\' 
# which vi 
alias vi=\'/usr/bin/vim\'         
/usr/bin/vim 

5.2.7.2 五种模式及其转换

这里写图片描述

5.2.7.3 插入的方法

  • i:当前位置插入内容
    • a:append,光标后退一格进入插入模式
    • o:在光标所在行下,新起一行并进入插入模式

5.2.7.4 退出vim编辑器的方法

  • :q 如果未对文件做改动则退出
  • :q! 放弃保存并退出
  • :wq 保存当前文件并退出
  • :x 保存当前文件并退出
  • :wq! 强制保存当前文件并退出
  • :x! 强制保存当前文件并退出
  • :w 保存
  • :w 路径 —(另存为)
  • :X 加密码
  • ZZ 在命令模式下使用,退出并且保存
  • 退出最好使用:wq

5.2.7.5 光标跳转

  • 翻页
    • Page Down或Ctrl+F:向下翻动一整页
    • Page Up或Ctrl+B:向上翻动一整页
  • 行内快速跳转
    • Home键或者”^”、数字”0”:跳转至行首
    • End键或”$”:跳转到行尾
  • 行间快速跳转
    • 1G或者gg:跳转到文件的首行
    • G:跳转到文件的末尾行
    • #G:跳转到文件中的第#行

光标扩展知识:

  • :syntax enable 开启语法颜色显示效果
  • :syntax off 关闭语法颜色显示效果
  • :set hlsearch 开启查找文字的高亮效果 (high light)
  • :set nohlsearch 关闭查找文字的高亮效果
  • :set cursorline 显示下划线的效果(光标所在行)
  • :set cursorcolumn 显示光标所在的列

5.2.7.6 删除、复制、粘贴

  • 删除
    • x或Del:删除光标处的单个字符
    • dd:删除当前光标所在行
    • #dd:删除从光标处开始的#行内容
    • d^ :删除当前光标之前到行首的所有字符
    • d$ :删除当前光标处到行尾的所有字符
  • 复制
    • yy:复制当前行整行的内容
    • #yy:复制从光标处开始的#行内容
  • 粘贴
    • p:将内容粘贴到光标位置处之后
    • P:粘贴到光标位置之前

文件内容查找:

操作键 功能
/word 从上而下在文件中查找字符串”word”
?word 从下而上在文件中查找字符串”word”
n 定位下一个匹配的被查找字符串
N 定位上一个匹配的被查找字符串

5.2.7.7 撤销编辑

  • u 按一次取消最近的一次操作,多次按—》恢复已进行的多步操作

  • U 用于取消对当前行所做的所有编辑

5.2.7.8 重复操作

  • 按.键

5.2.7.9 末行模式

  • 末行模式下设置一个Tab键=4个空格
  • :set ts=4(默认是八个)
  • 文件内容替换:
命令 功能
:s /old/new 将当前行中查找到的第一个字符”old”串替换为”new”
:s /old/new/g 将当前行中查找到的所有字符串”old”全部替换成”new”
:#,# s/old/new/g 在行号”#,#”范围内替换所有字符串”old”为”new”
:% s/old/new/g 在整个文件范围内替换所有的字符串”old”为”new”
:s /old/new/c 在替换命令末尾加入c命令,将对每个替换动作提示用户进行确认
  • 打开新文件或读入其他文件内容:
命令 功能
:e ~/install.log 打开新的文件进行编辑
:r /etc/filesystems 在当前文件中读入其他文件内容
  • 撤销和另存为:
命令 功能
:e! 撤销对文件的所有操作,重新开始
:w /tmp/hello.txt 把当前文件另存为/tmp目录下的hello.txt文件
  • 多文件操作:
    • 格式:vi 文件1 文件2 文件3
命令 功能
:n 编辑下一个文件
:N 编辑上一个文件
:files 列出vim打开的文件名
  • 行号显示:
命令 功能
:set nu 显示行号
:set nonu 取消显示行号

5.2.7.10 可视模式

  • 可视模式中的复制、删除:
命令 功能
x 剪切选中文本
y 复制选中文本
r 选中文本字符替换可一起替换其他字符
uU~ 分别是选中字符变小写、变大写、反转大小写

5.3 文件目录高级操作

5.3.1 标准输入和标准输出

  • 标准输入 0 键盘
  • 标准输出 1 显示器
  • 标准错误输出 2 显示器

5.3.2 重定向

# find / -user linghu -type f -size +1k 2>/dev/null
  • > 正确的输出重定向。将在屏幕上的输出,重新转到别的地方。乾坤大挪移 ,如果后面接的文件不存在,会自动新建。如果存在,会覆盖原文件里的内容。
  • >> 追加输出重定向。不覆盖原来的内容,只是在末尾追加进去。如果后面接的文件不存在,会自动新建。
  • 2> 错误的输出重定向。前面命令执行不成功或者出错的信息,重新定向到别的地方。
  • 2>> 追加错误的输出重定向。前面命令执行不成功或者出错的信息,重新定向到别的地方。不会覆盖原来文件里的内容。
  • << 输入重定向
# cat  >LP.txt  <<EOF
(新建一个LP.txt文档,并且往里面写入内容,且以EOF结束)
> wangnan
> dezhou
> EOF
  • /dev/null:过滤标准错误信息–》垃圾桶,任何信息重定向到这里都会没有,不保存—》黑洞
  • /dev/zero:用来创建指定长度文件 –》创造大文件,里面啥也没有,全是0
  • &> /dev/null 无论正确还是错误全部重定向到/dev/null(脚本里一般用此命令来清理多余的显示)

5.3.3 echo 输出命令

echo  $u_name  
输出u_name变量的值             
两种语法效果相同
# echo -e "\e[31mi am cali\e[0m"
# echo -e "\033[31mi am cali\033[0m"
i am cali (带颜色的)

5.3.4 管道

连接左右两个命令,将左侧的命令的标准输出,作为右侧命令的标准输入。
格式:cmd1 | cmd2 [… | cmdn]

  • 管道和标准错误:
find /etc –name “p*” | grep passwd  
find /etc –name “p*” | grep passwd > /tmp/aa 
find /etc –name “p*” | grep passwd 2> /tmp/aa 
find /etc –name “p*” | grep passwd &> /tmp/aa 
find /etc –name “p*” 2>/dev/null | grep passwd 

5.3.5 xargs

  • 用途:将参数列表转换成小块分段传递给其他命令。

这里写图片描述

5.3.6 seq

  • 用途:打印出一串有序的数字
  • 格式:seq [选项] 数字范围
    • -s:指定分隔符
    • -w:指定同等宽带输出

这里写图片描述

5.3.7 tr (☆☆☆☆☆)

字符转换工具。只能对stdin操作,不能直接对文件操作。

5.3.7.1 转换字符

  • tr set1 set2
  • 用set2中的字符替换掉set1中同一位置的字符。
  • 例子:
    • echo 123456 | tr 345 abc
    • tr 123 abc < aa
    • tr ‘[a-z]’ ‘[A-Z]’ < /etc/hosts
    • tr ‘:’ ‘\n’

5.3.7.2 删除字符

  • tr -d SET
  • 将stdin中数据流删除与SET相同的字符
    • echo 123456 | tr -d 345
    • tr -d ‘[0-9]’ < /etc/hosts
    • echo “Hello World” | tr -d ‘[a-z]’

5.3.7.3 压缩字符

  • tr -s SET
  • 将连续相同的字符压缩成一个字符
    • echo 112233444555666 | tr -s 345
  • tr -s SET1 SET2
  • 先替换为SET2再压缩
    • echo 112233444555666 | tr -s 345 abc
    • echo 112233444555666 | tr 345 abc | tr -s abc
  • tr -s ’ ’ ‘\t’

5.3.8 sort

  • 默认按每行的第一个字符排序
    • -n:按整数进行排序
    • -r:递减排序
  • 指定排序键:
    • 指定按哪一列数据进行排序
    • -k:指定哪一列为排序键
    • cat tt | sort -n -k4
  • 指定字段分隔符
    • -t:指定字段分隔符,默认是空格
    • sort -t: -n -k3 /etc/passwd

5.3.9 uniq(去重)

  • sort -n tt | uniq
  • 数据的实例统计:
    • -c:统计特定记录出现的次数
    • cat tt | uniq -c
    • -u:只显示唯一的行
    • cat tt | uniq -u
    • -d:只显示重复的行
    • cat tt | uniq -d

5.3.10 cut 数据提取

  • cut命令
    • 从文本文件或者文本流中提取文本列
    • cut -选项 提取范围 文本文件
  • 常见选项:
    • -c:从指定提取范围中提取字段
    • -f:从指定提取范围中提取字段
  • 提取范围:

    • n:第n项
    • n-:第n项到行尾
    • -m:行首到第m项
    • n,m:第n项和第m项
    • n-m:第n项到第m项
  • cut -c 命令例子:

    • ls -l | cut -c10
    • who | cut -c 20-40
    • cut -c -10 /etc/passwd
  • cut -f 命令例子:
    • -d:指定分隔符默认是Tab
    • cut -d “:” -f 1,7 /etc/passwd
    • who | cut -d ’ ’ -f1,6

5.3.11 wc 统计

  • wc(字数统计)命令
    • 格式:wc [选项]… 目标文件…
    • -l:统计行数
    • -w:统计字数(前后都是空白的一组字符)
    • -c:统计字符数(可见和不可见的字符)
[root@localhost~]# wc /etc/hosts
 4 23 185 /etc/hosts
 4行,23个单词,185个字节

5.3.12 diff 文本差异对比

  • diff命令

    • 比较两个文件之间的差异
      • 输出结果为两个文件的不同之处
  • diff命令的输出格式

    • 标准diff
    • -u:会将不同的地方放在一起,紧凑易读
    • -r:递归比较目录下的所有文件
  • 利用diff命令生成补丁

    • diff -u test1 test2 > test.patch
  • diff—-》-uNr

    • -u 统一的格式显示差异
    • -N 2个目录进行对比的时候,如果有不存在的文件,diff就会使用一个空文件和对方存在的文件进行一行一行的对比,生成补丁
    • -r 递归对比,因为文件夹下面还有文件,一级一级的对比,将所有的文件都对比一次。

5.3.13 patch打补丁

  • patch命令:用来打补丁修补文件。
  • 格式:patch [选项] 原始文件 < 补丁文件
    • -pN:N表示忽略N层路径
    • -R:还原到老版本
  • 注意事项:

    • 如果打多个补丁,要注意先后顺序;
    • 打补丁前不要修改源文件。
  • patch命令对文件打补丁:
    这里写图片描述

  • patch命令对目录打补丁:

    这里写图片描述

5.3.14 grep 数据过滤

  • grep:通用正则表达式分析程序

    • 用途:在文件中查找并显示包含指定字符串的行。
    • 格式:grep [选项]… 模式 目标文件
    • -i:查找时忽略大小写;
    • -v:反转查找,输出与模式不相符的行;
    • -l:仅显示符合模式要求的文件名;
    • -n:显示符合模式要求的行号;
    • -r:递归搜索所有文件。
  • 模式:

    • ^… 以什么开头
    • …$ 以什么结尾

正则表达式:按照某种正常的规则组合起来的一个表达式,此表达式包含特殊字符+字符+数字等,用来表示一个特定的含义。

  • 基本正则:特殊字符比较少
  • 扩展正则:元字符比较多,新加入了一些进来

例:

# cat /etc/fstab |grep -E  -v  "^#|^$"
不显示以#开头的行或者空行
  • -E :支持扩展正则表达式。egrep==grep -E ,效果一样;
  • -o 将符合条件的一行一行的显示

5.4 硬链接和软连接

stat命令查看i-节点信息:

这里写图片描述

5.4.1 创建硬链接

  • ln abc.txt 123.txt
  • rm abc.txt

这里写图片描述

5.4.2 创建软连接

  • 软链接:

    • 符号链接,表面上和硬连接相似;
    • 文件类型和权限肯定是lrwxrwxrwx;
    • 命令格式:ln -s 源文件… 链接文件
  • 硬链接和软链接比较

    • 软链接:指向原始文件所在的路径;
    • 硬链接:指向原始文件对应的数据存储位置;
    • 不能为目录建立硬链接文件;
    • 硬链接与原始文件必须位于同一分区(文件系统)中。
  • ln -s abc.txt 123.txt

  • rm abc.txt

这里写图片描述

5.4.3 相对路径和绝对路径

  • 相对路径:不从/开始的路径
  • 绝对路径:从/开始的路径

5.5 用户和组

  • 到底是用户先存在还是组先存在?
  • 答:先有组再有用户!

  • 每个账户有一个唯一的UID (user identifier)–>身份证;

  • 每个组也有一个唯一的GID (group identifier) –》组织代码;
  • 多个账户可以属于同一个组。

这里写图片描述

5.5.1 用户类型

  • 判断用户是否存在的两种方法:
    • ① id liupeng
    • ② cat /etc/passwd | grep liupeng
  • 远程和su两种方式切换用户的区别:
    • 远程ssh方式登录系统,需要输入用户的密码
# ssh xiaoniu@127.0.0.1 
 ---》使用xiaoniu这个用户登录本机127.0.0.1代表本地回环接口ip
xiaoniu@127.0.0.1\'s password: 
$exit     ---》退出登录
没有设置密码的用户也是不能登录系统的
# su - xiaoniu   ---》本地直接切换用户登录系统,不需要密码,因为你是从管理员切换到xiaoniu的
$ exit
  • 用户类型
    • 超级用户:root(uid是0)
    • 程序用户:
      • 实现特定的功能(开启ftp服务、http服务、关机、mysql服务等),但是一般不能登录系统(uid在1-499之间);
      • 价值所在:启动服务和访问服务
    • 普通用户:
      • 使用useradd命令新建的用户,一般uid从500开始,每新建一个用户,uid会自动加1。

5.5.2 几个重要文件

  • /etc/passwd 用来存放用户帐号信息 passwd-
  • /etc/shadow 用来存放密码信息 shadow-
  • /etc/group 存放组信息的 group-
  • /etc/login.defs 存放新建用户的时候的一些默认规则、属性(配置文件,相当于一个政策文件)default 默认、缺省。
  • /etc/skel 存放新建用户的时候的一些样板文件

5.5.2.1 /etc/passwd(☆☆☆☆☆)

这里写图片描述

  • 字段1:用户帐号的名称
  • 字段2:用户密码字串或者密码占位符“x”
  • 字段3:用户帐号—》UID号
  • 字段4:用户所属基本组帐号—》GID号
  • 字段5:用户注释说明
  • 字段6:宿主目录(家目录)
  • 字段7:登录Shell信息
# echo  $SHELL            
查看系统里默认的shell
# cat /etc/shells          
查看系统里有多少种shell
/sbin/nologin             
如果哪个用户的shell是此shell,那个用户是不能登录系统的
# sh 使用sh 这个shell
exit 
退出shell

5.5.2.2 /etc/shadow 用来存放密码信息的(☆☆☆☆☆)

  • 字段1:用户帐号的名称 *
  • 字段2:加密的密码字串信息 *
  • 字段3:上次修改密码的时间 以1970-1-1基准日期
  • 字段4:密码的最短有效天数,默认值为0
  • 字段6:提前多少天警告用户口令将过期,默认值为7
  • 字段7:在密码过期之后多少天禁用此用户
  • 字段8:帐号失效时间,默认值为空
  • 字段9:保留字段(未使用)

这里写图片描述

  • 每一行对应一个用户的密码记录!!
  • !! 说明zhangwuji和xuzhu没有设置密码
  • * 也是说明没有设置密码
  • 如果密码字段前加入!! 就是禁用此用户。
  • 禁用的用户是不能登录系统的。但是可以使用root用户su 方式切换过去

5.5.2.3 /etc/group

这里写图片描述
组账号:密码占位符:主要组:次要组:组成员

  • 组帐号:
    • 主要组(私有组) —》 与用户相关的默认组,在/etc/passwd文件的第四个字段定义;
    • 次要组(附属组)—》用户可以同时属于其他的组,在/etc/group文件的第四个字段定义。
    • 用户的主要组的名称和GID相关

5.5.2.4 /etc/skel/* (样板文件和目录)

  • .bash_profile :用户每次登录时执行(全局变量);存放函数,别名,环境变量。
  • .bashrc:存放系统函数、别名(负责别名):
    • 用户登录系统以后,每次打开终端都会执行这个文件里的命令(run command)(全局变量);
  • .bash_logout 每次系统注销的时候,会执行这个文件里的命令;
  • .gnome2 是用来存放与图像界面相关程序文件信息的;

5.5.2.5 /etc/gshadow(保存组账号的密码信息)

(此文件的应用极少)

5.5.2.6 /etc/login.defs (配置文件/对账号的属性设置/设置普通用户的UID和GID范围等)

# cat /etc/login.defs |grep -v ^#|grep -v ^$
MAIL_DIR    /var/spool/mail  用户的邮箱目录,邮箱名字与用户名同名
PASS_MAX_DAYS   99999    /etc/shadow文件里的内容已经在这里定义了
PASS_MIN_DAYS   0
PASS_WARN_AGE   7
UID_MIN           500    /etc/passwd文件UID已经安排了范围
UID_MAX         60000
GID_MIN           500
GID_MAX         60000 
CREATE_HOME yes  默认情况下给用户新建家目录---》/home
UMASK           077
USERGROUPS_ENAB yes    删除组的时候,要求组里没有用户存在
ENCRYPT_METHOD SHA512   采用SHA512这种加密算法进行密码的加密

5.5.3 几个重要用户命令

5.5.3.1 useradd 创建用户

  • 格式:useradd [选项]. .. 用户名
  • 常用命令选项:
    • -u:指定 UID 标记号
    • -d:指定宿主目录,缺省为 /home/用户名
    • -e:指定帐号失效时间
    • -g:指定用户的基本组名(或UID号)(初始组) –》 主要组
    • -G:指定用户的附加组名(或GID号) —》次要组
    • -M:不为用户建立并初始化宿主目录(家目录)
    • -s:指定用户的登录Shell
    • -m, –create-home 创建家目录
    • -c, –comment COMMENT 用户注释信息
    • -r 新建一个系统用户 (uid 1-499)—》程序用户—》不建家目录,在系统里真正识别用户的是看用户的UID和GID。
    • 新建的系统用户和-M选项建立的用户都没有家目录
    • /var/spool/mail/ 邮箱的位置

useradd 在后台做了什么:

这里写图片描述

  • 如何手动新建用户(得对passwd和shadow和group字段熟悉才行!)
  • 答:修改/etc/passwd–》修改/etc/shadow–》修改/etc/group–》新建家目录–》从/etc/skel目录下复制配置文件(/etc/skel/.bash*)–》验证(# su - 用户名、pwd、id)

5.5.3.2 userdel 删除用户

  • 添加 -r 选项时,连用户的宿主目录(家目录)一并删除

5.5.3.3 usermod 修改用户参数

  • -l 更改登录名称
  • -L 锁定用户账户
  • -U 解锁账户(仅去掉一个叹号!)
  • -u:修改 UID -d:修改宿主目录
  • -e:修改帐号失效时间
  • -g:修改用户的基本组名(或UID号)–》 主要组
  • -G:修改用户的附加组名(或GID号)–》次要组
  • -s:修改用户的登录Shell
    eg:usermod -d /lianxi -u uid -s bash

5.5.3.4 passwd 管理密码

  • 常用命令选项:
    • -d:清空用户的密码,使之无需密码即可登录delete
    • -l:锁定用户帐号 lock
    • -S:查看用户帐号的状态(是否被锁定) status
    • -u:解锁用户帐号unlock
    • –stdin:接收标准输入作为密码
 # echo 123 |passwd xiaoshimei --stdin
 为xiaoshimei设置密码为123
  • root用户可以修改所有用户密码,不要求密码复杂性;
  • 普通用户只能改自己的密码,要求密码复杂性;
  • 不接用户名,是给自己设置密码。

5.5.3.5 groupadd 添加组账号

# groupadd -g 1000 market 
添加组账号market,GID为1000
# groupdel market
删除组账号market

5.5.3.6 groupmod 设置组名

  • -n 修改组名
  • -g 修改组id
# chmod +x hello.sh      授予可执行权限
# chmod -x hello.sh       取消可执行权限
  • r 4 读
  • w 2 写
  • x 1 执行
  • 0 没有权限

  • rw-r–r–

  • 属主 属组 其他人
#chmod 777 bohu.txt 
设置权限为777,任何人都有读写执行的权限

5.5.3.7 newgrp 改变有效组(主要组)

用户必须是要改变组的成员。类似,一个人有多重身份。

5.5.3.8 gpasswd

  • -a 给用户添加一个附属组
  • -d 给用户移除附属组
  • -M 批量给用户添加到附属组

5.5.3.9 id和w

用户和组账户查询

  • id 用户名
  • w:查询已登录到主机的用户信息

5.5.3.10 history

查看最近1000条使用过的命令,只是查看当前用户的历史操作命令。

  • .bash_history
    用来存放历史命令的,上一次注销前在系统里使用的命令,可以通过这个文件查看别的用户登录系统时,使用过的命令。只要别的用户一注销linux,系统就会把用户使用过的命令自动存到它的家目录下的 .bash_history

  • 为什么是只能存1000条?

    • 答:/etc/profile —>HISTSIZE=1000 —>定义了系统里很多的环境变量。
  • 打扫行踪,不让人家知道你使用过那些命令:

    • history -c –》清除历史命令
    • rm -rf /root/.bash_history
    • 在/root/.bash_logout 文件里添加 history -c
    • #!echo —》执行最近一条以echo开头的命令

5.5.3.11 TTY(终端)

TTY相当于正式工,而pts/0等相当于临时工。

这里写图片描述

6 PATH 环境变量

变量的类型:

  • 环境变量
  • 局部变量
  • 全局变量

定义变量:为什么要使用变量?
答:方面使用,方便修改值。

  • 全局变量和局部变量的区别:
eg:meinv=wucairen
自定义变量meinv为wucairen(自定义变量一般为局部变量)
export meinv
用export,输出meinv为全局变量
echo $meinv
则会输出 wucairen
  • PATH 是linux系统里的一个环境变量,系统已经定义好了,我们不需要再定义。
  • 作用:是linux里使用的命令都存在在PATH变量后面指定的目录下,我们使用命令的时候,bash会主动的到PATH变量的值对应的目录下查找,如果第1个目录里没有找到,就到第2个目录里找,如果都没有找到就报错,提醒用户没有这个命令,如果找到了,就执行这个命令。
# echo $PATH
/usr/lib64/qt3/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin

6.1 环境变量(一般都是全局变量)

  • 如何理解环境变量?
  • 将linux系统比喻成一个社会,里面的一些公共资源,例如空气、水、公交车、地铁、美食等都是变量,大家都使用。
  • 环境变量也是全局变量,所有的程序都可以调用。系统里已经定义了,我们不需要自定义。

  • env 查看系统里的环境变量

  • set 查看系统里的变量(环境变量和自定义变量)
  • 自己定义的变量一般都是局部变量,其他shell里的程序不能调用,有范围的限制。

7 文件权限

重大失误操作:

  • chmod -R +x / –》更改根目录下的所有文件的权限为可执行权限
  • chmod -R 777 / –》没安全性可言了
  • rm -rf / –》删除根下面的全部文件

怎么设置用户不能登录系统:

  • ①可以在/etc/shadow文件里的密码字段前面添加!!可以禁用用户;
  • ②或者修改/etc/passwd文件里用户的shell为/sbin/nologin

7.1 查看文件/目录权限及归属(ls -l)

这里写图片描述

  • 访问权限:
    • -r 可读(read):允许查看文件内容、显示目录列表
    • -w 可写(write):允许修改文件内容,允许在目录中新建、移动、删除文件或子目录
  • 目录归属(所有权)
    • -u 文件拥有者(owner):拥有该文件或目录的用户帐号
    • -g 属组(group):拥有该文件或目录的组帐号
    • -o 其它人(others):除了属主和属组的其他人

7.2 设置权限

7.2.1 chmod

7.2.1.1 chmod 是用来修改权限

这里写图片描述
- u:user
- g:group
- o:others
- a:all
- + 是增加权限
- - 是去掉权限
- = 直接等于某些权限
- -R:递归修改指定目录下所有文件、子目录的权限

7.2.1.2 推荐 chmod 用数字改权限

chmod 777 1.txt  --》给1.txt设置权限为读写可执行。

这里写图片描述

  • root用户下默认新建文件的权限为644,新建目录的权限755

PS:但是在工作中,授权一般用 sudo 命令!

# vim /etc/sudoers
zhaomin  ALL=/usr/sbin/useradd,/usr/sbin/userdel(授权zhaomin 能使用useradd 和userdel 命令)
su - zhaomin
$ sudo useradd zhangwuji123  使用授权去做事情,需要接sudo命令开头

7.2.2 默认权限

  • 用户新建文件和目录的时候默认的权限。
  • umask:修改默认权限
# umask  查看用户的权限掩码(用户新建文件和目录的时候默认的权限)
0022(组和其他人去掉写的权限)--》前面的0是特殊权限位
# umask -S  查看当前用户的权限设置
u=rwx,g=rx,o=rx
  • ☆☆:文件的初始权限是666,文件夹的初始权限是777
    • ①umask修改仅仅是临时的,重启失效;
    • ②在 .bashrc里添加umask 022(永久有效,相当于设置权限为755)

7.3 chown 修改归属

  • 格式:chown 属主:属组 文件/目录名(属主和属组已经存在)
  • chown root:haha xixi —>将xixi设置为属主是root,属组是haha
  • (chgrp基本用不到,其功能完全可以用chown代替)

这里写图片描述

7.4 文件或目录的隐藏属性

7.4.1 chattr命令:设置文件的隐藏属性

  • 格式:chattr [+-=] [ai] 文件或目录
  • 常用命令选项:
    • -R:递归修改
    • -a:可以增加文件内容,但不能修改和删除
    • -i: 锁定保护文件
  • lsattr命令: 查看文件的隐藏属性。
  • 格式:lsattr [Rda] 文件或目录
  • 常用命令选项:
    • -R:递归修改
    • -d: 查看目录

7.5 文件的特别权限

这里写图片描述

7.5.1 SET位权限

  • 主要用途: 为可执行(有 x 权限的)文件设置,权限字符为“s”;
  • 其他用户执行该文件时,将拥有属主或属组用户的权限;
  • SET位权限类型:
    • SUID:表示对属主用户增加SET位权限;
    • SGID:表示对属组内的用户增加SET位权限。
      这里写图片描述

7.5.2 粘滞位权限(Sticky)

  • 主要用途:为公共目录(例如,权限为777的)设置,权限字符为“t”;
  • 用户不能删除该目录中其他用户的文件。
    这里写图片描述

7.5.3 设置SET位、粘滞位权限

  • 使用权限字符
    • chmod ug±s 可执行文件…
    • chmod o±t 目录名…
  • 使用权限数字:
    • chmod mnnn 可执行文件…
    • m为4时,对应SUID,2对应SGID,1对应粘滞位,可叠加
      这里写图片描述

7.5.4 ACL的使用

ACL (Access Control List):

  • 一个文件/目录的访问控制列表,可以针对任意指定的用户/组使用权限字符分配rwx权限。
  • 设置ACL
    • 格式: setfacl 选项 规则 文件
    • 常用选项:
      • -m:新增或修改ACL中的规则
      • -b: 删除所有ACL规则
      • -x: 删除指定的ACL规则
    • 常用规则
      • 格式:类型:特定的用户或组:权限
      • user:(uid/name):(perms) 指定某位使用者的权限
      • group:(gid/name):(perms) 指定某一群组的权限
      • other::(perms) 指定其它使用者的权限
      • mask::(perms) 设定有效的最大权限
      • 简写为:u , g , o , m; perms使用rwx
      • 例:
# setfacl  -m  u:liupeng:rwx  taohuadao 
对liupeng用户增加rwx权限
# setfacl  -m  u:qingshu:---   /guangmingding/ 
只对qingshu移除进入guangmingding的权限

注意:拒绝权限高于一切!!

  • 针对特殊用户
    这里写图片描述

  • 针对特定组
    这里写图片描述

  • 针对mask设置有效权限
    这里写图片描述

  • 查看ACL

  • 格式:getfacl 文件

ACL类型:

  • 存取型ACL(Access ACL):文件或目录
  • 预设型ACL(Default ACL):只能对目录(可理解为世袭制!即在已设置预设ACL的文件夹下,新生成的文件夹默认属于上级的文件夹的所有者)

预设型ACL:

  • 格式:setfacl –m d:类型:特定的用户或组:权限
  • 设置了预设型ACL的目录,其下的所有文件或者子目录就都具有了主目录的ACL权限,并且子目录也同样有预设的ACl权限。

  • 设置预设ACL
    这里写图片描述