文件管理


链接文件

软链接

软链接(符号链接): 软链接是一个特殊类型的文件,它创建了一个指向目标文件或目录的快捷方式。它们指向的索引节点(inode)值不一样, 软链接类似于Windows系统中的快捷方式或Mac系统中的别名。软链接具有自己的文件权限和属性,并且可以指向不同的文件系统。如果原始文件或目录被删除,软链接将失效。

软链接文件的源文件必须写成绝对路径,不能写成相对路径(硬链接没有这样的要求);

创建软链接的命令是ln -s,具体语法如下: ln [参数][源文件或目录][目标文件或目录(要创建链接文件)]

ln /usr/local/nginx/sbin/nginx /usr/bin/nginx
ln -s /usr/bin/python3 python

硬链接

硬链接是目录中的另一个入口点,它指向与原始文件或目录相同的索引节点(inode)。与软链接不同,硬链接不创建新的文件,而是创建了一个与原始文件或目录关联的新目录项。 硬链接与原始文件或目录共享相同的inode编号,因此在文件系统级别,它们被视为相同的文件。

  • 不论是修改源文件(test 文件),还是修改硬链接文件(test-hard 文件),另一个文件中的数据都会发生改变。
  • 不论是删除源文件,还是删除硬链接文件,只要还有一个文件存在,这个文件都可以被访问。
  • 硬链接不会建立新的 inode 信息,也不会更改 inode 的总数。
  • 硬链接不能跨文件系统(分区)建立,因为在不同的文件系统中,inode 号是重新计算的。
  • 硬链接不能链接目录,因为如果给目录建立硬链接,那么不仅目录本身需要重新建立,目录下所有的子文件,包括子目录中的所有子文件都需要建立硬链接,这对当前的 Linux 来讲过于复杂。
  • 硬链接的限制比较多,既不能跨文件系统,也不能链接目录,而且源文件和硬链接文件之间除 inode 号是一样的之外,没有其他明显的特征。这些特征都使得硬链接并不常用。

ln,具体语法: ln <目标文件或目录> <链接名称>

ln /home/user/docs docs_link
​特性​​软链接​​硬链接​
​本质​快捷方式文件(独立 inode)文件别名(共享 inode)
​跨文件系统​yesNO
​链接目录​yesNO
​源文件删除​链接失效(悬空链接)仍然可用
​创建命令​ln -s <源文件绝对路径> <链接名>ln <源文件> <链接名>
​查看目标​readlink <链接名>无独立目标

文件权限

实例

$ ls /bin/java -l
lrwxrwxrwx 1 root root 22 May 18 15:14 /bin/java -> /etc/alternatives/java

l(文件类型) rwx(拥有者权限) rwx(所在组权限) rwx(其他用户权限)

  • 文件类型说明 ”-” 表示普通文件 “d” 表示目录 “l” 表示链接文件 “p” 表示管理文件 “b” 表示块设备文件 “c” 表示字符设备文件 “s” 表示套接字文件

  • 权限说明 r(Read,读取权限):对文件而言,具有读取文件内容的权限;对目录来说,具有浏览目录的权限。 w(Write,写入权限):对文件而言,具有新增、修改文件内容的权限;对目录来说,具有删除、移动目录内文件的权限。 x(eXecute,执行权限):对文件而言,具有执行文件的权限;对目录来说,该用户具有进入目录的权限。

s或S(SUID,Set UID):可执行的文件搭配这个权限,便能得到特权,任意存取该文件的所有者能使用的全部系统资源。请注意具备SUID权限的文件,黑客经常利用这种权限,以SUID配上root帐号拥有者,无声无息地在系统中开扇后门,供日后进出使用。 t或T(Sticky):/tmp和 /var/tmp目录供所有用户暂时存取文件,亦即每位用户皆拥有完整的权限进入该目录,去浏览、删除和移动文件。

权限代码(二进制掩码) 4(读) 2(写) 1(执行)

权限修改

chmod

Linux chmod(英文全拼:change mode)命令是控制用户对文件的权限的命令 只有文件所有者和超级用户可以修改文件或目录的权限。可以使用绝对模式(八进制数字模式),符号模式指定文件的权限。

chmod 755 file.txt          # 数值模式(rwxr-xr-x)
chmod u+x,g-w,o=r file.txt  # 符号模式(所有者+执行,组-写,其他=读)
chmod -R 644 /var/www       # 递归修改目录下所有文件

语法

chmod [-cfvR] [--help] [--version] mode file...

-c : 若该文件权限确实已经更改,才显示其更改动作 -f : 若该文件权限无法被更改也不要显示错误讯息 -v : 显示权限变更的详细资料 -R : 对目前目录下的所有文件与子目录进行相同的权限变更(即以递归的方式逐个变更) —help : 显示辅助说明 —version : 显示版本

# 文件
chmod 777 file
 
