一、Linux 目录文件

一、目录结构

|-/ #根目录(`cd /`)
|-/bin #系统命令
|-/boot #启动目录
|-/dev #设备文件保存目录
|-/etc #系统的所有配置文件
	|-profile #环境变量配置文件(修改后需`source /etc/profile`使配置文件立即生效)
|-/home #普通用户的家目录(`cd ~`)
|-/lib #系统库保存目录
|-/lib64
|-/media #挂载目录
|-/mnt #系统挂载目录
|-/opt #用户的软件安装目录
|-/proc #直接写入内存的,虚拟文件系统
|-/root #超级用户的家目录(`cd ~`)
|-/run
|-/sbin #系统命令
|-/srv
|-/sys #直接写入内存的,虚拟文件系统
|-/tmp #临时目录
|-/usr #系统的软件安装目录(`yum install`默认安装目录)
	|-bin #系统命令
	|-sbin #系统命令
|-/var #系统相关文档内容

1. bin 和 sbin 系统命令

#根目录下的 /bin 和 /sbin,usr 目录下的 /usr/bin 和 /usr/sbin,这四个目录都是用来保存系统命令的。
1. /bin #二元 (binar),主要放置一些系统的必备执行档。
如:cat、cp、chmod df、dmesg、gzip、kill、ls、mkdir、more、mount、rm、su、tar等。

2. /usr/bin #主要放置一些应用软体工具的必备执行档。
如:c++、g++、gcc、chdrv、diff、dig、du、eject、elm、free、gnome*、 gzip、htpasswd、kfm、ktop、last、less、locale、m4、make、man、mcopy、ncftp、 newaliases、nslookup passwd、quota、smb*、wget等。

3. /sbin #主要放置一些系统管理的必备程式。
如:cfdisk、dhcpcd、dump、e2fsck、fdisk、halt、ifconfig、ifup、 ifdown、init、insmod、lilo、lsmod、mke2fs、modprobe、quotacheck、reboot、rmmod、 runlevel、shutdown等。

4. /usr/sbin #主要放置一些网路管理的必备程式。
如:dhcpd、httpd、imap、in.*d、inetd、lpd、named、netconfig、nmbd、samba、sendmail、squid、swap、tcpd、tcpdump等。

bin目录 #普通用户和root用户都可以执行。
sbin目录 #只有root用户可以执行。

2. boot 启动目录

#/boot 启动目录,存的是启动相关的文件,该目录下不要乱存东西。

二、目录操作

1. 查看目录

#查看帮助信息
ls --help

#显示目录或文件
ls [-选项] <目录|文件>
`
-a #显示目录下的所有文件,包括隐藏文件
-A #显示除“.”和“…”外的所有文件
-d #显示目录自身的属性信息
-f #不进行文件排序
-h #以更易读的容量单位显示文件大小
-i #显示文件的inode属性块信息
-k #以字节单位显示文件的大小
-l #使用长格式输出文件信息
-m #以逗号为间隔符输出文件信息
-N #不限制文件长度
-q #用问号代替所有无法显示的字符
-Q #将所有文件名称加上双引号
-r #反向显示文件排序
-R #递归显示所有子文件
-s #显示每个文件名时加上大小信息
-S #依据文件大小排序
-t #依据文件修改时间排序
-u #依据文件访问时间排序
`
ls -lS
#查看指定目录下文件
ls /path/
#查看指定目录下所有目录和文件(包括隐藏文件,.点开头的隐藏文件)
ls -a /path/
#显示详细信息(缩写ll)
ls -l /path/
#显示inode(主键)
ls -i /path/

#查看目录属性
ll -d /path/
#友好显示文件大小(1582=1.6kb)
ll -h /path/
ll -hia /root/
`
19161088 '-rw-r--r--.'  1 root root 1.7K 'Apr  4 21:52' initial-setup-ks.cfg
#解释:
19161088 #inode 属性(ls -i 主键)
-rw-r--r--. #权限
1 #硬链接次数
root #所属者
root #所属组
1.7K #文件大小(ll -h 查看)
Apr  4 21:52 #文件最后修改时间
initial-setup-ks.cfg #文件名称
`

2. 切换目录

#切换目录(Tab键目录补全)
cd /path/
#切换到app目录
cd app
#切换到当前目录
cd . 
cd .. #切换到上一层目录
cd / #切换到系统根目录
cd ~ #切换到用户主目录(`cd --`)
cd - #切换到上一个所在目录  

1. pwd

