Linux基础入门 --4 DAY

文件管理

Linux根目录下的文件及其意义

在Linux系统中,每个目录(文件夹)都有其特定的用途和存放的文件类型。以下是您列出的各个目录的简要说明:

bin - Binary(二进制)的缩写,存放用户可执行的二进制文件,通常是系统命令的集合,如ls, cp, mv等。这些命令对所有用户都可用。

boot - 包含Linux内核和启动加载器(如GRUB)的配置文件,这些文件在系统启动时由BIOS读取。

dev - Device(设备)的缩写,包含设备文件,这些文件代表连接到系统的物理设备,如硬盘(sda)、终端(tty)等。这些文件允许用户和设备进行交互。

etc - Editable Text Configuration(可编辑的文本配置文件)的缩写,存放系统配置文件,这些文件用于控制系统的各个方面,如网络配置、系统服务、用户信息等。

home - 用户的主目录,每个用户都有一个以其用户名命名的目录(如/home/username),用于存放用户的个人文件、文档和设置。

lib - Library(库)的缩写,存放系统程序运行所需的共享库文件。这些库文件包含函数和代码,可以被多个程序共享。

lib64 - 类似于lib目录,但用于存放64位架构的共享库文件。这主要是为了解决32位和64位系统兼容性问题。

media - 用于挂载可移动媒体设备(如USB驱动器、CD-ROM等)的目录。这些设备在挂载后,其内容会出现在这个目录下的相应子目录中。

mnt - Mount(挂载)的缩写,一个临时的挂载点,用于挂载文件系统。虽然media和mnt都可以用于挂载设备,但media通常用于自动识别的设备,而mnt则用于手动挂载。

opt - Optional(可选)的缩写,用于存放第三方软件或可选软件包。这些软件包不是系统核心的一部分,但用户可能需要它们。

proc - Process(进程)的缩写,一个虚拟的文件系统,包含系统进程的实时信息。它不是存储在硬盘上的,而是由内核动态生成的。

root - 系统管理员(root用户)的主目录。root用户拥有对系统的完全访问权限。

run - 用于存放系统自上次启动以来的信息,如进程ID(PID)文件。这是一个较新的目录,用于替代一些旧的目录(如/var/run),以提高系统的清晰度和可管理性。

sbin - System Binaries(系统二进制文件)的缩写,存放系统管理员使用的二进制文件,这些文件通常比bin目录下的文件更专业、更强大。

srv - Service(服务)的缩写,用于存放服务数据。尽管这个目录在标准的文件系统层次结构中不是必需的,但它为服务数据提供了一个逻辑上的集中位置。

sys - System(系统)的缩写,一个虚拟的文件系统,提供了对内核对象(如进程和硬件设备)的访问接口。

tmp - Temporary(临时)的缩写,用于存放临时文件。系统重启后,这些文件通常会被删除。

usr - Unix System Resources(Unix系统资源)的缩写,包含用户级程序和文档。这个目录是系统中最大的一个,包含了除核心系统程序外的几乎所有东西。

var - Variable(可变)的缩写,用于存放经常变化的文件,如日志文件、邮件队列、数据库等。这些文件的内容经常会被修改,因此放在单独的目录下便于管理。

        示例:  

[root@localhost ~]# ls /
bin  boot  data  dev  etc  home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var

linux下的文件类型

        1. - 普通文件

        2. d 目录文件directory

        3. b 块设备block

        4. c 字符设备character

        5.  l 符号链接文件link

        6. p 管道文件pipe

        7. s 套接字文件socket

- 普通文件(Regular File):这是最常见的文件类型,包含用户数据,如文本文件、源代码文件、可执行文件等。它们不包含关于其他文件的信息或数据结构的链接。

d 目录文件(Directory):表示一个目录,目录是文件系统的组织结构单元,可以包含其他文件和目录。

b 块设备(Block Device):这种文件类型表示块设备,如硬盘分区、软盘驱动器或CD-ROM。块设备以块(通常是512字节或更大的数据块)为单位读写数据。