# 目录  -R 参数为递归
chmod 777 directory - R 
  • 文件查找 修改权限 将 /home/user/documents 目录下所有 .txt 文件的权限设置为 644
find /home/user/documents -type f -name "*.txt" -exec chmod 644 {} +

chown​

Linux chown(英文全拼:change owner)命令用于设置文件所有者和文件关联组的命令。

Linux/Unix 是多人多工操作系统,所有的文件皆有拥有者。利用 chown 将指定文件的拥有者改为指定的用户或组,用户可以是用户名或者用户 ID,组可以是组名或者组 ID,文件是以空格分开的要改变权限的文件列表,支持通配符。

chown 需要超级用户 root 的权限才能执行此命令,非超级用户如需要设置关联组可能需要使用 chgrp 命令。

语法:

chown [选项] 所有者[:组] 文件...
chown [选项] --reference=参考文件 文件...

选项 :

  • -R, —recursive: 递归更改目录及其子目录中所有文件的所有者
  • -v, —verbose: 显示详细操作信息
  • -c, —changes: 只显示实际发生更改的文件
  • -f, —silent, —quiet: 抑制错误信息
  • —reference=文件: 使用参考文件的所有者和组设置
  • -h, —no-dereference: 影响符号链接本身,而不是链接指向的文件
  • —from=当前所有者: 只有当前所有者匹配时才更改
#1. 只更改所有者
chown username filename
chown john file.txt
 
#2. 同时更改所有者和组
 
chown username:groupname filename
chown john:developers script.sh
 
#3. 只更改组(所有者前留空)
chown :groupname filename
chown :staff document.txt
 
#4. 使用数字ID
chown 1000:1000 filename    # 用户ID 1000,组ID 1000
chown 1001 filename         # 只更改用户ID

查找文件占用

lsof(list open files)是一个列出当前系统打开文件的工具。在linux环境下,一切皆文件,通过文件不仅仅可以访问常规数据,还可以访问网络连接和硬件。

所以如传输控制协议 (TCP) 和用户数据报协议 (UDP) 套接字等,系统在后台都为该应用程序分配了一个文件描述符,无论这个文件的本质如何,该文件描述符为应用程序与基础操作系统之间的交互提供了通用接口。因为应用程序打开文件的描述符列表提供了大量关于这个应用程序本身的信息,因此通过lsof工具能够查看这个列表对系统监测以及排错将是很有帮助的。

lsof /var/log/syslog          # 查看占用指定文件的进程
lsof -c nginx                 # 查看指定进程打开的文件
lsof -i :80                   # 查看占用端口的进程
lsof -p 1234                  # 查看指定PID打开的文件

//查看谁正在使用某个文件
`lsof |grep /mnt/net1`

//列出某个程序所打开的文件信息
`lsof -c mysql

`

日志查找

# 显示附近 3 行
grep -C 3 '个项目 projectTableName =' logs/info.log

# 显示附近 30 行
grep -C 30 '项目:2922, 附件同步结束' logs/info.log

压缩归档

Linux tar(英文全拼:tape archive )命令用于备份文件。

tar 是 Linux 和 Unix 系统中用于归档文件和目录的强大命令行工具。 tar 名字来自 “tape archive”(磁带归档),最初用于将文件打包到磁带设备中,但现在广泛用于在文件系统中打包和压缩文件。 tar 通常用于将多个文件和目录打包成一个归档文件,称为 “tarball”(通常带有 .tar 扩展名)。 tar 本身不压缩文件,但可以与压缩工具(如 gzip 或 bzip2)结合使用,创建压缩的归档文件(如 .tar.gz 或 .tar.bz2)。

​格式​​压缩命令​​解压命令​​特点​
.tar.gztar -czvf archive.tar.gz dir/tar -xzvf archive.tar.gz高压缩率,通用
.zipzip -r archive.zip dir/unzip archive.zipWindows兼容
.tartar -cvf archive.tar dir/tar -xvf archive.tar仅归档不压缩
# 解压
tar -xvf jdk-8u131-linux-x64.tar.gz
# 解压 解压到指定目录
tar -xzvf file.tar.gz -C /target/path
# 解压 覆盖到指定目录.
unzip -o  "archiv.zip" "app/WEB-INF/*.jsp" -d /opt/apache-tomcat-7.0.78/webapps/
 
# 查看内容不解压:
tar -tf archive.tar.gz 
 