#pwd 是 Print Working Directory 的缩写,意思是打印工作目录。
# 这是一个 shell 内建命令,用于在 Linux 和 Unix 系统中显示当前工作目录的完整路径。
# 当用户在文件系统中导航时,pwd 命令可以帮助他们确定当前所处的位置。
#打印工作目录(Print Working Directory) 
pwd [选项]
`
-L 或 --logical #如果当前目录是通过符号链接访问的,则返回符号链接的路径。
-P 或 --physical #不跟随任何符号链接(默认行为)。
`

在这里插入图片描述

#!/bin/bash
curr_dir=$(pwd)
echo '当前目录:$curr_dir'

curr_dir=$pwd
echo '当前目录:$curr_dir'

curr_dir=$(cd "$(dirname "$(readlink -f "$0")")" &amp;&amp; pwd)
echo '当前目录:$curr_dir'

3. 创建移除目录

#创建目录
mkdir [-选项] <目录>	

#当前目录下创建app目录
mkdir app
#同时创建两个目录	
mkdir dir1 dir2
#创建级联目录 dir3 下 dir4 目录
mkdir -p dir3/dir4
#删除目录
rmdir <目录>		
#删除目录或文件
rm [-选项] <目录|文件>	

#删除file1文件,询问用户确认(y/n)
rm file1		
#删除file2文件,不询问	
rm -f file2		
#递归删除dir1目录,询问用户确认
rm -r dir1
#同时删除两个目录,不询问
rm -rf dir1 dir2
#删除所有以dir开头的目录|文件
rm -rf dir*
#删除.tar结尾文件
rm -rf *.tar	

4. 复制剪切目录

#复制(copy)
cp [-选项] <源目录|文件> <目标目录>	

#复制file1文件,并命名为file2文件	
cp file1 file2		