c 字符设备(Character Device):与块设备不同,字符设备(如终端、键盘、鼠标或串行端口)以字符为单位进行数据的输入输出操作。它们不支持随机访问,通常用于处理流数据。

l 符号链接文件(Symbolic Link):也称为软链接,是一个指向另一个文件的特殊文件。当你访问一个符号链接时,你实际上是在访问它所指向的文件。符号链接可以跨文件系统工作,并且可以链接到目录。

p 管道文件(Pipe):管道是一种用于进程间通信的机制,它允许一个进程的输出直接作为另一个进程的输入。在文件系统中,管道以文件的形式存在,但它们不是普通文件。

s 套接字文件(Socket):套接字文件用于进程间的网络通信。在Linux和Unix系统中,套接字也被视为一种特殊的文件类型,用于表示两个网络节点之间的端点。套接字文件允许网络应用程序通过网络发送和接收数据。

操作文件命令 

        ls命令

ls命令是Linux和Unix系统中用于列出文件和目录内容的常用命令,它是英文list的缩写。以下是对ls命令的详细解析:

基本用法

在命令行中输入ls(无参数)时,它会列出当前目录下的文件和目录。

如果要列出特定目录的内容,可以在ls命令后加上目录的路径,如ls /etc。

常用选项

-ld: 显示文件夹自身属性,而不显示文件夹的内容.

-a:显示所有文件和目录,包括以.开头的隐藏文件和目录。

-l:以长格式列出信息,包括文件的权限、所有者、大小、最后修改时间等。

-h:与-l一起使用时,以人类可读的格式(如KB、MB)显示文件大小。

-t:按照文件修改时间排序,默认是降序排列。

-r:将排序结果反转,即逆序排列。

-R:递归列出所有子目录的内容。

-i:显示文件的inode号,inode是Linux文件系统中每个文件或目录的唯一标识符。

-F:在每个输出项后追加文件的类型标识符,如*表示可执行文件,/表示目录等。

-m:用逗号分隔每个文件和目录的名称。

--color:以彩色方式显示输出,便于区分不同类型的文件。

        示例: 

 [root@localhost ~]# ll --time=atime f1.txt   //文件读取时间
-rw-r--r--. 1 root root 1 Sep  2 06:35 f1.txt
[root@localhost ~]# ll --time=ctime f1.txt    //文件属性修改时间
-rw-r--r--. 1 root root 1 Sep  2 06:35 f1.txt

[root@localhost ~]# ll f1.txt                          //文件内容修改时间
-rw-r--r--. 1 root root 1 Sep  2 06:35 f1.txt

[root@localhost ~]# stat f1.txt               //查看所有类型时间
  File: ‘f1.txt’
  Size: 1             Blocks: 8          IO Block: 4096   regular file
Device: 803h/2051d    Inode: 34327021    Links: 1
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Context: unconfined_u:object_r:admin_home_t:s0
Access: 2024-09-02 06:35:59.896424586 -0700
Modify: 2024-09-02 06:35:44.821617442 -0700
Change: 2024-09-02 06:35:44.821617442 -0700
 Birth: -

[root@localhost systemd]# dirname /etc/sysconfig/network
/etc/sysconfig
[root@localhost systemd]# basename /etc/sysconfig/network
network

[root@localhost ~]# ls
2024-08-31.log  anaconda-ks.cfg  f1.txt  F.log  love.s  love.s,bak  mysql80-community-release-el7.rpm  nano.save  nano.save.1  original-ks.cfg  passwd.sh  wtj.jpg
[root@localhost ~]# ls .  // . 代表本目录
2024-08-31.log  anaconda-ks.cfg  f1.txt  F.log  love.s  love.s,bak  mysql80-community-release-el7.rpm  nano.save  nano.save.1  original-ks.cfg  passwd.sh  wtj.jpg
[root@localhost ~]# ls ..  // .. 代表上一级目录
bin  boot  data  dev  etc  home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var
[root@localhost ~]# pwd
/root

[root@localhost /]# cd ~wtj    // cd 到wtj的家目录
[root@localhost wtj]# pwd
/home/wtj

