Linux基础命令-文件管理

目录结构

1.存放命令相关的目录
/bin  #普通用户使用的命令 /bin/ls, /bin/date
/sbin #管理员使用的命令 /sbin/service

2.存放用户相关数据的家目录
/home #普通用户的家目录, 默认为/home/username
/root #超级管理员root的家目录, 普通用户无权操作

3.系统文件目录
/usr #相当于C:\Windows
/usr/local #软件安装的目录,相当于C:\Program files
/usr/bin/ #普通用户使用的应用程序(重要)
/usr/sbin #管理员使用的应用程序(重要)
/usr/lib #库文件Glibc 32bit
/usr/lib64 #库文件Glibc 64bit

4.系统文件目录
/boot #存放的系统启动相关的文件,例如:kernel,grub(引导装载程序)

5.配置文件目录
/etc #极其重要,后续所有服务的配置都在这个目录中
/etc/sysconfig/network-script/ifcfg-* #网络配置文件
/etc/hostname #系统主机名配置文件
/etc/resolv.conf #dns客户端配置文件
/etc/hosts #本地域名解析配置文件

6.可变的目录与临时目录
/var #存放一些变化文件,比如/var/log/下的日志文件
/var/tmp #进程产生的临时文件
/tmp #系统临时目录(类似于公共厕所)

7.设备目录文件
/dev #存放设备文件,比如硬盘,硬盘分区,光驱,等等
/dev/null #黑洞设备,只进不出。类似于垃圾回收站
/dev/random #生成随机数的设备
/dev/zero #能源源不断的产生数据,类似于取款机,随时随地取钱

8.虚拟的文件系统(如对应的进程停止则/proc下对应目录则会被删除)
/proc #反映系统当前进程的实时状态

PS: 在Linux7系统中, /bin, /sbin, /lib, /lib64都以软链接的形式链接到/usr/目录下

文件路径

#绝对路径
[root@server /]# useradd alice
[root@server /]# touch /home/alice/file1
[root@server /]# touch ./file2
[root@server /]# touch ~/file3
[root@server /]# touch ~alice/file4

#相对路径
[root@server /]# mkdir abc
[root@server /]# touch ../file5
[root@server /]# touch file6
[root@server /]# touch abc/file7

# cd #切换到家目录,例: cd /etc
# cd - #切换回上一次所在的目录
# cd ~ #切换回当前用户的家目录,注意:root和普通用户是否有所不同吗?
# cd . #代表当前目录,一般在拷贝、移动等情况下使用 cp /etc/hostname ./
# cd .. #切换回当前目录的上级目录

文件管理

创建

创建文件(touch)
touch [要创建的文件名]
touch +文件名 #在当前目录下创建文件
# touch test.txt
# touch test.txt aaa.txt
touch +/路径/文件名 #在指定目录下创建文件
# touch /tmp/test.txt
touch +文件名公共部分{独特部分,独特部分} #创建多个文件
# touch file{a,1}
touch +文件名{连续字符1..连续字符2} #创建多个文件
# touch file{10..20}
touch +$(date +%F) #创建带时间的文件
# touch $(date +%F).txt

创建目录(mkdir)
mkdir [选项] [要创建的目录名]
选项:
 -p #递归创建目录
 # mkdir -p a/b 创建a目录的同时在a目录下创建b目录
 -v #显示详细信息
 # mkdir -v a 显示创建a目录的详细流程

mkdir +目录名 #在当前目录下创建新的目录
# mkdir a
# mkdir dir1 dir2

mkdir +目录名公共部分{特殊部分1,特殊部分2} #在当前目录下同时创建多个目录
# mkdir dir{1,2}

mkdir +目录名{连续字符1..连续字符2} #在当前目录下同时创建连续字符1到连续字符2的目录
# mkdir dir{10..20}

复制

cp [选项] [要复制的目录或文件] [目标路径]
选项:
 -v #详细显示命令执行的操作
 # cp -v /abc /tmp 复制abc目录到tmp目录下并显示详细过程
 -r #递归处理目录与子目录
 # cp -r /abc /tmp 复制abc目录到tmp目录下
 -p #保留源文件或目录的属性
 # cp -p file /tmp 复制file文件到tmp目录下并保留原文件的属性,目录同理

cp -r +目录名 +目标路径 #递归复制整个目录到目标路径
# cp -r /abc /tmp

cp -r +目录名 +目标路径/新目录名 #递归复制整个目录到目标路径并改名
# cp -r /abc /tmp/efg
# cp -r /etc/hosts /etc/hostname /tmp

