Linux基础
使用CentOS作为学习的Linux系统
Linux命令格式

⼀般情况下,【参数】是可选的,⼀些情况下【⽂件或路径】也是可选的

“#” 超级⽤户身份提示符
"$" 普通⽤户身份提示符
Linux目录结构
Linux⾸先是建⽴⼀个根"/"⽂件系统,所有的⽬录也都是由根⽬录衍⽣出来。
在Linux底下,所有的⽂件与⽬录都是由根⽬录开始,是⽬录与⽂件的源头,然后⼀个个的分⽀下来,如同树枝状,因此称为这种⽬录配置为:⽬录树。
⽬录树的特点是什么呢?
- ⽬录树的起始点是根⽬录(/,root);
- 每⼀个⽬录不⽌能使⽤本地的⽂件系统,也可以使⽤⽹络上的⽂件系统,可以利⽤NFS服务器挂载特定⽬录。
- 每⼀个⽂件在此⽬录树中的⽂件名,包含完整路径都是独⼀⽆⼆的。

目录结构文件
- /bin:bin是Binary的缩写, 这个⽬录存放着最经常使⽤的命令。
- /boot:这⾥存放的是启动Linux时使⽤的⼀些核⼼⽂件,包括⼀些连接⽂件以及镜像⽂件。
- /dev :dev是Device(设备)的缩写, 该⽬录下存放的是Linux的外部设备,在Linux中访问设备的⽅式和访问⽂件的⽅式是相同的。
- /etc:这个⽬录⽤来存放所有的系统管理所需要的配置⽂件和⼦⽬录。
- /home:⽤户的主⽬录,在Linux中,每个⽤户都有⼀个⾃⼰的⽬录,⼀般该⽬录名是以⽤户的账号命名的。
- /lib:这个⽬录⾥存放着系统最基本的动态连接共享库,其作⽤类似于Windows⾥的DLL⽂件。⼏乎所有的应⽤程序都需要⽤到这些共享库。
- /lost+found:这个⽬录⼀般情况下是空的,当系统⾮法关机后,这⾥就存放了⼀些⽂件。
- /media:linux系统会⾃动识别⼀些设备,例如U盘、光驱等等,当识别后,linux会把识别的设备挂载到这个⽬录下。
- /mnt:系统提供该⽬录是为了让⽤户临时挂载别的⽂件系统的,我们可以将光驱挂载在/mnt/上,然后进⼊该⽬录就可以查看光驱⾥的内容了。
- /opt: 这是给主机额外安装软件所摆放的⽬录。⽐如你安装⼀个ORACLE数据库则就可以放到这个⽬录下。默认是空的。
- /proc:这个⽬录是⼀个虚拟的⽬录,它是系统内存的映射,我们可以通过直接访问这个⽬录来获取系统信息。 这个⽬录的内容不在硬盘上⽽是在内存⾥,我们也可以直接修改⾥⾯的某些⽂件,⽐如可以通过下⾯的命令来屏蔽主机的ping命令,使别⼈⽆法ping你的机器:echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all
- /root:该⽬录为系统管理员,也称作超级权限者的⽤户主⽬录。
- /sbin:s就是Super User的意思,这⾥存放的是系统管理员使⽤的系统管理程序。
- /selinux: 这个⽬录是Redhat/CentOS所特有的⽬录,Selinux是⼀个安全机制,类似于windows的防⽕墙,但是这套机制⽐较复杂,这个⽬录就是存放selinux相关的⽂件的。
- /srv: 该⽬录存放⼀些服务启动之后需要提取的数据。
- /sys:这是linux2.6内核的⼀个很⼤的变化。该⽬录下安装了2.6内核中新出现的⼀个⽂件系统 sysfs 。
- /tmp:这个⽬录是⽤来存放⼀些临时⽂件的。
- /usr:这是⼀个⾮常重要的⽬录,⽤户的很多应⽤程序和⽂件都放在这个⽬录下,类似于windows下的program files⽬录。
- /usr/bin:系统⽤户使⽤的应⽤程序。
- /usr/sbin:超级⽤户使⽤的⽐较⾼级的管理程序和系统守护程序。
- /usr/src:内核源代码默认的放置⽬录。
- /var:这个⽬录中存放着在不断扩充着的东⻄,我们习惯将那些经常被修改的⽬录放在这个⽬录下。包括各种⽇志⽂件。
在linux系统中,有⼏个⽬录是⽐较重要的,平时需要注意不要误删除或者随意更改内部⽂件。
/etc:上边也提到了,这个是系统中的配置⽂件,如果你更改了该⽬录下的某个⽂件可能会导致系统不能启动。
/bin, /sbin, /usr/bin, /usr/sbin:这是系统预设的执⾏⽂件的放置⽬录,⽐如 ls 就是在/bin/ls ⽬录下的。值得提出的是,/bin, /usr/bin 是给系统⽤户使⽤的指令(除root外的通⽤户),⽽/sbin, /usr/sbin 则是给root使⽤的指令。
/var: 这是⼀个⾮常重要的⽬录,系统上跑了很多程序,那么每个程序都会有相应的⽇志产⽣,⽽这些⽇志就被记录到这个⽬录下,具体在/var/log ⽬录下,另外mail的预设放置也是在这⾥。

Linux目录挂载
挂载通常是将⼀个 存储设备 挂接到⼀个已经存在的⽬录上,访问这个⽬录就是访问该存储设备的内容。

如图所示,是U盘存储设备和Linux系统⾃⼰的⽂件系统结构,此时Linux想要使⽤U盘的硬件设备,必须将Linux 本身的⽬录 和硬件设备的⽂件⽬录合⼆为⼀,此过程就称之为 挂载 。
挂载操作会隐藏原本Linux⽬录中的⽂件,因此选择Linux本身的⽬录,最好是新挂载之后,这个⽬录被称为挂载点