[root@localhost /]# cd ~wtj
[root@localhost wtj]# pwd
/home/wtj
[root@localhost wtj]# cd
[root@localhost ~]# cd -
/home/wtj
[root@localhost wtj]# cd
[root@localhost ~]# cd -   // - 的内容为$OLDPWD
/home/wtj
[root@localhost wtj]# echo $OLDPWD
/root
[root@localhost wtj]# 

        file命令

        file 命令用来查看文件的类型

        file -f 进行批量判断

[root@localhost ~]# 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,   //2进制文件 BuildID[sha1]=aaf05615b6c91d3cbb076af81aeff531c5d7dfd9, stripped
[root@localhost ~]# file love.s
love.s: ASCII text  //文本文件

[root@localhost ~]# vim test.txt 
[root@localhost ~]# cat test.txt 
/dev/zero
/etc/ppp
[root@localhost ~]# file -f test.txt 
/dev/zero: character special
/etc/ppp:  directory

        dos2unix 和 unix2dos 命令 

        dos2unix 将windows文件转换为Linux格式

        unix2dos 将Linux文件格式转换为windows格  

[root@localhost ~]# yum -y install dos2unix   //下载dos2unix工具
Loaded plugins: fastestmirror, langpacks
Loading mirror speeds from cached hostfile
 * base: mirrors.bupt.edu.cn
 * extras: mirrors.bupt.edu.cn
 * updates: mirrors.tuna.tsinghua.edu.cn
Resolving Dependencies
--> Running transaction check
---> Package dos2unix.x86_64 0:6.0.3-7.el7 will be installed
--> Finished Dependency Resolution

Dependencies Resolved

        iconv命令 

        iconv命令可以转换对象的编码机制

iconv [选项] [-f 编码] [-t 编码] [输入文件] [-o 输出文件]

  • -f 编码:指定输入文件的编码。
  • -t 编码:指定输出文件的编码。
  • 输入文件:要转换的源文件。如果未指定,iconv 会从标准输入读取数据。
  • -o 输出文件:指定输出文件的名称。如果未指定,iconv 会将转换后的数据写入标准输出。

        示例:

将文件从 UTF-8 转换为 ISO-8859-1

假设你有一个名为 example.txt 的文件,该文件使用 UTF-8 编码,你想将其转换为 ISO-8859-1 编码,并保存为 example_iso.txt

iconv -f UTF-8 -t ISO-8859-1 example.txt -o example_iso.txt

        文件通配符模式wildcard pattern 

*        匹配 0 个或多个字符   //无法匹配 . 开头的文件(隐藏文件)

?      匹配任何单个字符

~        当前用户家目录

~wtj    wtj的家目录

~+ 或者 . 当前工作目录

~-        前一个工作目录

[0-9]    匹配数字范围

[a-z]    字母

[A-Z]   字母

[wtj]     匹配表中任意一个字符

[^wtj]    匹配表中所有字符外的字符  

[:digit:]  任意数字,相当于0-9

[:lower:] 任意小写字母,相当于a-z

[:upper:] 任意大写字母

[:alnum:] 任意数字或字母

[:blank:] 水平空白字符

[:space:] 水平或垂直空白字符

[:punct:] 标点符号

[:print:] 可打印字符

[:cntrl:] 控制(非打印)字符

[:graph:] 图形字符

[:xdigit:] 十六进制字符

        范例:

[root@localhost love]# ls
a.txt  b.txt  c.txt  d.txt  e.txt  f.txt  g.txt  h.txt  i.txt  j.txt  k.txt  l.txt  m.txt  n.txt  o.txt  p.txt  q.txt  r.txt  s.txt  t.txt  u.txt  v.txt  w.txt  x.txt  y.txt  z.txt
A.txt  B.txt  C.txt  D.txt  E.txt  F.txt  G.txt  H.txt  I.txt  J.txt  K.txt  L.txt  M.txt  N.txt  O.txt  P.txt  Q.txt  R.txt  S.txt  T.txt  U.txt  V.txt  W.txt  X.txt  Y.txt  Z.txt
[root@localhost love]# ls [a-c].txt
a.txt  A.txt  b.txt  B.txt  c.txt