cp +文件名 +目标路径 #复制文件到目标路径下
# cp 1.txt  /tmp 复制1.txt到tmp路径下

# 花括号巧用
# cp {1..5}.txt /tmp 复制1.txt~5.txt到tmp目录下
# cp /etc/ifcfg-en33{,.bak} 复制文件到目标路径下再改名(企业备份网卡简易方法)

# 通配符巧用
# cp *.txt  /tmp 复制以.txt结尾的文件到tmp目录下
# cp 1*  /tmp 复制以1开头的文件到tmp目录下
# cp *txt*  /tmp 复制带有txt的文件到tmp目录下
# cp 1*.txt  /tmp 复制以1开头.txt结尾的文件到tmp目录下

移动

mv [选项] [要移动的目录或文件] [目标路径]
选项:
 -v #详细显示命令执行的操作
 # mv -v /abc /tmp 移动abc目录到tmp目录下并显示详细过程

mv +目录名(文件名) +目标路径 #移动整个目录到目标路径
# mv /abc /tmp

mv  +目录名(文件名) +目标路径/新目录名(新文件名) #移动整个目录(文件)到目标路径并改名
# mv /abc /tmp/efg
# mv /etc/hosts /etc/hostname /tmp

# 花括号巧用
# mv {1..5}.txt /tmp 移动1.txt~5.txt到tmp目录下

# 通配符巧用
# mv *.txt  /tmp 移动以.txt结尾的文件到tmp目录下
# mv 1*  /tmp 移动以1开头的文件到tmp目录下
# mv *txt*  /tmp 移动带有txt的文件到tmp目录下
# mv 1*.txt  /tmp 移动以1开头.txt结尾的文件到tmp目录下

删除

rm [选项] [目录或文件]
选项:
 -r #递归
 -f #强制删除
 -v #详细过程
# rm file.txt #删除文件, 默认rm存在alias别名,rm -i所以会提醒是否删除文件
# rm -f file.txt #删除文件, 不提醒
# rm -r dir/ #递归删除目录,会提示
# rm -rf dir/ #强制删除目录,不提醒(慎用)

查看

从尾查看
tail [选项] [目标文件]
选项:
 -n #行数
 # tail -n 30 /var/log/message 
 # tail -30 /var/log/message
 -f #跟踪
 # tail -f /var/log/message

查看全部
cat [选项] [目标文件]
选项:
 -n #标号
 # cat -n /etc/passwd
 
从头查看
head [选项] [目标文件]
选项:
 -n #标号
 # head -n 30 /var/log/message 
 # head -30 /var/log/message

下载

联网下载
wget
选项: 
 -O #指定下载地址
 # wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo

curl
选项: 
 -o #指定下载地址
 # curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo

文件上传与下载
# yum install lrzsz -y 不安装软件则无法执行该命令
# rz 只能上传文件(win -> linux)
# sz /path/file 只能下载文件 (linux -> win)

查询

文件查找
模糊查询(locate)
yum install -y mlocate
创建文件路径数据库
updatedb
locate 搜索的名称
准确查找(find)
find [目录] [选项] [动作]
选项:
 -a #与(默认)
 -o #或
 -not! #非

1.基本文件名称的查找
 -name  
  a* 以a开头的文件
  *a 以a结尾的文件
  *a* 包含字母a的文件
 -iname 忽略大小写
例1:查找出/etc目录下所有以ifcfg开头的网卡配置文件
# find /etc -name "ifcfg*" -type f
例2:查找出/etc目录下所有以ens33结尾的网卡配置文件
# find /etc -name "*ens33" -type f
例3:查找出/etc目录下包含cfg的配置文件
# find /etc -name "*cfg*" -type f

2.基于文件大小的查找
 -size 
  +7 单位kMG 默认k
   7  
  -7
环境准备
# for i in {1..10};do dd if=/dev/zero of=${i}M.txt bs=${i}M count=1 &>/dev/null;done
例1:查找出大于5M的文件
# find -size +5M
例2:查找出以.txt结尾并且小于5M的文件
# find -size -5M -name "*.txt"
例3:查找出.txt结尾并且小于等于5M的文件
# find -size -6M -name "*.txt"
# find -name "*.txt" \( -size -5M -o -size 5M \) 
# find -name "*.txt" ! -size +5M
例4:查找出以.txt结尾的文件并且大于等于7M
# find -name "*.txt" \( -size +7M -o -size 7M \)