此时U盘⽂件系统已经是Linux⽂件系统的⼀部分,访问/sdb-u⽂件夹,即是访问访问U盘系统中的⽂件夹。
Linux文件及目录管理命令
| 命令 | 对应英文 | 作用 |
|---|---|---|
| ls | list | 查看文件夹内容 |
| pwd | print work directory | 查看当前所在目录 |
| cd 目录名 | Change driectory | 查看当前所在目录 |
| touch 文件名 | touch | 如果文件不存在,则创建 |
| mkdir 目录名 | Make directory | 创建目录 |
| rm 文件名 | Remove | 删除指定文件 |
| 符号 | 目录层级 |
|---|---|
| . | 当前目录 |
| .. | 上一层 |
| - | 前一个工作目录 |
| ~ | 当前用户所在的家目录 |
| / | 顶级根目录 |
cd命令,变换目录
cd是change directory的缩写,这是⽤来变换⼯作⽬录的命令,注意命令和⽬录之间有⼀个空格。

ls命令
显示⽬录下内容及属性信息的命令
-a 显示指定⽬录下所有⼦⽬录与⽂件,包括以.开头的隐藏⽂件
-l 以列表⽅式显示⽂件的详细信息 ls -l 等于ll ⽤法
-h, --human-readable 与-l ⼀起,以易于阅读的格式输出⽂件⼤
(例如 1K 234M 2G)
-t 根据最后修改时间排序,默认是以⽂件名排序,通常与-l 连⽤
-F 在条⽬后加上⽂件类型的指示符号(* , /, = , @ , | ,其中的⼀个)
注:可以标识⽂件类型
加上 * 代表可执⾏的普通⽂件
加上 = 表示套接字
加上 | 表示FIFOS(队列系统)
加上 @表示符号链接
加上 / 表示⽂件夹
-d 显示⽬录本身的信息 ⽽不是显示⽬录的内容
-r, --reverse 逆序排列
-S 根据⽂件⼤⼩排序,从⼤到⼩排序
-i 显示索引节点信息(索引节点相当于身份证号)
--full-time 以完整的时间格式输出(也就是按照中国的时间⽇期显示)
案例
ls -lt 按照时间进⾏排序
ls -lrt 找出最新的⽂件
ls -d */ 列出当前所有⽬录
ll -hS ./* 显示出当前⽬录下所有内容详细

mkdir命令
创建⽂件夹
⽤法:mkdir [选项]... ⽬录...
若指定⽬录不存在则创建⽬录。
-m, --mode=模式 设置权限模式(类似chmod),⽽不是rwxrwxrwx 减um
-p, --parents 需要时创建⽬标⽬录的上层⽬录,但即使这些⽬录已存
mkdir {1..3}加花括号创建连续的⽬录,⽤..隔开 花括号内可以是连续的数字
案例
mkdir {alex,pyyu,mjj} 创建三个⽂件夹,逗号隔开
mkdir alex{1..5} 创建连续的⽬录
mkdir cunzhang longting 创建少量连续⽬录

touch命令
创建⽂件或修改⽂件时间戳
⽤法:touch [选项]... ⽂件...
将每个⽂件的访问时间和修改时间改为当前时间。
不存在的⽂件将会被创建为空⽂件,除⾮使⽤-c 或-h 选项。
touch {连续数字或字⺟} 创建多个⽂件序列
touch {1..10}
touch {a..z}
-c, --no-create 不创建任何⽂件
-t STAMP 使⽤[[CC]YY]MMDDhhmm[.ss] 格式的时间替代当
-r, --reference=⽂件 使⽤指定⽂件的时间属性替代当前⽂件时间
案列

修改⽂件时间
touch -t 06010808 alex1 #修改alex1⽂件的时间是 6⽉1号8点8分
touch -r alex1 alex2 #把alex2的时间改成alex1⼀样
cp复制
linux复制
⽤法:cp [选项]... [-T] 源⽂件 ⽬标⽂件
或:cp [选项]... 源⽂件... ⽬录
或:cp [选项]... -t ⽬录 源⽂件...
将源⽂件复制⾄⽬标⽂件,或将多个源⽂件复制⾄⽬标⽬录。
-r 递归式复制⽬录,即复制⽬录下的所有层级的⼦⽬录及⽂件 -p 复制的时候
-d 复制的时候保持软连接(快捷⽅式)
-a 等于-pdr
-p 等于--preserve=模式,所有权,时间戳,复制⽂件时保持源
-i, --interactive 覆盖前询问提示
案例1
复制 > copy > cp
#移动xxx.py到/tmp⽬录下
cp xxx.py /tmp/
#移动xxx.py顺便改名为chaoge.py
cp xxx.py /tmp/chaoge.py
Linux下⾯很多命令,⼀般没有办法直接处理⽂件夹,因此需要加上(参数)
cp -r 递归,复制⽬录以及⽬录的⼦孙后代
cp -p 复制⽂件,同时保持⽂件属性不变 可以⽤stat
cp -a 相当于-pdr
#递归复制test⽂件夹,为test2
cp -r test test2
cp是个好命令,操作⽂件前,先备份
cp main.py main.py.bak
移动多个⽂件,放⼊⽂件夹c中
cp -r ⽂件1 ⽂件2 ⽂件夹a ⽂件夹c
案例2
[root@pylinux opt]# cp luffy_boy.zip luffy_boy.zip.bak2
cp:是否覆盖"luffy_boy.zip.bak2"? y
[root@pylinux opt]# cp luffy_boy.zip luffy_boy.zip.bak2 -i
cp:是否覆盖"luffy_boy.zip.bak2"? y
cp确认是否覆盖是-i参数作⽤,默认alias因为添加了别名
[root@pylinux opt]# alias
alias cp='cp -i'
[root@pylinux opt]# cp luffyCity/ luffyCity2 #必须添加-r参数才可
cp: omitting directory 'luffyCity/'
[root@pylinux opt]# cp -r luffyCity/ luffyCity2
[root@pylinux opt]# ls
luffyCity luffyCity2
取消cp别名的⽅式
- 使⽤命令绝对路径
- 命令开头⽤反斜线 \
- 取消cp命令别名
- 写⼊环境变量配置⽂件
快熟备份配置文件

mv命令
mv命令就是move的缩写,作⽤是移动或是重命名⽂件
⽤法:mv [选项]... [-T] 源⽂件 ⽬标⽂件
或:mv [选项]... 源⽂件... ⽬录
或:mv [选项]... -t ⽬录 源⽂件...
将源⽂件重命名为⽬标⽂件,或将源⽂件移动⾄指定⽬录。
-f, --force 覆盖前不询问
-i, --interactive 覆盖前询问
-n, --no-clobber 不覆盖已存在⽂件如果您指定了-i、-f、-n
-t, --target-directory=DIRECTORY
-u, --update 只在源⽂件⽂件⽐⽬标⽂件新

mv案例
移动(搬家)命令 > move > mv
1.给⽂件重命名
mv abc abc.py
2.如果⽬标⽂件存在,-i参数则提示是否覆盖
mv test1.txt test2.txt
3.使⽤反斜杠命令屏蔽别名
\mv kunkun wuyifan
4.取消别名
5.移动单个⽂件
mv file1.txt dir/
6.移动多个⽂件
mv file1.txt file2.txt dir/
7.通配符移动多个⽂件
mv dir/file* ../

## rm命令
```bash
⽤法:rm [选项]... ⽂件...
删除 (unlink) ⽂件。
rm命令就是remove的含义,删除⼀个或者多个⽂件,这是Linux系统重要命令
-f, --force 强制删除。忽略不存在的⽂件,不提示确认
-i 在删除前需要确认
-I 在删除超过三个⽂件或者递归删除前要求确认。
-d, --dir 删除空⽬录
-r, -R, --recursive 递归删除⽬录及其内容
-v, --verbose 详细显示进⾏的步骤
--help 显示此帮助信息并退出
--version 显示版本信息并退出
案例
1.删除普通⽂件,需要确认提示,默认添加了-i参数
rm file1.txt
2.强制删除⽂件,不提示
rm -f file2.txt
3.递归删除⽂件夹
[root@pylinux tmp]# rm -r heh/
rm:是否进⼊⽬录"heh/"? y
rm:是否删除普通空⽂件 "heh/kuanmian2"?y
rm:是否删除普通空⽂件 "heh/kuanmian"?y
rm:是否删除⽬录 "heh/"?y
务必看清楚敲打的命令,是否正确、不得有空格
- 强制删除且不让⽤户确认
- rm -rf ⽂件夹
- 强制删除且显示过程
[root@pylinux tmp]# rm -rfv ./*
已删除"./456.txt"
已删除⽬录:"./q/w/e/r/t/yt"
已删除⽬录:"./q/w/e/r/t"
已删除⽬录:"./q/w/e/r"
已删除⽬录:"./q/w/e"
已删除⽬录:"./q/w"
已删除⽬录:"./q"
Linux帮助命令
- man 命令
如:man ls
进⼊man帮助⽂档后,按下q退出

- 使⽤--help参数
语法:命令 --help
帮助命令的精简版
如 ls --help
help命令获取帮助
语法:help 命令
只针对bash内置命令
Linux开关机命令

Linux命令⾏常⽤快捷键
ctrl + c cancel取消当前操作
ctrl + l 清空屏幕内容
ctrl + d 退出当前⽤户
ctrl + a 光标移到⾏⾸
ctrl + e 光标移到⾏尾
ctrl + u 删除光标到⾏⾸的内容
Linux的环境变量
那么如何查看Linux下的PATH环境变量呢?
执⾏命令:echo $PATH
echo命令是有打印的意思
$符号后⾯跟上PATH,表示输出PATH的变量
PATH(⼀定是⼤写的)这个变量是由⼀堆⽬录组成,分隔符是":"号。

Linux文件目录管理命令
Vim
基本上 vi/vim 共分为三种模式,分别是命令模式(Command mode),输⼊模式(Insert mode)和底线命令模式(Last line mode)。 这三种模式的作⽤分别是:
命令模式:进⼊ vim 默认的模式
编辑模式:按 i 进⼊的 a i o 也可以进⼊
底⾏模式: 按下:(冒号)之后进⼊到的模式

当vim打开不存在的文件,会自动创建一个文件
vim基础用法
- vim oldboy.txt #打开⽂件
- 打开后⽆法直接编辑,需要按 i 进⼊编辑模式(i表示插入 insert)
- 修改这个⽂件内容吧
- 修改完后,按 esc 退出编辑模式:wq
- 保存退出 #注意":"必须是英⽂符号
:wq 保存并退出
:q! 强制退出不保存
:wq! 强制保存退出
命令模式
移动光标
h 左
j 下
k 上
l 右
w 移动光标到下⼀个单词
b 移动到光标上⼀个单词
数字0 移动到本⾏开头
$ 移动光标到本⾏结尾
H 移动光标到屏幕⾸⾏
M 移动到光标到屏幕的中间⼀⾏
L 移动光标到屏幕的尾⾏
gg 移动光标到⽂档的⾸⾏
G 移动光标到⽂档尾⾏
ctrl + f 下⼀⻚
ctrl + b 上⼀⻚
g; 移动到上一次修改的位置。
g, 移动到下一次修改的位置。
查找
/chaoge 在整篇⽂档中搜索chaoge字符串,向下查找,按n跳转到下一个单词
?chaoge 在整篇⽂档中搜索chaoge字符串,向上查找,按n跳转到下一个单词
* 查找整个⽂档,匹配光标所在的所有单词,按下n查找下⼀处,N上⼀处
# 查找整个⽂档,匹配光标所在的所有单词,按下n查找下⼀处,N上⼀处
gd 找到光标所在单词匹配的单词,并停留在⾮注释的第⼀个匹配上
% 找到括号的另⼀半!!
复制、删除、粘贴
yy 拷⻉光标所在⾏(输入4yy,复制4行)
dd 删除光标所在⾏
D 删除当前光标到⾏尾的内容
dG 删除当前⾏到⽂档尾部的内容
p 粘贴yy所复制的内容
x 向后删除字符
X 先前删除字符(window删除键效果)
u 撤销上⼀步的操作
. 重复前⼀个执⾏过的动作
数字与命令
3yy 拷⻉光标所在的3⾏
5dd 删除光标所在5⾏
快捷操作
删除光标所在位置到⾏尾的内容并进⼊编辑模式 C(⼤写字⺟)
在命令模式下按下字⺟i,即可进⼊输⼊模式,可以编写代码啦。。。
在当前⾏下⾯插⼊⼀⾏并进⼊编辑模式 o(⼩写字⺟)
在当前⾏上⾯插⼊⼀⾏并进⼊编辑模式 O(⼤写字⺟)
快速到达⾏尾并进⼊编辑模式 A
输入zz快速保存退出
批量操作
- 批量删除:
1、ctrl+v进⼊批量编辑模式(可视块)
2、选择 上下左右
3、删除 d
- 批量增加:
1、进⼊批量编辑模式(可视块)ctrl+v
2、选择区域
3、输⼊⼤写的 I 进⼊编辑模式 编辑代码
4、按下ESC键(按两下,自动生成多行代码)
- 批量去掉注释
1. 进⼊命令⾏模式,按ctrl + v进⼊ visual block模式,按字⺟l横向选中列
2. 按字⺟j,或者k选中注释符号
3. 按d键就可全部取消注释
vim执⾏流程与常⻅故障解析

重定向符号
| 符号 | 解释 |
|---|---|
| 重定向的意思就是“将数据传到其他地方” | |
| <或 << | 标准输入stdin,代码为0 |
| >或者>> | 表述数据stdout,代码为0 |
| 2>或者2>> | 标准错误输出stderr,代码为2 |
1、读取文件内容,且写入到另一个文件中
cat douyin.txt > douyin2.txt (覆盖写入新的文件)
cat douyin.txt >> douyin3.txt (追加写入新的文件)
2、重定向写入符
cat < douyin.txt (将文件中内容发送给命令)
xargs -n 3 < douyin.txt(每行3个输出打印)
3、重定向追加写入符
cat >> douying.txt << EOF (这样就可以手动输入每行内容,用EOF结尾)
cat命令
cat命令⽤于查看纯⽂本⽂件(常⽤于内容较少的), 可以理解为是 猫 ,瞄⼀眼⽂件内容
其单词是 concatenate ,指的是可以连接多个⽂件且打印到屏幕,或是重定向到⽂件中
| 功能 | 说明 |
|---|---|
| 查看文件内容 | cat file.txt |
| 多个文件合并 | cat file.txt file1.txt > file3.txt |
| 非交互式编辑或者追加内容 | cat >> file.txt << EOF 欢迎光临 EOF |
| 清空文件内容 | cat /dev/null > file.txt 【/dev/null是linux系统的⿊洞⽂件】 |
参数用法
⽤法:cat [选项] [⽂件]...
将[⽂件]或标准输⼊组合输出到标准输出。
清空⽂件内容,慎⽤
> ⽂件名
-A, --show-all 等价于 -vET
-b, --number-nonblank 对⾮空输出⾏编号
-e 等价于 -vE
-E, --show-ends 在每⾏结束处显示 $
-n, --number 对输出的所有⾏编号
-s, --squeeze-blank 不输出多⾏空⾏
-t 与 -vT 等价
-T, --show-tabs 将跳格字符显示为 ^I
-u (被忽略)
-v, --show-nonprinting 使⽤ ^ 和 M- 引⽤,除了 LFD 和 TAB 之外
--help 显示此帮助信息并退出
--version 输出版本信息并退出
如果[⽂件]缺省,或者[⽂件]为 - ,则读取标准输⼊。
案例
#查看⽂件,显示⾏号
cat -n xxx.py
#猫,查看⽂件
cat xxx.py
#在每⼀⾏的结尾加上$符
[root@master tmp]# cat -E 1.txt
#追加⽂字到⽂件
cat >>/tmp/oldboy.txt << EOF
唧唧复唧唧
⽊兰开⻜机
开的什么机
波⾳747
EOF
[root@luffycity tmp]# cat -b file.txt #输出⾮空⾏的编号
1 欢迎来到路⻜学城
2 学⽣还有五分钟到达战场
3 全军出击
[root@luffycity tmp]#
[root@luffycity tmp]#
[root@luffycity tmp]#
[root@luffycity tmp]# cat -n file.txt #输出所有⾏的编号
1 欢迎来到路⻜学城
2 学⽣还有五分钟到达战场
3
4
5 全军出击
[root@luffycity tmp]# cat -E file.txt #显示出每⾏的结束符,
欢迎来到路⻜学城$
学⽣还有五分钟到达战场$
$
$
全军出击$
[root@luffycity tmp]# cat -s file.txt # -s参数把多个空⾏,换
欢迎来到路⻜学城
学⽣还有五分钟到达战场
全军出击
[root@luffycity tmp]# cat > alex.txt
1、清空文件,留下一个空行
echo > gushi.txt
2、 直接清空不留痕迹
> gushi.txt
2、 黑洞文件清空
cat /dev/null > douyin2.txt
tac命令
与cat命令作⽤相反,反向读取⽂件内容
[root@luffycity tmp]# cat alex.txt
我是⾦⻆⽼妖怪alex
我是⽼妖怪alex
[root@luffycity tmp]#
[root@luffycity tmp]# tac alex.txt
我是⽼妖怪alex
我是⾦⻆⽼妖怪alex
管道符

Linux提供的管道符“|”讲两条命令隔开,管道符左边命令的输出会作为管道符右
常⻅⽤法:
#检查python程序是否启动
ps -ef|grep "python"
#找到/tmp⽬录下所有txt⽂件
ls /tmp|grep '.txt'
#检查nginx的端⼝是否存活
netstat -tunlp |grep nginx
案例
1、对字符串进行二次过滤
查看文本内容,且对内容进行二次过滤,找到定位有关的行
cat gushi,txt | grep "know me"
grep命令
过滤字符串信息的命令
more,less
More是⼀个过滤器, ⽤于分⻚显示 (⼀次⼀屏) ⽂本,以当前屏幕窗⼝尺⼨为准
More语法
more 参数 ⽂件
-num 指定屏幕显示⼤⼩为num⾏
+num 从num⾏开始显示
交互式more的命令:
空格 向下滚动⼀屏
Enter 向下显示⼀⾏
= 显示当前⾏号
q 退出
More案例
#显示5⾏内容
[root@luffycity tmp]# more -5 alex.txt
root:x:0:0:root:/root:/bin/bash
root:x:0:0:root:/root:/bin/bash
root:x:0:0:root:/root:/bin/bash
root:x:0:0:root:/root:/bin/bash
root:x:0:0:root:/root:/bin/bash
--More--(0%)
#从6⾏开始输出内容到屏幕
more +6 alex.txt
#将显示结果分⻚输出,需控制窗⼝⼤⼩
[root@luffycity tmp]# netstat -tunlp |more -3
less命令是more的反义词
less语法
less 参数 ⽂件
-N 显示每⾏编号
-e 到⽂件结尾⾃动退出,否则得⼿动输⼊q退出
⼦命令
整个的翻⻚
b 向前⼀⻚
f 向后⼀⻚
空格 查看下⼀⾏,等于 ↓
y 查看上⼀⾏,等于↑
q退出
less案例

head, tail
head⽤于显示⽂件内容头部,默认显示开头10⾏
head用法
⽤法:head [选项]... [⽂件]...
将每个指定⽂件的头10 ⾏显示到标准输出。
如果指定了多于⼀个⽂件,在每⼀段输出前会给出⽂件名作为⽂件头。
如果不指定⽂件,或者⽂件为"-",则从标准输⼊读取数据。
-c, --bytes=[-]K 显示每个⽂件的前K 字节内容;
如果附加"-"参数,则除了每个⽂件的最后K字节数
显示剩余全部内容
-n, --lines=[-]K 显示每个⽂件的前K ⾏内容;
如果附加"-"参数,则除了每个⽂件的最后K ⾏外显
剩余全部内容
-q, --quiet, --silent 不显示包含给定⽂件名的⽂件头
-v, --verbose 总是显示包含给定⽂件名的⽂件头
--help 显示此帮助信息并退出
--version 显示版本信息并退出
head 案例
[root@luffycity ~]# head -5 /etc/passwd #显示前五⾏
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
[root@luffycity ~]# head -c 6 /etc/passwd #显示⽂件前6个字节
root:x[root@luffycity ~]#
#显示多个⽂件
[root@luffycity tmp]# echo 你就是⾦⻆⼤王吧 > alex.txt
[root@luffycity tmp]#
[root@luffycity tmp]#
[root@luffycity tmp]# echo 你就是银⻆⼤王吧 > peiqi.txt
[root@luffycity tmp]#
[root@luffycity tmp]#
[root@luffycity tmp]# head alex.txt peiqi.txt
==> alex.txt <==
你就是⾦⻆⼤王吧
==> peiqi.txt <==
你就是银⻆⼤王吧
tail是显示⽂件内容的末尾,默认输出后10⾏
tail用法
-c 数字 指定显示的字节数
-n ⾏数 显示指定的⾏数
-f 实时刷新⽂件变化
-F 等于 -f --retry 不断打开⽂件,与-f合⽤
--pid=进程号 进程结束后⾃动退出tail命令
-s 秒数 检测⽂件变化的间隔秒数
tail案例
#显示⽂件后10⾏
tail alex.txt
#显示⽂件后5⾏
tail -5 alex.txt
#从⽂件第3⾏开始显示⽂件
tail -n +3 alex.txt
#检测⽂件变化
tail -f alex.txt
# -F与-f参数的⽤法
[root@luffycity tmp]# tail -f alex.txt # -f⽂件不存
tail: cannot open 'alex.txt' for reading: No such file or direct
tail: no files remaining
[root@luffycity tmp]# tail -F alex.txt # -F ⽂件不存
tail: cannot open 'alex.txt' for reading: No such file or direct
tail: 'alex.txt' has appeared; following end of new file
qwe

cut命令
cut - 在⽂件的每⼀⾏中提取⽚断
在每个⽂件FILE的各⾏中, 把提取的⽚断显示在标准输出。
语法
cut 参数 ⽂件
-b 以字节为单位分割
-n 取消分割多字节字符,与-b⼀起⽤
-c 以字符为单位
-d ⾃定义分隔符,默认以tab为分隔符
-f 与-d⼀起使⽤,指定显示哪个区域
N 第 N 个 字节, 字符 或 字段, 从 1 计数 起
N- 从 第 N 个 字节, 字符 或 字段 直⾄ ⾏尾
N-M 从 第 N 到 第 M (并包括 第M) 个 字节, 字符 或 字段
-M 从 第 1 到 第 M (并包括 第M) 个 字节, 字符 或 字段
案例
[root@luffycity tmp]# cat alex.txt
My name is alex and i like da xi gua
#切割出第四个字符
[root@luffycity tmp]# cut -b 4 alex.txt
n
[root@luffycity tmp]# cut -b 4-6 alex.txt #输出第4到6的字符
nam
[root@luffycity tmp]# cut -b 4,6 alex.txt #输出第4和6的字符
nm
[root@luffycity tmp]# cut -b -5 alex.txt #输出第⼀个到第五
My na
[root@luffycity tmp]# cut -b 5- alex.txt #输出第五个字符到结
ame is alex and i like da xi gua
# 以字符作为分隔符 -c 参数,区别在于中英⽂
1、 自定义分割符
cut -f7 -d : /etc/passwd
sort 命令
sort命令将输⼊的⽂件内容按照规则排序,然后输出结果
用法
⽤法:sort [选项]... [⽂件]...
或:sort [选项]... --files0-from=F
串联排序所有指定⽂件并将结果写到标准输出。
-b, --ignore-leading-blanks 忽略前导的空⽩区域
-n, --numeric-sort 根据字符串数值⽐较
-r, --reverse 逆序输出排序结果
-u, --unique 配合-c,严格校验去重排序;不配合-c,则只输出⼀次排
-t, --field-separator=分隔符 使⽤指定的分隔符代替⾮空格到空格的转换
-k, --key=位置1[,位置2] 在位置1 开始⼀个key,在位置2 终⽌
案例
#sort 是默认以第⼀个数据来排序,⽽且默认是以字符串形式来排序,所以由字⺟
[root@luffycity tmp]# cat /etc/passwd | sort
[root@luffycity tmp]# sort -n sort.txt #按照数字从⼤到⼩排序
[root@luffycity tmp]# sort -nr sort.txt #降序排序
[root@luffycity tmp]# sort -u sort.txt #去重排序
[root@luffycity tmp]# sort -n -t "." -k 4 sort.txt #指定分"."为分隔符,对分割后的第4个进行从小到大排序
uniq
uniq命令可以输出或者忽略⽂件中的重复⾏,常与sort排序结合使⽤
用法
⽤法:uniq [选项]... [⽂件]
从输⼊⽂件或者标准输⼊中筛选相邻的匹配⾏并写⼊到输出⽂件或标准输出。
不附加任何选项时匹配⾏将在⾸次出现处被合并。(不使用参数时,只去除连续的重复行)
-c, --count 在每⾏前加上表示相应⾏⽬出现次数的前缀编号
-d, --repeated 只输出重复的⾏
-u, --unique 只显示出现过⼀次的⾏,注意了,uniq的只出现过⼀次
案例
1、去除连续的重复行
uniq luffy.txt
2、结合送人头使用,精准去重
sort -n luffy.txt | uniq
3、统计每一行的重复次数
sort luffy.txt |uniq -c
4、只找到文件中重复行,且统计出次数
sort luffy.txt |uniq -c -d
5、找出只出现过一次的行
sort luffy.txt |uniq -c -u
wc命令
wc命令⽤于统计⽂件的⾏数、单词、字节数
用法
-c, --bytes打印字节数
-m, --chars 打印字符数
-l, --lines 打印⾏数
-L, --max-line-length 打印最⻓⾏的⻓度
-w, --words 打印单词数
案例
1、 统计⽂本有多少⾏
[root@luffycity tmp]# wc -l luffy.txt
2、统计单词数量,以空格区分
[root@luffycity tmp]# echo "alex peiqi yuchao mjj cunzhang" | wc -w
3、统计字符数
[root@luffycity tmp]# echo "alex" |wc -m
4、证明结尾有个$
[root@luffycity tmp]# echo "alex" |cat -E
alex$
5、统计最⻓的⾏
[root@luffycity tmp]# wc -L alex.qq
6、验证当前机器有⼏个登录客户端
[root@luffycity tmp]# who|wc -l
tr命令
tr命令从标准输⼊中替换、缩减或删除字符,将结果写⼊到标准输出
用法
⽤法:tr [选项]... SET1 [SET2]
从标准输⼊中替换、缩减和/或删除字符,并将结果写到标准输出。
字符集1:指定要转换或删除的原字符集。
当执⾏转换操作时,必须使⽤参数“字符集2”指定转换的⽬标字符集。
但执⾏删除操作时,不需要参数“字符集2”;
字符集2:指定要转换成的⽬标字符集。
-c或——complerment:取代所有不属于第⼀字符集的字符;
-d或——delete:删除所有属于第⼀字符集的字符;
-s或--squeeze-repeats:把连续重复的字符以单独⼀个字符表示;
-t或--truncate-set1:先删除第⼀字符集较第⼆字符集多出的字符。
案例
1、将输⼊字符由⼩写换为⼤写:
[root@luffycity ~]# echo "My name is alex" | tr '[a-z]' '[A-Z]'
MY NAME IS ALEX
2、tr删除字符或数字,只要匹配上属于第⼀个字符串的字符,都被删掉
[root@luffycity ~]# echo "My name is alex and i am 30 years old." | tr -d '0-9'
My name is alex and i am years old.
3、把文件当作标准输入
tr 'a' 'A' < alex.txt # 将文件中的小写a换为大写A
4、重新删除连续重复字符
echo "iii am aaalllexx" | tr -s 'ialx'
stat命令
⽤于显示⽂件的状态信息。stat命令的输出信息⽐ls命令的输出信息要更详细。
用法
语法:stat(选项)(参数)
选项:
-L, --dereference 跟随链接
-f, --file-system 显示⽂件系统状态⽽⾮⽂件状态
-c --format=格式 使⽤指定输出格式代替默认值,每⽤⼀次指定格式换
--printf=格式 类似 --format,但是会解释反斜杠转义符,不使⽤
输出结尾。如果您仍希望使⽤换⾏,可以
加⼊"\n"
-t, --terse 使⽤简洁格式输出
--help 显示此帮助信息并退出
--version 显示版本信息并退出
有效的⽂件格式序列(不使⽤ --file-system):
%a ⼋进制权限
stat时间戳
Access: 2019-10-18 14:58:59.465647961 +0800
Modify: 2019-10-18 14:58:57.799636638 +0800
Change: 2019-10-18 14:58:57.799636638 +0800
access、最近访问,⽂件每次被cat之后,时间变化,由于操作系统特性,做了优
modify,最近更改,更改⽂件内容,vim等
change,最近改动,⽂件元数据改变,如⽂件名
find命令
find命令⽤来在指定⽬录下查找⽂件。任何位于参数之前的字符串都将被视为欲查找的⽬录名。
如果使⽤该命令时,不设置任何参数,则find命令将在当前⽬录下查找⼦⽬录与⽂件。
并且将查找到的⼦⽬录和⽂件全部进⾏显示。
find 查找⽬录和⽂件,语法:
find 路径 -命令参数 [输出形式]
参数说明:
路径:告诉find在哪⼉去找你要的东⻄
| 参数 | 解释 |
|---|---|
| pathname | 要查找的路径 |
| options选项 | |
| -maxdepth | <⽬录层级>:设置最⼤⽬录层级; |
| -mindepth | <⽬录层级>:设置最⼩⽬录层级; |
| tests模块 | |
| -atime | 按照⽂件访问access的时间查找,单位是天 |
| -ctime | 按照⽂件的改变change状态来查找⽂件,单位是天 |
| -mtime | 根据⽂件修改modify时间查找⽂件【最常⽤】 |
| -name | 按照⽂件名字查找,⽀持* ? [] 通配符 |
| -group | 按照⽂件的所属组查找 |
| -perm | 按照⽂件的权限查找 |
| -size | n[cwbkMG] |
| -type 查找某⼀类型的⽂件 | b - 块设备⽂件。 d - ⽬录。 c - 字符设备⽂件。 p - 管道⽂件。 l - 符号链接⽂件。 f - 普通⽂件。 s - socket⽂件 |
| -user | 按照⽂件属主来查找⽂件。 |
| -path | 配合-prune参数排除指定⽬录 |
| Actions模块 | |
| -prune | 使find命令不在指定的⽬录寻找 |
| -delete | 删除找出的⽂件 |
| -exec 或-ok | 对匹配的⽂件执⾏相应shell命令 |
| 将匹配的结果标准输出 | |
| OPERATORS | |
| ! | 取反 |
| -a -o | 取交集、并集,作⽤类似&&和\ |
| 1、根据名字查找 |
[root@luffycity tmp]# find . -name "*.pid" #找出所有的pid(.是当前目录,/是从根目录开始)
./python1.pid
./python2.pid
....
[root@luffycity tmp]# find . -name "[0-9]*.pid"
./123a.pid
./123b
find . type d -name "[0-9]*.pid" (指定搜索的文件类型,f是文件,d是文件夹)
find . type f -name "[0-9]*.pid" delete (删除搜索到的问的文件)
2、find根据修改时间查找⽂件
#⼀天以内,被访问access过的⽂件
find . -atime -1
#⼀天以内,内容变化的⽂件
find . -mtime -1
#恰好在7天内被访问过的⽂件
[root@pylinux home]# find / -maxdepth 3 -type f -atime 7
-atime -2 搜索在2天内被访问过的⽂件
-atime 2 搜索恰好在2天前被访问过的⽂件
-atime +2 超过2天内被访问的⽂件
3、反向查找
find . -maxdepth 1 ! -type d(查找不是文件夹类型的所有文件)
4、按文件大小查找
find . -maxdepth 2 -size +10M
5、查找文件时忽略目录

find . -path "./conf.d" -prune -o -name "*.txt" -print
6、使⽤-exec或是-ok再次处理
-ok⽐-exec更安全,存在⽤户提示确认
#找出以.txt结尾的⽂件后执⾏删除动作且确认
find /opt/luffy_boy -type f -name "*.txt" -ok rm {} \;
{}作⽤是替代find查阅到的结果
{}前后得有空格
xargs命令
xargs ⼜称管道命令,构造参数等。
是给命令传递参数的⼀个过滤器,也是组合多个命令的⼀个⼯具它把⼀个
数据流分割为⼀些⾜够⼩的块,以⽅便过滤器和命令进⾏处理 。
简单的说就是 把其他命令的给它的数据,传递给它后⾯的命令作为参数
-d 为输⼊指定⼀个定制的分割符,默认分隔符是空格
-i ⽤ {} 代替 传递的数据
-I string ⽤string来代替传递的数据-n[数字] 设置每次传递⼏⾏数据
-n 选项限制单个命令⾏的参数个数
-t 显示执⾏详情
-p 交互模式
-P n 允许的最⼤线程数量为n
-s[⼤⼩] 设置传递参数的最⼤字节数(⼩于131072字节)
-x ⼤于 -s 设置的最⼤⻓度结束 xargs命令执⾏
-0,--null项⽤null分隔,⽽不是空⽩,禁⽤引号和反斜杠处理
案例
1、多行输出变单行
[root@luffycity tmp]# cat mjj.txt
1 2 3 4
5 6 7 8
9 10
[root@luffycity tmp]# xargs < mjj.txt
1 2 3 4 5 6 7 8 9 10
2、 -n参数限制每行输出个数
[root@luffycity tmp]# xargs -n 3 < mjj.txt #每⾏最多输出3个
1 2 3
4 5 6
7 8 9
10
3、⾃定义分隔符-d参数
echo "alex,alex,alex,alex,alex," |xargs -d ","
alex alex alex alex alex
#定义分隔符后,限制每⾏参数个数
[root@luffycity tmp]# echo "alex,alex,alex,alex,alex," |xargs -d "," -n 2
alex alex
alex alex
alex
3、-i参数的⽤法,⽤{}替换传递的数据
#找到当前⽬录所有的.txt⽂件,然后拷⻉到其他⽬录下
find . -name "*.txt" |xargs -i cp {} heih/(cp拷贝,mv移动)
4、-I 参数⽤法,⽤string代替数据
find . -name "*.txt" |xargs -I data mv data ./(data是获取到的数据起的变量,将该变量移动到指定目录中,这里设定的是当前目录)
5、找到当前⽬录下所有txt⽂件,然后删除
find . -name "*.txt" |xargs -i rm -rf {}
Linux文件属性与管理
⽂件或⽬录属性主要包括:
- 索引节点,inode
- ⽂件类型
- ⽂件权限
- 硬链接个数
- 归属的⽤户和⽤户组
- 最新修改时间
查看命令
ls -lhi /opt

图解:
- Inode索引节点号,(⼈的身份证,家庭地址等信息,唯⼀),系统
寻找⽂件名 > Inode号 > ⽂件内容 - ⽂件权限,第⼀个字符是⽂件类型,随后9个字符是⽂件权限,最后
⼀个. 有关selinux - ⽂件硬链接数量,与ln命令配合
- ⽂件所属⽤户
- ⽂件所属⽤户组
- ⽂件⽬录⼤⼩
- ⽂件修改时间
- ⽂件名
文件扩展名
Linux⽂件的扩展名只是⽅便阅读,对⽂件类型不影响
Linux通过⽂件属性区分⽂件类型
- txt⽂本类型
- conf .cfg .configure 配置⽂件
- sh .bash 脚本后缀
- py 脚本后缀
- rpm 红帽系统⼆进制软件包名
- tar .gz .zip 压缩后缀
文件类型
| 格式 | 类型 |
|---|---|
| ls -l看第⼀个字符(或许直接 ll) | |
| - | 普通⽂件regular file,(⼆进制,图⽚,⽇志,txt等) |
| d | ⽂件夹directory |
| b | 块设备⽂件,/dev/sda1,硬盘,光驱 |
| c | 设备⽂件,终端/dev/tty1,⽹络串⼝⽂件 |
| s | 套接字⽂件,进程间通信(socket)⽂件 |
| p | 管道⽂件pipe |
| l | 链接⽂件,link类型,快捷⽅式 |
普通文件
通过如下命令⽣成都是普通⽂件(windows中各种扩展名的⽂件,放⼊linux
也是普通⽂件类型)
- echo
- touch
- cp
- cat
- 重定向符号 >
普通⽂件特征就是⽂件类型是,"-"开头,以内容区分⼀般分为 - 纯⽂本,可以⽤cat命令读取内容,如字符、数字、特殊符号等
- ⼆进制⽂件(binary),Linux中命令属于这种格式,例如ls、cat等命令
⽂件夹
⽂件权限开头带有d字符的⽂件表示⽂件夹,是⼀种特殊的Linux⽂件 - mkdir
- cp拷⻉⽂件夹
链接类型 - ln命令创建
类似windows的快捷⽅式
file命令
显示文件的类型
[root@luffycity tmp]# file /usr/bin/python2.7 #⼆进制解释器
/usr/bin/python2.7: ELF 64-bit LSB executable
[root@luffycity tmp]# file /usr/bin/cd #shell脚本,
/usr/bin/cd: POSIX shell script, ASCII text executable
[root@luffycity tmp]# file hehe.txt #text类型
hehe.txt: ASCII text
[root@luffycity tmp]# file heihei #⽂件夹
heihei: directory
which
查找PATH环境变量中的⽂件,linux内置命令不在path中
[root@luffycity tmp]# which python
/usr/bin/python
whereis命令
whereis命令⽤来定位指令的⼆进制程序、源代码⽂件和man⼿册⻚等相关⽂件的路径。
tar命令
tar命令在linux系统⾥,可以实现对多个⽂件进⾏,压缩、打包、解包
语法
tar(选项)(参数)
-A或--catenate:新增⽂件到以存在的备份⽂件;
-B:设置区块⼤⼩;
-c或--create:建⽴新的备份⽂件;
-C <⽬录>:这个选项⽤在解压缩,若要在特定⽬录解压缩,可以使⽤这个选项。
-d:记录⽂件的差别;
-x或--extract或--get:从备份⽂件中还原⽂件;
-t或--list:列出备份⽂件的内容;
-z或--gzip或--ungzip:通过gzip指令处理备份⽂件;
-Z或--compress或--uncompress:通过compress指令处理备份⽂件;
-f<备份⽂件>或--file=<备份⽂件>:指定备份⽂件;
-v或--verbose:显示指令执⾏过程;
-r:添加⽂件到已经压缩的⽂件;
-u:添加改变了和现有的⽂件到已经存在的压缩⽂件;
-j:⽀持bzip2解压⽂件;
-v:显示操作过程;
-l:⽂件系统边界设置;
-k:保留原有⽂件不覆盖;
-m:保留⽂件不被覆盖;
-w:确认压缩⽂件的正确性;
-p或--same-permissions:⽤原来的⽂件权限还原⽂件;
-P或--absolute-names:⽂件名使⽤绝对名称,不移除⽂件名称前的“/”号;不建议使用
-N <⽇期格式> 或 --newer=<⽇期时间>:只将较指定⽇期更新的⽂件保存到备
--exclude=<范本样式>:排除符合范本样式的⽂件。
-h, --dereference跟踪符号链接;将它们所指向的⽂件归档并输出
案例
#tar 参数 包裹⽂件名 需要打包的⽂件
[alex@luffycity tmp]$ tar -cvf alltmp.tar ./*(./*是指当前目录下的所有内容)
#解包
tar -xvf ./alltmp.tar ./
#打包且压缩
tar -czvf ./alltmp1.tar.gz ./*
# 列出压缩文件中文件
tar -ztvf alltmp1.tar.gz
# 单独拆分压缩包的文件
tar -zxvf ./alltmp2.tar.gz ./alltmp.tar
# 指定目录解压缩
tar -zxvf alltmp2.tar.gz -C ./alltmp/
# 排除文件解压缩
tar -zxvf alltmp2.tar.gz -exclude alex.txt
# 压缩一个软连接时,直接压缩源文件
tar -zchf kx2.tar.gz ./kx.txt(kx.txt是一个软链接)
gzip命令
要说tar命令是个纸箱⼦⽤于打包,gzip命令就是压缩机器
gzip通过压缩算法lempel-ziv 算法(lz77) 将⽂件压缩为较⼩⽂件,节省60%以上的存储空间,以及⽹络传输速率
gzip无法压缩文件夹,必须先使用tar对文件夹打包后,才能gazip压缩
语法
gzip(选项)(参数)
-a或——ascii:使⽤ASCII⽂字模式;
-c或--stdout或--to-stdout 把解压后的⽂件输出到标准输出设备。
-d或--decompress或----uncompress:解开压缩⽂件;
-f或——force:强⾏压缩⽂件。不理会⽂件名称或硬连接是否存在以及该⽂件是否存在以及该文件是否为符号连接
-h或——help:在线帮助;
-l或——list:列出压缩⽂件的相关信息;
-L或——license:显示版本与版权信息;
-n或--no-name:压缩⽂件时,不保存原来的⽂件名称及时间戳记;
-N或——name:压缩⽂件时,保存原来的⽂件名称及时间戳记;
-q或——quiet:不显示警告信息;
-r或——recursive:递归处理,将指定⽬录下的所有⽂件及⼦⽬录⼀并处理;
-S或<压缩字尾字符串>或----suffix<压缩字尾字符串>:更改压缩字尾字符串;
-t或——test:测试压缩⽂件是否正确⽆误;
-v或——verbose:显示指令执⾏过程;
-V或——version:显示版本信息;
-<压缩效率>:压缩效率是⼀个介于1~9的数值,预设值为“6”,指定愈⼤的数值,压缩效率就越大
--best:此参数的效果和指定“-9”参数相同;
--fast:此参数的效果和指定“-1”参数相同。
# 对当前所有的txt文件进行gzip压缩
gzip ./*.txt(对当前目录中以txt结尾的进行压缩)
# 列出压缩文件的信息
gzip -l alex.txt.gz
zip命令
zip 命令:是⼀个应⽤⼴泛的跨平台的压缩⼯具,压缩⽂件的后缀为 zip⽂件,还可以压缩⽂件夹
语法
zip 压缩⽂件名 要压缩的内容
-A ⾃动解压⽂件
-c 给压缩⽂件加注释
-d 删除⽂件
-F 修复损坏⽂件
-k 兼容 DOS
-m 压缩完毕后,删除源⽂件
-q 运⾏时不显示信息处理信息
-r 处理指定⽬录和指定⽬录下的使⽤⼦⽬录
-v 显示信息的处理信息
-x “⽂件列表” 压缩时排除⽂件列表中指定的⽂件
-y 保留符号链接
-b<⽬录> 指定压缩到的⽬录
-i<格式> 匹配格式进⾏压缩
-L 显示版权信息
-t<⽇期> 指定压缩⽂件的⽇期
-<压缩率> 指定压缩率
最后更新 2018-03-08 19:33:4
案例
#压缩当前⽬录下所有内容为alltmp.zip⽂件
[root@luffycity tmp]# zip alltmp.zip ./*
#压缩多个⽂件夹
[root@luffycity tmp]# zip -r data.zip ./data ./data2
unzip解压
#查看压缩⽂件内容
[root@luffycity tmp]# unzip -l data.zip
#解压缩zip⽂件
[root@luffycity tmp]# unzip data.zip
浙公网安备 33010602011771号