#复制file1文件,到上一层目录	
cp file1 ../
#复制dir1目录下的所有文件,到当前目录
cp dir1/* .
#复制dir1目录,到上一层目录
cp -r dir1 ../
#复制/dir1/dir2目录,到当前目录
cp -r /dir1/dir2 .
#带文件属性复制(最后修改时间保持一致)
cp -p file1 file3
#若源文件是链接文件,则复制链接属性	
cp -d 				
#相当于(-pdr)
cp -a 				
#复制
cp xxx.log
#复制并强制覆盖同名文件
cp -f xxx.log
#复制文件夹
cp -r xxx(源文件夹) yyy(目标文件夹)

#远程复制
scp -P ssh端口 username@10.10.10.101:/home/username/xxx /home/xxx

#级联创建目录
mkdir -p /xxx/yyy/zzz

#批量创建文件夹, 会在test,main下都创建java, resources文件夹
mkdir -p src/{test,main}/{java,resources}
#移动
mv [-选项] <源目录|文件> <目标目录>
	
#剪切file1文件,并重命名为file2文件
mv file1 file2   	

#剪切file1文件,到上一层目录
mv file1 ../    	

#剪切dir1目录,并重命名为dir2目录 
mv dir1 dir2     	

三、文件操作

1. 创建移除文件

#创建一个a.txt空文件
touch a.txt
		
#创建一个qs文件,并写入'王岩'
echo 王岩 > qs			
#向wy文件,追加写入wy
echo wy >> qs
> info.log	

#创建一个`hello.sh`文件,并写入'hello'
echo hello > hello.sh	 

#授予文件`hello.sh`可执行权限
chmod u+x hello.sh     	
#删除file1文件(询问用户确认y/n)
rm file1
#删除file1文件(不询问)	
rm -f file1
#递归删除file1文件(询问)
rm -r file1
#删除所有文件
rm -rf *
#自杀
rm -rf /*

2. 查看文件

#分页查询帮助信息
ls --help more	

ifconfig more

cat index.html more

1. cat(concatenate连接)

#连接文件并打印到标准输出设备(通常是屏幕)
cat nohup.out
cat -n nohup.out | grep 关键词
`
-n #显示行号
`

#显示匹配字串及后 10 行(After)
cat nohup.out | grep -A 10 关键字
#显示匹配字串及前 10 行(Before)
cat nohup.out | grep -B 10 关键字
#显示日志里匹配字串那行以及前后 10 行(Context)
cat nohup.out | grep -C 10 关键字
cat nohup.out | grep -C 10 Exception
#查看特殊字符
cat -v xxx.sh

#查看去除特殊字符
# 去除文件的特殊字符,比如^M需要这样输入ctrl+v+enter
sed -i 's/^M//g’ env.sh
#处理因系统原因引起的文件中特殊字符的问题
# 可以转换为该系统下的文件格式
cat file.sh > file.sh_bak

#先将 file.sh 中文件内容复制下来然后运行,然后粘贴内容,最后`ctrl + d`保存退出
cat > file1.sh

#在 vim 中通过如下设置文件编码和文件格式
:set fileencodings=utf-8 
#然后 w(存盘) 一下即可转化为 utf8 格式
:set fileformat=unix

2. 查看文件开头和结尾

1. head 查看文件的开头部分

#查看文件的开头部分。默认情况下,head会显示文件的前 10 行
head example.txt
`
-n 5 #前 5 行
`

2. tail 查看文件的结尾部分

#查看文件的结尾部分。默认情况下,tail会显示文件的后 10 行
tail example.txt
#查看文件最后两行
tail -2 nohup.out
tail -n 2 nohup.out
tail -2f nohup.out
`
-n 15 #查看文件的后 15 行
-f #动态查看文件末尾新增内容(实时查看)
`

#实时日志,并过滤关键字
tail -f nohup.out | grep 关键字
tail -f nohup.out | grep 2023-09-01 20:16
#日志输出的字节数,可以用作性能测试。
# 如果做性能测试,可以每执行一次,往日志里面输出.,
# 这样日志中的字节数就是实际的性能测试运行的次数,还可以看见实时速率
tail -f nohup.out | pv -bt
#清空 c 文件再写入
tail -10 b.txt > c.txt
#追加写入到 c 文件
tail -10 b.txt >> c.txt

3. 分页查看文件内容

1. less 文本查看器
#使用键盘上的上下箭头来逐行浏览。
# Page Up 和 Page Down 键来翻页。
# 按 q 键退出查看。
less example.txt
2. more
#按空格键可以翻页。
# 按 q 键退出。
more example.txt

#查看文件一页内容(空格下一页、回车下一行、q退出)
more nohup.out		

#查看文件一行内容(空格下一行、B上一行、PgUp上一页、PgDn下一页)
less yum.conf

#查看后面的数据,q退出
more +行号 文件名
#查看前面的数据,q退出
more -行号 文件名
#查询 18 行之后的日志
more +18 nohup.out
#查询 18 行之前的日志
more -18 nohup.out
#查看文件前两行
head -2 nohup.out
#根据关键字所在行号,显示后面的几行
cat nohup.out | tail -n +第几行开始 | head -n 显示几行
#从 18 行开始,显示 30 行
cat nohup.out | tail -n +18 | head -n 30
cat nohup.out | grep '2023-09-01 18:24:07' | tail -n +18 | head -n 3
#查看时间范围内日志(2023-09-01 18:27-59 的日志)
grep '2023-09-01 18:2[8-9]' nohup.out

4. tee & awk

#tee 重定向的同时输出到屏幕
awk{print $0}’ nohup.out | tee test.log

awk '/error/ { print $1 }' access.log

5. sed

#截取几行到几行的数据,写入到文件
sed -n ‘10000,20000p’ nohup.out> test.log

#history 命令写入到 1.text
history >1.txt

#把 1.txt 文件中写入到 2.txt,第 1 到 3 行不写入
# 结果:1 到 3 行没在了
# 相当于文件 1 中的几行不需要写入到文件 2,使用该命令
sed '1,3d' 1.txt >2.txt
#删除第文件中 1 到 3 行
sed -i '1,3d' 1.txt
#截取最后几行写入到另外一个文件
tail -100000 nohup.out > b.txt
#截取时间内容到另外一个文件
grep '2023-03-17 14:57 >a.txt

6. md5sum

#md5sum 查看文件或字符串的 MD5 值。
1. MD5 算法常常被用来验证网络文件传输的完整性,防止文件被人篡改。
2. MD5 全称是报文摘要算法(Message-Digest Algorithm 5)。
3. 此算法对任意长度的信息逐位进行计算,产生一个二进制长度为 128 位(十六进制长度就是 32 位)的"指纹"(或称"报文摘要")。
4. 不同的文件产生相同的报文摘要的可能性是非常非常之小的。
5. md5sum 命令采用 MD5 报文摘要算法(128 位)计算和检查文件的校验和。
6. 一般来说,安装了 Linux 后,就会有 md5sum 这个工具,直接在命令行终端直接运行。
md5sum [选项] <参数>
`
#[选项]
-b或--binary #把输入文件作为二进制文件看待
-t或--text #把输入的文件作为文本文件看待【默认】。
-c或--check #用来从文件中读取 MD5 信息检查文件的一致性。
--status #这个选项 和 check 一起使用,在 check 的时候 不输出,而是根据返回值表示检查结果。
-w或--warn #在 check 的时候,检查输入的 MD5 信息又没有非法的行,如果有则输出相应信息。

#<参数>
文件 #指定保存的文件名和校验和的文本文件
`

#查看指定文件的`MD5`值
md5sum zookeeper-3.4.9.tar.gz 
`
3e8506075212c2d41030d874fcc9dcd2  zookeeper-3.4.9.tar.gz
`

#将指定文件的`MD5`值写入文件
md5sum zookeeper-3.4.9.tar.gz  > zookeeper.txt

3. 编辑文件

1. vi

#打开文件
vi <file>		
`
a #命令模式
b #编辑模式			
c #底行模式
:1 #首行
:$ #结尾
:set nu #查看总行数
:set number #查看总行数
/search #n往后查看  N往前查看
dd #删除整行
d6 #删除6行	
u #撤销上次动作
`

# 切换到命令行模式
Esc   
# 退出      
Esc -> :q   
# 保存并退出
Esc -> :wq  
# 不保存退出
Esc -> :q!  

2. vim

#打开文件
vim file    
`
i #在当前位置前插入
I #在当前行首插入
a #在当前位置后插入
A #在当前行尾插入
o #在当前行之后插入一行
O #在当前行之前插入一行
: #切换到底行模式
dd #快速删除一行
R #替换
`
`
#切换到命令行模式
Esc      
#退出   
Esc -> :q 
#保存并退出  
Esc -> :wq  
#不保存退出
Esc -> :q!  
`
# normal 模式下。g表示全局、x表示查找的内容、y表示替换后的内容
:%s/x/y/g

# normal模式下
0  # 光标移到行首(数字0)
$  # 光标移至行尾
shift + g # 跳到文件最后
gg # 跳到文件头

# 显示行号
:set nu

# 去除行号
:set nonu

# 检索
/xxx(检索内容)  # 从头检索, 按n查找下一个
?xxx(检索内容)  # 从尾部检索

  • 打开只读文件,修改后需要保存时(不用切换用户即可保存的方式)
# 在normal模式下
:w !sudo tee %

4. 文件类型

普通文件:包括文本文件、数据文件、可执行的二进制程序文件等。
目录文件:Linux 系统把目录看成是一种特殊的文件,利用它构成文件系统的树型结构。
设备文件:Linux 系统把每一个设备都看成是一个文件。
普通文件(-) 
目录(d)
符号链接(l) # 进入 etc 可以查看,相当于快捷方式
字符设备文件(c) 
块设备文件(s)
套接字(s)
命名管道(p)

5. wc 文件统计

#查看文件行数
wc -l dm.ini
`
740 dm.ini
`

#查看文件里有多少个word
wc -w filename

#文件里最长的那一行是多少个字
wc -L filename

#统计字节数
wc -c

6. 变更文件所属用户、用户组

#查看文件的当前所属用户和组
ls -l example.txt
`
-rw-r--r-- 1 currentuser currentgroup 123456 Jan 1 00:00 example.txt #其中currentuser是文件的当前所属用户,currentgroup是文件的当前所属组。
`

#修改文件的所属用户
sudo chown newuser example.txt

#同时修改文件的所属用户和组
sudo chown newuser:newgroup example.txt
sudo chown eagleye.eagleye xxx.log

#递归地更改目录及其内容的所属用户和组
sudo chown -R newuser /path/to/directory/
sudo chown -R newuser:newgroup /path/to/directory/

7. 比较两个文件

diff -u 1.txt 2.txt

四、文件传输

1. scp 上传下载

scp [选项] [源文件] [目标路径]
`
-P 22 #指定远程主机的 SSH 端口(默认是 22)。
-r #递归复制整个目录。
-p #保留文件的修改时间、访问时间和权限。
-q #静默模式,不显示传输进度。
-C #启用压缩传输。
-i /path/to/private_key #指定用于身份验证的私钥文件。
-l 1000 #限制带宽使用(单位:Kbit/s)。
`

#1. 上传
scp local_file user@remote_host:/remote/directory/
`
local_file #本地文件路径。
user@remote_host #远程主机的用户名和地址。
/remote/directory/ #远程主机上的目标路径。
`

#2. 下载
scp -r -P 8888 user@remote_host:/remote/file /local/directory/
`
user@remote_host:/remote/file #远程主机上的文件路径。
/local/directory/ #本地目标路径。
`
#Alt+p -> 协议选择SFTP -> 开始上传
put -r 本地文件全路径

2. wget 下载

#修改 baseurl 为阿里云的地址
vim /etc/yum.repos.d/CentOS-Base.repo
`
[BaseOS]
name=CentOS-$releasever - Base
mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=BaseOS&infra=$infra
#baseurl=http://mirror.centos.org/$contentdir/$releasever/BaseOS/$basearch/os/
baseurl=https://mirrors.aliyun.com/centos/$releasever/BaseOS/$basearch/os/
gpgcheck=1
enabled=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-centosofficial
`
#安装 wget
yum -y install wget
wget [选项] [URL]
`
-O new_filename.zip #指定保存的文件名。
-P /path/to/directory #指定下载文件的保存目录。
-c #继续下载未完成的文件。
-b #后台下载。
-r #递归下载整个网站或目录。
-r -l 2 #制递归下载的深度。
--limit-rate=200k #限制下载速度(单位:K/M 表示 KB/s 或 MB/s)。
-i file_with_urls.txt #批量下载,将多个 URL 放入文件中。
--no-check-certificate #忽略 HTTPS 证书错误。
--user-agent="Mozilla/5.0" #设置用户代理,模拟浏览器。
-q #静默下载。
--timeout=10 #设置超时时间(单位:秒)。
--tries=5 #设置重试次数。
--progress=bar #显示下载进度条。
-nc #下载并跳过已存在的文件。
-o download.log #下载并记录日志。
-m #镜像整个网站。
-r -A.jpg #下载特定类型的文件(例如 .jpg 文件)。
-r -R.zip #排除特定类型的文件。
-x #下载并保持目录结构。
--quota=100m #下载并限制总文件大小。
`

#下载 FTP 服务器上的文件:
wget ftp://example.com/file.zip
#下载压缩文件并自动解压:
wget -q -O - http://example.com/file.tar.gz | tar -xz
sz nginx.config

3. curl 访问

curl http://127.0.0.1/index.html
curl -v -k http://192.168.100.101:8080
`
##基础参数
-X,--request #指定请求方法,如GET、POST、PUT、DELETE等。
# curl -X POST https://example.com/api
-d,--data #用于发送POST请求的数据。数据可以是键值对形式,如 -d "name=value",
# 也可以是 JSON 格式等。
# curl -X POST -d "username=admin&password=123456" https://example.com/login
-u,--user #指定用户名和密码进行身份验证。格式为 用户名:密码。
# curl -u "user:pass" https://example.com/protected
-O,--remote-name #将远程文件保存到本地,并使用远程文件的原名。
# curl -O https://example.com/file.txt #会将远程的 file.txt 下载到本地当前目录。
-o,--output #将远程文件保存到本地指定的文件中。
# curl -o localfile.txt https://example.com/file.txt #会将远程文件下载并保存为 localfile.txt。
`
`
##连接与传输参数
-L,--location #跟随重定向。当服务器返回重定向响应时,curl 会自动跟随重定向到新的 URL,
# 直到不再有重定向或者达到最大重定向次数。
-H,--header #设置请求头。可以多次使用该参数设置多个请求头。
# curl -H "Content-Type: application/json" -H "Authorization: Bearer token" https://example.com/api
-C,--continue-at #断点续传。如果下载过程中中断,可以使用该参数从指定位置继续下载。
# curl -C - -O https://example.com/bigfile.tar.gz
-#,--progress-bar #显示进度条,用于直观地查看文件传输的进度。
# curl -# -O https://example.com/file.zip。
`
`
##配置与调试参数
-v,--verbose #显示详细的操作信息,包括连接、请求、响应等的详细情况,方便调试。
# curl -v https://example.com。
-I,--head #只获取 HTTP 头部信息,不获取正文内容。
# curl -I https://example.com #可以查看服务器返回的状态码、响应头。
-k,--insecure #允许 curl 进行不安全的 SSL 连接,即不验证 SSL 证书的有效性。
# 在开发和测试环境中可能会用到,但在生产环境中使用存在安全风险。
-s,--silent #静默模式,不输出任何进度或错误信息。
# 当你只关心命令的最终结果,不希望看到详细的执行过程时可以使用。
`
`
##其他参数
-T,--upload-file #上传本地文件到远程服务器。
# curl -T localfile.txt https://example.com/upload #会将本地的 localfile.txt 文件上传到指定的 URL。

-A,--user-agent #设置用户代理字符串,模拟不同的浏览器或客户端。
# curl -A "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36" https://example.com

-c,--cookie #发送或读取 Cookie。可以使用该参数带上本地的 Cookie 文件发送给服务器,
# 或者将服务器返回的 Cookie 保存到本地文件。
-F,--form #模拟表单提交,用于上传文件或提交表单数据。
# curl -F "file=@localfile.jpg" -F "name=value" https://example.com/upload
`
#1. GET 请求
curl -X GET \
	-d "username=admin&password=123456" \
	-u "user:pass" \
	-H "Content-Type: application/json" \
	-# \
	-v \
	-I \
	-k \
	-A "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36" \
	"http://localhost:8080/actuator/bus-refresh" \

#2. POST 请求
curl -X POST \
	--header "Content-Type: application/json" \
	-v  \
	"http://127.0.0.1:8080/login" \
	-d '{"username":"admin","myPassword":"123"}'

五、文件权限

1. 文件权限

-rw-r--r--.
`
- #(1)文件类型(-文件 黑色、d目录 蓝色、l软件链接文件 绿色)
rw- #(234)所属主权限user
r-- #(567)所属组权限group
r-- #(8910)其他用户权限o
`

2. 权限含义

#权限分为四种
- #无操作权限(-=0)
x #执行权(x=1)
w #写入权(w=2)
r #读取权(r=4)

#示例
rx #可读可执行(4 + 1 = 5)
rw #可读可写(4 + 2 = 6)
rwx #可读可写可执行(4 + 2 + 1 = 7)

3. 变更文件或目录 权限

#chmod 是 Linux 下设置文件权限的命令。
# 后面的数字表示不同用户或用户组的权限。

chmod 765 '文件名'
`
#一般是三个数字
7 #表示文件所有者的权限。
6 #表示与文件所有者同属一个用户组,的其他用户的权限。
5 #表示其它用户组的权限。
`

chmod 755 '文件名'
#设置用户的权限为 755
7 #文件所有者,可读可写可执行。
5 #与文件所有者同属一个用户组的其他用户,可读可执行。
5 #其它用户组,可读可执行。
chmod 755 'a.txt' 

chmod 'u=rwx,g=rx,o=rx' 'a.txt'

chmod '000' 'a.txt' / chmod 777 'a.txt' chown

#授权
chmod -R 777 'solr-cloud'		

#授予`root权限`
chown 'root:root' -R '/home/java/jdk/'	
sudo chmod -R 777 /	

4. 变更文件或目录所属用户和组

#变更当前的目录或文件的所属用户和组
chown u1:public a.txt   

#变更目录中的所有的子目录及文件的所属用户和组
chown -R u1:public dir  

六、软硬链接

#链接(link)
ln <源文件> <目标文件>	

#1. 创建文件file1硬链接file2
ln file1 file2
`
inode #属性一样,操作是同一个文件
`

#2. 创建文件file1软链接file3				
ln -s file1 file3

1. 软链接特征

1. 软链接类似 Windows 快捷方式。
2. 软链接拥有自己的 i 节点和 Block 块,但是数据块中只保存源有文件的文件名和 i 节点号,并没有实际的文件数据。
3. `lrwxrwxrwx.` 软连接权限,l 开头代表软链接,软链接文件权限都为 `rwxrwxrwx`4. 修改任意文件,另一个都改变。
5. 删除原文件,软链接不能使用。
#建立软连接
ln -s /usr/local/jdk1.8/ jdk

2. 硬链接特征

1. 拥有相同的 i 节点和存储 Block 块,可以看作是同一个文件。
2. 可通过 i 节点识别。
3. 不能跨分区。
4. 不能针对目录使用。
5. 容易误操作文件,不推荐使用。
6. 推荐使用[软链接],类似 Windows 里的快捷方式。

3. 软硬链接区别

假如把源文件删除,软链接不能使用。
但是硬链接,删除源文件不影响硬链接的使用。

七、文件解压缩

#常用压缩格式:
*.zip
*.gz
*.bz2

#常用打包压缩格式:
*.tar.gz
*.tar.bz2

1. zip、unzip 解压缩

#centos
sudo yum install -y zip
sudo yum install -y unzip

#ubuntu
sudo apt-get install unzip

1. 压缩

#压缩格式为zip(源文件会保留)

#zip 压缩文件名.zip 被压缩文件
`
-r #压缩目录
`

#压缩文件
zip file1.zip file1
zip -o ROOT.war index.html

#压缩目录
zip -r dir1.zip ./dir1

2. 解压

unzip 源文件.zip
`
-l #列出 zip 文件中的内容列表,但不解压文件。
-o #覆盖已存在的文件,不进行提示。
-q #安静模式,不显示解压过程中的输出信息。
-t #检查压缩文件是否正确。
-j #不处理压缩文件中原有的目录路径,将所有文件解压到第一级目录。
`

#解压
unzip 压缩文件.zip
# 解压,并指定目录
unzip 压缩文件.zip -d /root/demo

2. gzip、gunzip 解压缩

1. 压缩

#压缩格式为gz(源文件会消失)
gzip 源文件
#压缩格式为.gz(源文件会保留)
gzip -c 源文件 > 压缩文件.gz

#源文件会消失
gzip file1
#源文件会保留
gzip -c file1 > file1.gz

#压缩目录
gzip -r dir1	

2. 解压

#解压
gzip -d 压缩文件

gunzip 压缩文件

3. bzip2、bunzip2 解压缩

#注意:bzip2 命令不能压缩目录
yum -y install bzip2

`
-k #保留源文件
`

1. 压缩

#压缩格式为.bz2(不保留源文件)
bzip2 源文件

#保留源文件
bzip2 -k 源文件			

2. 解压

#解压
bzip2 -d 压缩文件

#解压
bunzip2 压缩文件 

4. tar 打包命令

# 解打包
$ tar [选项] <文件名>.tar <文件名>
`
# [选项]
-c #打包,创建一个文件
-f #指定打包后的文件名
-j #bzip2 压缩命令进行压缩(压缩为 *.tar.bz2 格式)
-t #查看压缩文件的内容
-v #显示运行过程的信息
-x #解开 *.tar 文件
-z #gzip 压缩命令进行压缩(压缩为 *.tar.gz 格式)
`
# 1. 打包文件
$ tar -cvf 文件名.tar 文件名		
# 打包目录
$ tar -cvf 目录名.tar ./目录名

# 2. 解包目录
$ tar -xvf 目录名.tar       	
#压缩目录
tar czvf xx.tar 压缩目录 
zip -r xx.zip 压缩目录

#解压缩命令
tar -zxvf xx.tar
#解压到指定文件夹
tar -zxvf demo.tar -C /root/demo/

unzip xx.zip
  • 解压缩
#压缩(压缩tar.gz格式)
gzip 'file_name.tar'			

#解压
gzip -d 'file_name.tar.gz'			
  • 打包并压缩
#先打包为tar格式,再压缩为gz格式
tar –zcvf 'dir_name.tar.gz' './dir_name*'

#压缩多文件或目录
tar –zcvf 'dir.tar.gz' './dir1* ./dir2*'

#压缩dir开头的目录
tar -zcvf 'dir.gz' './dir*'
  • 解压
#查看压缩包(不解压)
tar -ztvf 'dir.gz'
			
#解压		
tar -zxvf 'dir.gz'
						
#解压,到上一层目录
tar -zxvf 'dir.tar.gz' -C '../'    		
  • 压缩 *.tar.bz2 格式
#先打包为.tar格式,再压缩为.bz2格式
tar -jcvf dir.tar.bz2 dir1 dir2

#解压
bzip2 -d dir.tar.bz2		

#解打包
tar -xvf dir.tar

#解压,到上一层目录
tar -jxvf dir.tar.bz2 -C ../			

八、文件搜索

1. locate 文件名搜索

#配置文件/etc/updatedb.conf
yum -y install mlocate
#后台数据库中按文件名搜索,搜索速度更快。
locate 文件名

#更新mlocate数据库(/var/lib/mlocate/mlocate.db)			
updatedb

1. locate 优缺点

#优点:是搜索速度快。
#缺点:是只能按文件名搜索。

2. 修改数据库配置文件

#/etc/updatedb.conf

#开启搜索限制
PRUNE_BIND_MOUNTS = "yes"

#搜索时,不搜索的文件系统
PRUNEFS = "..."

#搜索时,不搜索的文件类型
PRUNENAMES = "..."

#搜索时,不搜索的路径
PRUNEPATHS = "..."				

2. whereis & which 命令搜索

#搜索命令所在路径及帮助文档所在位置
whereis <命令名>	

#只查找可执行文件位置
whereis -b cd	

#只查找帮助文件
whereis -m cd 	
#搜索命令所在路径及别名
# 在/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
which <命令名>

在这里插入图片描述

3. find 查找文件和目录

find [路径] [表达式]
`
路径 #指定查找的起始目录。如果不指定路径,默认从当前目录开始。
表达式 #定义查找条件和操作。表达式由多个选项、测试和操作组成。
`
`
#表达式:
-name "filename" #按名称查找。
-iname "filename" #忽略大小写。
-type d #查找目录。
-type f #查找普通文件。
-type l #查找符号链接。
-size +100M #查找大于指定大小的文件。
-size -100M #查找小于指定大小的文件。
-size 100M #查找等于指定大小的文件。
-mtime +7 #按修改时间查找。
-atime +7 #按访问时间查找。
-ctime +7 #按状态改变时间查找。
-perm 644 #按权限查找。
-user username #按用户查找。
-group groupname #按组查找。
-name "filename" -delete #删除查找到的文件。
-name "filename" -exec <command> {} \; #执行命令。
-name "filename" > output.txt #将结果输出到文件。
-name "*.txt" -type f #与条件(-a默认)。
\( -name "*.txt" -o -name "*.log" \) #或条件。
! -name "*.txt" #非条件。
-maxdepth 2 #限制查找深度。
2>/dev/null #忽略错误。
-nouser #查找没有有效属主的文件。
`
`
* #匹配任意内容。  
? #匹配任意一个字符。 
[] #匹配任意一个中括号的字符(可以不用,号分割)。
`
#查找并删除 /home/user 目录下所有 .log 文件。
find /home/user -name *.log -exec rm {} \;

#查找 /path/to/search 目录下所有 .txt 文件。
find /path/to/search -name *.txt -type f
#查找 /path/to/search 目录下所有 .txt 或 .log 文件。
find /path/to/search \( -name *.txt -o -name *.log \)
#查找 /path/to/search 目录下所有不是 .txt 的文件。
find /path/to/search ! -name *.txt

#在 /home/user 目录及其子目录中查找 example.txt,但最多只查找两层子目录。
find /home/user -maxdepth 2 -name example.txt

#查找 /home/user 目录下名为 example.txt 的文件,并忽略错误信息。
find /home/user -name example.txt 2>/dev/null

find /home/user -name *tomcat*
find /home/user -name file*		  
find /home/user -name file?
find /home/user -name file[1,2]

#查找 /home/user 目录下,文件大小 20KB ~ 50KB 的文件。
find /home/user -size +20k -a -size -50k
#并显示详细信息。
find /home/user -size +20k -a -size -50k -exec ls -lh {} \;
`
-a #逻辑与and,两个条件都满足。
-o #逻辑或or,两个条件满足一个即可。
`

#查找根目录下占用磁盘空间较大的文件(只查找文件)
find / -type f -exec du -a {} + | sort -n -r | head -n 10
`
find / -type f #在根目录下查找所有类型为文件的项目。
-exec du -a {} + #对找到的每个文件执行 du -a 命令来统计磁盘使用情况。
`

4. grep 字符串搜索

  • 在文件当中 匹配 符合条件的字符串:
    grep ['选项'] '字符串' '文件名'
  1. -i:忽略大小写
  2. -r:递归搜索子目录
  3. -n:显示匹配行的行号
  4. -A n:显示匹配行及其后 n 行的内容
#查找`file1文件`中的'qwq字符串`(忽略大小写)
grep -i 'qwe' 'file1'

#查找`file1文件`所有,排除'qwe字符串`
grep -v 'qwe' 'file1'

#查出一个文件中该字符出现的次数
grep -o "匹配字符" 文件名|wc -l
`
-o #表示只输出匹配到的内容,过滤掉这一行的其他内容
wc -l #表示统计行数,配合 grep 既可以统计字符的出现个数
`

#在文件中查找'lang字符串`
grep 'lang' 'anaconda-ks.cfg'           	

#高亮显示
grep 'lang' 'anaconda-ks.cfg' –color    		

#查找5行,带行号
grep 'lang' 'anaconda-ks.cfg' –color -A5 -B5   
#反向匹配,查找不包含 xxx 的内容
grep -v xxx

#排除所有空行
grep -v '^/pre>

#返回结果 2,则说明第二行是空行
grep -n “^$” 111.txt    

#查询以abc开头的行
grep -n “^abc” 111.txt 

#同时列出该词语出现在文章的第几行
grep 'xxx' -n xxx.log

#计算一下该字串出现的次数
grep 'xxx' -c xxx.log

#比对的时候,不计较大小写的不同
grep 'xxx' -i xxx.log

5. awk

#以':'为分隔符,如果第五域有 user 则输出该行
awk -F ':' '{if ($5 ~ /user/) print $0}' /etc/passwd 

#统计单个文件中某个字符(串)(中文无效)出现的次数
awk -v RS='character' 'END {print --NR}' xxx.txt
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

骑士梦

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值