3.基于时间的查找
 -atime 文件访问时间
 -mtime 文件修改时间(文件内容以及权限修改时间)
 -ctime 文件修改时间(文件权限修改时间)
 +7 7天以前
  7  刚好第7天前
 -7 7天以内
准备基础环境
# for i in {01..31};do date -s  "202401$i" && touch file-$i;done
例1:查找出当前目录下前7天以file开头的文件
# find -name "file*" -mtime +7
例2:查找出当前目录第7天的以file开头的文件
# find -name "file*" -mtime 7
例3:查找出当前目录7天以内的以file开头的文件
# find -name "file*" -mtime -7
例4:超找出七天以前创建的文件或者文件大小大于5M的文件
# find -mtime +7 -o -size +5M
例子5:查找出不是前七天创建的文件
# find ! -mtime +7

4.基于文件权限的查找
 -perm 
  nnnn 精准匹配 
  -nnnn 模糊匹配 每一类用户(ugo)的权限中的每一位rwx同时满足则匹配    0 与
  /nnnn 模糊匹配 任何一类用户(ugo)权限中的任何一位(rwx)匹配则满足条件 0 或 
基本环境准备
基本环境的准备
touch 4755 2755 1777 6755 5755 3755 7777 0777 0775 0770 0666 0644 0660 0600 0700 0000 0111 0444 0222 0002 0020 0200
chmod 0777 0777
chmod 0775 0775
chmod 0770 0770
chmod 0666 0666
chmod 0000 0000
chmod 0111 0111
chmod 0444 0444
chmod 0222 0222
chmod 0002 0002
chmod 0020 0020
chmod 0200 0200
chmod 0644 0644
chmod 0660 0660
chmod 0600 0600
chmod 0700 0700
chmod 4755 4755 
chmod 2755 2755
chmod 1777 1777
chmod 6755 6755
chmod 5755 5755
chmod 3755 3755
chmod 7777 7777
例1:查找出所有权限位上拥有执行权限的文件
# find -perm -0111
例2:查找出所有权限中拥有执行权限和读权限的文件
# find -perm -0555
例3:查找出拥有特殊权限的文件
# find -perm /7000
例4:查找出属主拥有读权限和属组拥有读权限的文件
# find -perm -0440
例5:查找出拥有所有权限的文件
# find -perm 0777
例6:查找出没有执行权限的文件
# find ! -perm /0111

5.基于用户查找
 -user 属主
 -group  属组
 -uid  用户id
 -gid  组id
 -nouser  没有属主
 -nogroup 没有属组
创建test1-3
基本环境的准备
# touch test{1..3}.txt
创建三个用户
# for i in {1..3}; do useradd test$i ;done
创建三个测试文件并且相应授权
# for i in {1..3};do chown test$i.test$i test$i.txt ;done
例1:查找出所有以.txt结尾并且属于test1用户的文件
# find -name "*.txt" -user test1 -type f
例2:查找出所有以test开头的文件并且属于test2组的文件
# find -name "test*" -group test2 -type f
例3:查找出所有以.txt结尾并且UID为1000用户的文件
# find -name "*.txt" -uid 1000 -type f
例4:查找出所有以test开头的文件GID为1001组的文件
# find -name "test*" -gid 1001 -type f
例5:查找出所有没有属组或者属主的文件
# chown .test2 test1.txt
# chown .test3 test2.txt 
# chown .test1 test2.txt 
# userdel test1
# find -nouser -o -nogroup -type f
例6:查找出没有属组和没有属组的文件
# find -nouser -nogroup -type f

6.基于文件类型查找
 -type 
  f 文件
  d 目录
  b 块设备
  c 设备
  l 链接文件
  s 套接字文件
例1:查找出/usr/bin目录下的链接文件
# find /usr/sbin/ -type l
扩展将所有的文件名取出并且以文件列表的形式写入至test.txt文件中
# find /usr/sbin/ -type l | awk -F '/' '{print $NF}' > test.txt

动作:
 -print 打印文件路径(默认)
 -ls    查看详细信息
 -delete 删除文件
 -exec COMMAND {}\; 对查找出来的文件执行命令
 -fls /PATH/TO/SOMEFILE:把查找到的所有文件的长格式信息保存至指定文件中;
 -ok COMMAND {} \;:对查找的每个文件执行由COMMAND表示的命令,每次操作都由用户进行确认;