[root@localhost love]# ls [wtj].txt
j.txt  t.txt  w.txt
[root@localhost love]# ls [^wtj].txt
a.txt  b.txt  c.txt  d.txt  e.txt  f.txt  g.txt  h.txt  i.txt  J.txt  K.txt  L.txt  M.txt  N.txt  O.txt  P.txt  Q.txt  R.txt  S.txt  u.txt  v.txt  W.txt  X.txt  Y.txt  Z.txt
A.txt  B.txt  C.txt  D.txt  E.txt  F.txt  G.txt  H.txt  I.txt  k.txt  l.txt  m.txt  n.txt  o.txt  p.txt  q.txt  r.txt  s.txt  T.txt  U.txt  V.txt  x.txt  y.txt  z.txt

[root@localhost love]# ls [:lower:].txt
e.txt  l.txt  o.txt  r.txt  w.txt
[root@localhost love]# ls [[:lower:]].txt  //需要双中括号
a.txt  b.txt  c.txt  d.txt  e.txt  f.txt  g.txt  h.txt  i.txt  j.txt  k.txt  l.txt  m.txt  n.txt  o.txt  p.txt  q.txt  r.txt  s.txt  t.txt  u.txt  v.txt  w.txt  x.txt  y.txt  z.txt

[root@localhost ~]# ls -a
.   2024-08-31.log   .bash_history  .bash_profile  .cache   .cshrc  F.log     love    love.s,bak                         .mysql_history  nano.save.1      passwd.sh  test.txt  wtj.jpg
..  anaconda-ks.cfg  .bash_logout   .bashrc        .config  f1.txt  .lesshst  love.s  mysql80-community-release-el7.rpm  nano.save       original-ks.cfg  .tcshrc    .viminfo  .Xauthority
[root@localhost ~]# rm -rf *
[root@localhost ~]# ls -a
.  ..  .bash_history  .bash_logout  .bash_profile  .bashrc  .cache  .config  .cshrc  .lesshst  .mysql_history  .tcshrc  .viminfo  .Xauthority
 [root@localhost ~]# ls -d .*
.  ..  .bash_history  .bash_logout  .bash_profile  .bashrc  .cache  .config  .cshrc  .lesshst  .mysql_history  .tcshrc  .viminfo  .Xauthority

[root@localhost ~]# ls -A
.bash_history  .bash_logout  .bash_profile  .bashrc  .cache  .config  .cshrc  .lesshst  .mysql_history  .tcshrc  .viminfo  .Xauthority

[root@localhost ~]# alias l.
alias l.='ls -d .* --color=auto'
[root@localhost ~]# l.
.  ..  .bash_history  .bash_logout  .bash_profile  .bashrc  .cache  .config  .cshrc  .lesshst  .mysql_history  .tcshrc  .viminfo  .Xauthority

[root@localhost ~]# ls -d /etc/*/           //只显示目录
/etc/abrt/               /etc/cron.weekly/    /etc/gconf/        /etc/jvm/             /etc/ndctl/           /etc/pulse/          /etc/sane.d/             /etc/target/
/etc/alsa/               /etc/cups/           /etc/gcrypt/       /etc/jvm-commmon/     /etc/NetworkManager/  /etc/purple/         /etc/sasl2/              /etc/terminfo/
/etc/alternatives/       /etc/cupshelpers/    /etc/gdbinit.d/    /etc/kernel/          /etc/ntp/             /etc/python/         /etc/scl/                /etc/tmpfiles.d/
/etc/audisp/             /etc/dbus-1/         /etc/gdm/          /etc/krb5.conf.d/     /etc/oddjob/          /etc/qemu-ga/        /etc/security/           /etc/tuned/
/etc/audit/              /etc/dconf/          /etc/geoclue/      /etc/ld.so.conf.d/    /etc/oddjobd.conf.d/  /etc/qemu-kvm/       /etc/selinux/            /etc/udev/
/etc/auto.master.d/      /etc/default/        /etc/ghostscript/  /etc/libblockdev/     /etc/openldap/        /etc/rc0.d/          /etc/setroubleshoot/     /etc/udisks2/
/etc/avahi/              /etc/depmod.d/       /etc/glvnd/        /etc/libibverbs.d/    /etc/opt/             /etc/rc1.d/          /etc/setuptool.d/        /etc/unbound/

        创建空文件和刷新时间 