# 压缩 指定目录
tar -cvf /usr/local/mysql_dep.zip /usr/local/mysql_dep/*
tar -cvf export_mms.zip /home/sdb1/yang/llm-ncws/export/
 
 
# 压缩 排除文件
tar --exclude='*.tmp' -czvf backup.tar.gz /data 

查找大文件

# 查找 >500MB 的文件(排除虚拟文件)
find / -type f -size +500M ! -path "/proc/*" -exec ls -lh {} \;
 
# 按大小排序目录
du -h --max-depth=1 /var | sort -h
 
 
 
# 查找 >800M 的文件
$ sudo find / -type f -size +800M  -print0 | xargs -0 ls -l
 
 
`/proc/kcore` 文件,是其映射的是系统内存大小, 但可能是错误的
r-------- 1 root   root 140737486266368 Aug 17 10:47 /proc/kcore

基于 SSH 同步管理文件

​工具​​命令示例​​特点​
​scp​scp file.txt user@remote:/path/
scp -r dir/ user@remote:/backup/
简单加密传输
​rsync​rsync -avz --delete /local/dir/ user@remote:/backup/增量同步,支持断点续传
​pscp​pscp -P 2222 file.txt user@remote:/path/ (Windows PuTTY)Windows 专用
​lrzsz​rz (接收文件)
sz file.txt (发送文件)
终端内直接传输

scp 命令

从本地复制到远程

scp local_file remote_username@remote_ip:remote_folder 
scp /opt/redis5.0.7.tar.gz jk-nyy@192.168.1.149:/opt/ 

从远程复制到本地

scp 用户名@计算机IP或者计算机名称:文件名本地路径 本地192.168.1.8 客户端取远程服务器12、11上的文件

scp root@192.168.1.12:/usr/local/src/*.log /root/
scp root@192.168.1.11:/usr/local/src/*.log /root/
scp -r jk-nyy@192.168.1.143:/mnt/data/mgdb_dump/mongodb_back.gz /mnt/data/mgdb_dump/mongodb_back.gz
scp root@172.16.21.155:/root/ljm/bge/archive.tgz /home/sny/

rsync 命令

rsync 命令是一个远程数据同步工具,可通过LAN/WAN快速同步多台主机间的文件。

rsync [OPTION]... SRC DEST
rsync [OPTION]... SRC [USER@]host:DEST
rsync [OPTION]... [USER@]HOST:SRC DEST
rsync [OPTION]... [USER@]HOST::SRC DEST
rsync [OPTION]... SRC [USER@]HOST::DEST
rsync [OPTION]... rsync://[USER@]HOST[:PORT]/SRC [DEST]

对应于以上六种命令格式,rsync有六种不同的工作模式:

拷贝本地文件。当SRC和DES路径信息都不包含有单个冒号”:“分隔符时就启动这种工作模式。如:rsync -a /data /backup 使用一个远程shell程序(如rsh、ssh)来实现将本地机器的内容拷贝到远程机器。当DST路径地址包含单个冒号”:“分隔符时启动该模式。如:rsync -avz *.c foo:src 使用一个远程shell程序(如rsh、ssh)来实现将远程机器的内容拷贝到本地机器。当SRC地址路径包含单个冒号”:“分隔符时启动该模式。如:rsync -avz foo:src/bar /data 从远程rsync服务器中拷贝文件到本地机。当SRC路径信息包含”::“分隔符时启动该模式。如:rsync -av root@192.168.78.192::www /databack 从本地机器拷贝文件到远程rsync服务器中。当DST路径信息包含”::“分隔符时启动该模式。如:rsync -av /databack root@192.168.78.192::www 列远程机的文件列表。这类似于rsync传输,不过只要在命令中省略掉本地机信息即可。如:rsync -v rsync://192.168.78.192/www

rsync —exclude=.svn config/ temp/ -rv

--exclude=PATTERN 指定排除不需要传输的文件模式。 -v, —verbose 详细模式输出。 -r, —recursive 对子目录以递归模式处理。

-u, —update 仅仅进行更新,也就是跳过所有已经存在于DST,并且文件时间晚于要备份的文件,不覆盖更新的文件。 -a 包含文件夹,权限等文件时必须加a选项 —delete 目标目录有文件 就删除目标目录的文件默认不删除。

tomcatRoot='/opt/apache-tomcat-8.5.50/'
projectRoot='/opt/apache-tomcat-8.5.50/webapps/dataV/'
workRoot='/var/lib/jenkins/workspace/dataView_nyy/'
rsync --exclude=.svn ${workRoot} ${projectRoot} -rv

PUTTY pscp 同步

使用 PUTTY 的 pscp.exe 工具 从本地复制到远程

pscp D:/apache-tomcat-8.5.63/webapps/geoserver/data/data/sz_ss/zcgy_1_ex.tif sny@192.168.40.112:/home/sny/

pscp d:/addView.js root@122.112.213.187:/home/
pscp d:/agentx-2.5.0-server.jar root@43.153.173.159:/opt/

从远程复制到本地

pscp jk@192.168.30.136:/home/jk/opendrone/work/zcgy1.tif D:/zcgy1.tif
pscp jk@192.168.30.136:/home/jk/opendrone/work/zcgy.tif D:/zcgy.tif

lrzsz 同步

sudo apt install lrzsz