例1:查找出所有以test开头的文件并且查看文件的详细信息
# find -name "test*" -ls
例2:删除以*.txt结尾的文件
方法一: delete
# find -name "*.txt" -type f -delete
方法二: -exec 
# find -name "*.txt" -type f -exec rm -rf {}\;
方法三: |xargs
# find -name "*.txt" -type f |xargs rm -rf 

|xargs
例3:将所有以*.txt结尾的文件打包压缩包名称为/tmp/txt.tar.gz
# find -name "*.txt" -type f |xargs tar czf /tmp/txt.tar.gz 
xargs 与 exec 效率上的对比
# touch {1..10000000}.txt
# find -name "*.txt" -type f -exec rm -rf {}\; 
# find -name "*.txt" -type f |xargs rm -rf 
exec 是逐个删除
xargs 大块大块删除
|xargs -i cp {} 转化为exec格式

文件属性

# ls -l ks.cfg
-rw-------. 1 root root 4434 May 30 13:58 ks.cfg
#
-rw-------.:第一个字符是文件类型,其他则是权限
1:硬链接次数
root:文件属于哪个用户
root:文件属于哪个组
4434:文件大小
May30 13:58:最新修改的时间与日期
ks.cfg:文件或目录名称

文件类型

查看属性
# ll -d /etc/hosts /tmp /bin/ls /dev/sda /dev/tty1 /etc/grub2.cfg /dev/log /run/dmeventd-client
-rwxr-xr-x. 1 root root 117656 Jun 30 2016 /bin/ls
srw-rw-rw-. 1 root root 0 Jan 20 10:35 /dev/log
brw-rw----. 1 root disk 8, 0 Jan 20 10:36 /dev/sda
crw--w----. 1 root tty 4, 1 Jan 20 10:36 /dev/tty1
lrwxrwxrwx. 1 root root 22 Jan 13 11:31 /etc/grub2.cfg -> 
../boot/grub2/grub.cfg
-rw-r--r--. 1 root root 199 Jan 20 11:03 /etc/hosts
prw-------. 1 root root 0 Jan 20 10:36 /run/dmeventd-client
drwxrwxrwt. 61 root root 8192 Jan 21 13:01 /tmp
#说明
- #普通文件(文本, 二进制, 压缩, 图片, 日志等) 
d #目录文件
b #设备文件(块设备)存储设备硬盘 /dev/sda1, /dev/sda2
c #设备文件(字符设备),终端 /dev/tty1, /dev/zero
s #套接字文件, 进程间通信(socket)
p #管道文件
l #链接文件

准确查看
# file /etc/hosts
/etc/hosts: ASCII text
# file /bin/ls
/bin/ls: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked 
(uses shared libs), for GNU/Linux 2.6.32, 
BuildID[sha1]=aa7ff68f13de25936a098016243ce57c3c982e06, stripped
# file /dev/sda
/dev/sda: block special
# file /dev/tty1
/dev/tty1: character special
# file /etc/grub2.cfg
/etc/grub2.cfg: broken symbolic link to `../boot/grub2/grub.cfg'
# file /home
/home: directory
# file /run/dmeventd-client
/run/dmeventd-client: fifo (named pipe)
# ll but
-rw-r--r-- 1 root root 42125 Apr 1 12:26 but
# file but
but: Zip archive data, at least v1.0 to extract

链接文件

文件有文件名与数据,在Linux上被分成两个部分:用户数据 (user data) 与元数据 (metadata)

软链接
类似于windows的快捷方式,实际上只是创建出了一个新的inode节点索引号出来

硬链接
一个文件的另一个名称 inode号相同

硬链接与软链接区别
1. ln命令创建硬链接,ln -s命令创建软链接。
2. 目录不能创建硬链接,并且硬链接不可以跨越分区系统。
3. 目录软链接特别常用,并且软链接支持跨越分区系统。
4. 硬链接文件与源文件的inode相同,软链接文件与源文件inode不同。
5. 删除软链接文件,对源文件及硬链接文件无任何影响。
6. 删除文件的硬链接文件,对源文件及软链接文件无任何影响。
7. 删除链接文件的源文件,对硬链接无影响,会导致软链接失效。
8. 删除源文件及其硬链接文件,整个文件会被真正的删除。

创建软(硬)链接
ln [选项] [源文件] [链接文件]
选项
 -s #创建软链接
 -n #重新生成inode号
 -f #覆盖
 # ln -snf /app/mysql8.0 /app/mysql

stat [文件名称]
# 查看元数据

  • 11
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值