touch

格式: touch [OPTION]... FILE...

 选项说明:

        -a   仅改变atime和ctime

        -m  仅改变mtime和ctime

        -t   [CC[YY]]MMDDhhmm.[ss]  指定atime和mtime时间

        -c   如果文件不存在,则不予创建

        范例:

[root@localhost ~]# touch f1.txt
[root@localhost ~]# ll f1.txt
-rw-r--r--. 1 root root 0 Sep  2 19:49 f1.txt
[root@localhost ~]# ll /etc/issue
-rw-r--r--. 1 root root 23 Oct 23  2020 /etc/issue
[root@localhost ~]# touch /etc/issue
[root@localhost ~]# ll /etc/issue
-rw-r--r--. 1 root root 23 Sep  2 19:50 /etc/issue
[root@localhost ~]# stat /etc/issue
  File: ‘/etc/issue’
  Size: 23            Blocks: 8          IO Block: 4096   regular file
Device: 803h/2051d    Inode: 16778340    Links: 1
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Context: system_u:object_r:etc_t:s0
Access: 2024-09-02 19:50:01.799805987 -0700
Modify: 2024-09-02 19:50:01.799805987 -0700
Change: 2024-09-02 19:50:01.799805987 -0700

[root@localhost ~]# touch `date +%F_%T`.log
[root@localhost ~]# ls
2024-09-02_19:51:31.log  f1.txt
[root@localhost ~]# touch $(date -d '1 year' +%F_%T.log)
[root@localhost ~]# ll
total 0
-rw-r--r--. 1 root root 0 Sep  2 19:51 2024-09-02_19:51:31.log
-rw-r--r--. 1 root root 0 Sep  2 19:52 2025-09-02_19:52:33.log
-rw-r--r--. 1 root root 0 Sep  2 19:49 f1.txt

        复制文件和目录 

cp [选项] 源文件/目录 目标文件/目录

常用选项

-b: 先做~的备份在覆盖

-i:交互模式,在覆盖已存在的文件前提示用户确认。

-r 或 -R:递归复制目录及其包含的所有子目录和文件。

-p:保留原文件的属性(权限、修改时间等)。

-v:显示详细的复制进度信息。

-u:仅当源文件比目标文件新时才进行复制。

-f 或 --force:强制复制,即使目标文件已存在也不提示,直接覆盖。但请注意,在执行可能覆盖重要文件的操作时,请谨慎使用此选项,并在必要时备份数据以防意外丢失。

-a 或 --archive:归档模式,相当于 -dpR 选项的集合,用于递归复制整个目录并保留文件属性。

-d 或 --no-dereference:当复制符号链接时,把目标文件或目录也建立为符号链接,并指向与源文件或目录连接的原始文件或目录。注意,此选项对硬链接无效。

-l 或 --link:对源文件建立硬连接,而非复制文件。这意味着新文件与原文件共享相同的 inode 号,对任一文件的修改都会影响到另一个。

-s 或 --symbolic-link:对源文件建立符号链接,而非复制文件。符号链接类似于 Windows 中的快捷方式,指向源文件但不占用额外空间。

注意事项

在使用 cp 命令时,特别是涉及重要数据的操作时,请务必谨慎,以避免数据丢失。

如果目标路径已经存在同名目录,直接使用 cp 命令(无 -r 选项)无法实现目录替换,而是会提示错误。若要强制覆盖目标目录,需要先删除目标目录,再进行复制操作。

cp 命令无法用于跨设备(如不同磁盘分区、网络共享)的文件或目录移动。如果需要进行这样的操作,请使用 mv 命令或结合其他工具。

        

  • 8
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值