Linux(红帽) 20220714 作业

目录

一.软链接和硬链接的区别

1.硬链接

2.软链接(符号链接)

二.命令介绍

cp命令:

ln命令:

使用硬链接

使用软链接(符号链接)

三.根目录的解释

 1.  /bin 目录

 2. /dev 目录

 3. /etc 目录

 4. /lib 目录

 5. /mnt 目录

 6. /proc 目录

 7. /usr 目录

 8. /var 目录 

 9. /sbin 目录

 10. /sys 目录

 11. /opt 目录

12. /home 目录

         13. /tmp 目录

         14. /srv 目录

15. /media 目录

16. /lost+found 目录

四.一级目录的解释

五.重定向

重定向命令

六.创建文件,删除文件,创建目录,删除目录

1.文件的创建

2.创建目录

3.删除文件及目录的命令:rm

七.cp命令

1.cp命令简介

2.cp命令的选项

3.cp实例


一.软链接和硬链接的区别

       软链接,和原文件不是一个文件。例如Windows的快捷方式,如果原始文件被删除,所有指向它的符号链接也就都被破坏了。
       硬链接,只能引用同一文件系统中的文件。它引用的是文件在文件系统中的物理索引(也称为
inode)。当移动或者删除原始文件时,硬链接不会被破坏,因为它所引用的是文件的物理数据而不是文件在件结构中的位置。

 

1.硬链接

实质上是一个指针,指向文件索引节点,系统并不为它重新分配inode。使用 ln 来创建

ln hello.c hello 建立hello.c的硬链接hello

特点:

1)不允许给目录创建硬链接

2)只有在同一个文件系统才能创建(不能跨文件系统)

例子: 为file1创建一个硬链接,file1的链接数目就会增加。当删除链接时,链接数减1,当链接数为0时,内核才会把文件内容从磁盘上删除。

2.软链接(符号链接)

使用 ln -s 来创建

ln -s hello.c hello 建立hello.c的软链接hello

特点:

1)类似于windows中的快捷方式

2)允许给目录创建软链接

3)能跨文件系统

当file1创建一个软链接,file1的链接数目不会增加。源文件大小和链接文件大小是不一样的。

二.命令介绍

创建链接文件的方式有两种,一种是cp命令(复制),一种是ln命令(链接),两种都能实现,从cp我们就能知道,链接其实是备份文件的的一种形式(个人观点!)

cp命令:

创建硬链接:cp -l src des

创建软链接:cp -s src des

ln命令:

创建硬链接:ln src des

创建软链接:ln -s src des

这里需要说一下自己学习过程中的一些心路历程:刚开始创建链接的时候搞不清楚src和des,不知道到底是给哪个文件创建一个副本,传参数的时候src和des到底哪个才是创建之后的文件,主要是因为没有系统的看书,

只是从别人的博客中看,所以直到看了书才明白,src和des的意思是,给源文件src创建一个副本des,所以在传这两个参数的时候,如果两个文件不在同一个目录,我们也可以连同文件所在的目录一起传入这个地方

使用硬链接

Linux中的每个文件都以单个硬链接开头,通过创建指向文件的新硬链接,您可以创建另一个指向相同数据的名称。

新的硬链接的行为与原始文件名完全相同,很难说出新的硬链接和文件的原始名称之间的区别,您可以使用ln命令来创建硬链接,另一个指向现有文件的名称:

$ echo "Hello World from Hard Link" >/tmp/hello1.txt

$ ln /tmp/hello1.txt  /tmp/hello2.txt

注:/tmp/hello1.txt是现有文件的路径,/tmp/hello2.txt是您要创建的硬链接。

使用ls -i选项可列出文件的inode编号,如果索引节点号相同,则文件是指向相同数据的硬链接:

$ ls -li /tmp/hello1.txt  /tmp/hello2.txt

2591191 -rw-------. 2 jkmutai jkmutai 27 Feb  5 08:16 /tmp/hello1.txt

2591191 -rw-------. 2 jkmutai jkmutai 27 Feb  5 08:16 /tmp/hello2.txt

--- Let's add third file and recheck ---

$ ln /tmp/hello1.txt  /tmp/hello3.txt

$ ls -li /tmp/hello1.txt  /tmp/hello2.txt /tmp/hello3.txt

2591191 -rw-------. 3 jkmutai jkmutai 27 Feb  5 08:16 /tmp/hello1.txt

2591191 -rw-------. 3 jkmutai jkmutai 27 Feb  5 08:16 /tmp/hello2.txt

2591191 -rw-------. 3 jkmutai jkmutai 27 Feb  5 08:16 /tmp/hello3.txt

引用同一文件的所有硬链接都具有相同的内容:链接数、访问权限、用户和组的所有权、时标、文件内容。

与软链接比较:

$ ls -li /tmp/file1.txt /tmp/file2.txt /tmp/file3.txt

2442008 -rw-------. 1 jkmutai jkmutai 17 Feb  4 22:37 /tmp/file1.txt

2442949 lrwxrwxrwx. 1 jkmutai jkmutai 14 Feb  4 22:38 /tmp/file2.txt -> /tmp/file1.txt

2601927 lrwxrwxrwx. 1 jkmutai jkmutai 14 Feb  5 08:24 /tmp/file3.txt -> /tmp/file1.txt

使用软链接(符号链接)

软链接是一种特殊类型的文件,它指向现有文件或目录,它可用于链接不同文件系统上的两个文件,软链接也可以指向特殊文件。

ln -s命令用于创建软链接,让我们看一个例子。

在以下示例中,ln -s命令用于为现有文件/tmp/file1.txt创建一个新的软链接,该文件将命名为/tmp/file2.txt:

$ echo "Hello from file1" > /tmp/file1.txt

$ ln -s /tmp/file1.txt /tmp/file2.txt

通过列出文件进行确认:

$ ls -l /tmp/file1.txt /tmp/file2.txt

-rw-------. 1 jkmutai jkmutai 17 Feb  4 22:37 /tmp/file1.txt

lrwxrwxrwx. 1 jkmutai jkmutai 14 Feb  4 22:38 /tmp/file2.txt -> /tmp/file1.txt

您可以看到/tmp/file2.txt的长列表的第一个字符是l而不是-,这表明该文件是软链接,而不是常规文件。(A d表示该文件是目录。)

检查符号链接文件的内容:

$ cat /tmp/file2.txt

Hello from file1

对于目录,请使用:

ln -s /dir /dir2

如果删除原始常规文件,则该软链接仍将指向丢失的文件,即“dangling soft link”。

三.根目录的解释

1.  /bin 目录

看到“bin”大家应该能想到 bin 文件, bin 文件就是可执行文件。所以此目录下存放着系统需要的可执行文件,一般都是一些命令,比如 ls、 mv 等命令。此目录下的命令所有的用户都可以使用。

2. /dev 目录

dev 是 device 的缩写,所以此目录下的文件都是和设备有关的,此目录下的文件都是设备文件。

在 Linux 下一切皆文件,即使是硬件设备,也是以文件的形式存在的,比如:

/dev/ttymxc0(I.MX6ULL 根目录会有此文件)就表示 I.MX6ULL 的串口 0,我们要想通过串口 0发送或者接收数据就要操作文件/dev/ttymxc0,通过对文件/dev/ttymxc0 的读写操作来实现串口0 的数据收发

/dev/console 系统控制台,也就是直接和系统连接的监视器。

/dev/fd 软驱设备驱动程序。如: / d e v / f d 0指系统的第一个软盘,也就是通常所说的a:盘,/ d e v / f d 1指第二个软盘,. . . . . .而/ d e v / f d 1 h 1 4 4 0则表示访问驱动器1中的4 . 5高密盘。

/dev/tty 提供虚拟控制台支持。如: / d e v / t t y 1指的是系统的第一个虚拟控制台, / d e v / t t y 2则是系统的第二个虚拟控制台。

/dev/pty 提供远程登陆伪终端支持。在进行te l n e t登录时就要用到/ d e v / p t y设备。

/dev/ttys 计算机串行接口,对于d o s来说就是“ c o m 1”口。 9. /dev/cua 计算机串行接口,与调制解调器一起使用的设备。

/dev/null “黑洞”,所有写入该设备的信息都将消失。例如:当想要将屏幕上的输出信息隐藏起来时,只要将输出信息输入到/ d e v / n u l l中即可。
 

3. /etc 目录

这是我们linux系统的神经中枢,它包含所有与系统相关的配置文件。一个“配置文件”要被定义为用来控制程序操作的本地文件;

它必须是静态的,不能是可执行二进制文件。因此,定期备份这个目录是个好主意。如果您重新安装或丢失当前的安装,它肯定会为您节省大量的重新配置时间。

通常,不能存放二进制文件

/etc/rc或/etc/rc.d或/etc/rc*xx.d 启动、或改变运行级时运行的脚本或脚本的目录。

/etc/passwd 用户数据库,其中的域给出了用户名、真实姓名、用户起始目录、加密口令和用户的其他信息。

/etc/fdprm 软盘参数表,用以说明不同的软盘格式。可用setfdprm 进行设置。更多的信息见s e t f d p r m的帮助页。

/etc/fstab 指定启动时需要自动安装的文件系统列表。也包括用swapon -a启用的s w a p区的信息。

/etc/group 类似/etc/passwd ,但说明的不是用户信息而是组的信息。包括组的各种数据。

/etc/inittab init 的配置文件。

/etc/issue 包括用户在登录提示符前的输出信息。通常包括系统的一段短说明或欢迎信息。具体内容由系统管理员确定。

/etc/magic “f i l e”的配置文件。包含不同文件格式的说明,“f i l e”基于它猜测文件类型。

/etc/motd m o t d是message of the day的缩写,用户成功登录后自动输出。内容由系统管理员确定。常用于通告信息,如计划关机时间的警告等。

/etc/mtab 当前安装的文件系统列表。由脚本( s c r i t p )初始化,并由mount 命令自动更新。当需要一个当前安装的文件系统的列表时使用(例如df 命令)。

/etc/shadow 在安装了影子( s h a d o w )口令软件的系统上的影子口令文件。影子口令文件将/ e t c / p a s s w d文件中的加密口令移动到/ e t c / s h a d o w中,而后者只对超级用户( r o o t )可读。这使破译口令更困难,以此增加系统的安全性。

/etc/login.defs l o g i n命令的配置文件。

/etc/printcap 类似/etc/termcap ,但针对打印机。语法不同。

/etc/profile 、/ e t c / c s h . l o g i n、/etc/csh.cshrc 登录或启动时b o u r n e或c shells执行的文件。这允许系统管理员为所有用户建立全局缺省环境。

/etc/securetty 确认安全终端,即哪个终端允许超级用户( r o o t )登录。一般只列出虚拟控制台,这样就不可能(至少很困难)通过调制解调器( m o d e m )或网络闯入系统并得到超级用户特权。

/etc/shells 列出可以使用的s h e l l。chsh 命令允许用户在本文件指定范围内改变登录的s h e l l。提供一台机器f t p服务的服务进程ftpd 检查用户s h e l l是否列在/etc/shells 文件中,如果不是,将不允许该用户登录。

/etc/termcap 终端性能数据库。说明不同的终端用什么“转义序列”控制。写程序时不直接输出转义序列(这样只能工作于特定品牌的终端),而是从/etc/termcap 中查找要做的工作的正确序列。这样,多数的程序可以在多数终端上运行。
 

4. /lib 目录

lib 是 library 的简称,也就是库的意思,因此此目录下存放着 Linux 所必须的库文件, 存放着内核模块和系统最基本的动态链接共享库。其作用类似于Windows里的.dll文件。

命令和用户编写的应用程序要使用这些库文件。几乎所有的应用程序都须要用到这些共享库,是二进制文件。它们对于基本系统功能是必不可少的。

包含支持位于/bin和/sbin下的二进制文件的库文件.

库文件名为 ld或lib.so.*

例如:ld-2.11.1.so,libncurses.so.5.7

/lib/modules
/lib/modules 目录包含系统核心可加载各种模块,尤其是那些在恢复损坏的系统时重新引导系统所需的模块(例如网络和文件系统驱动)。
 

5. /mnt 目录

临时挂载目录,一般是空目录,可以在此目录下创建空的子目录

比如/mnt/sd、/mnt/usb,这样就可以将 SD 卡或者 U 盘挂载到/mnt/sd 或者/mnt/usb 目录中。

系统提供这个目录是让用户临时挂载别的文件系统。这是一个通用的挂载点,您可以在其中挂载文件系统或设备。安装是使系统可用的文件系统。安装后,您的文件将可在挂载点访问。该目录通常包含挂载点或子目录,在其中安装软盘和CD。如果你愿意,你也可以在这里创建额外的挂载点。标准安装点将。包括/MNT/CDROM和/MNT/软盘。在系统上的任何地方创建一个挂载点都没有限制,但按照惯例,纯粹的实用性不会浪费文件系统的挂载点。

6. /proc 目录

包含系统进程的相关信息。
/proc 文件系统是一个伪的文件系统,就是说它是一个实际上不存在的目录,此目录一般是空的,因而这是一个非常特殊的目录。它并不存在于某个磁盘上,而是由核心在内存中产生。这个目录用于提供关于系统的信息。下面说明一些最重要的文件和目录(/proc 文件系统在proc man页中有更详细的说明)。

当 Linux 系统启动以后会将此目录作为 proc 文件系统的挂载点, proc是个虚拟文件系统,没有实际的存储设备。 proc 里面的文件都是临时存在的,一般用来存储系统运行信息文件。系统资源以文本信息形式存在。例如:/proc/uptime

这是一个虚拟的文件系统,包含有关正在运行的进程的信息。例如:/proc/{pid}目录中包含的与特定pid相关的信息。

在Linux下,/proc包含每个运行的进程的目录,包括内核进程。

/proc/x 关于进程x的信息目录,这一x是这一进程的标识号。每个进程在/proc 下有一个名为自己进程号的目录。

/proc/cpuinfo 存放处理器( c p u )的信息,如c p u的类型、制造商、型号和性能等。

/proc/devices 当前运行的核心配置的设备驱动的列表。

/proc/dma 显示当前使用的d m a通道。

/proc/filesystems 核心配置的文件系统信息。

/proc/interrupts 显示被占用的中断信息和占用者的信息,以及被占用的数量。

/proc/ioports 当前使用的i / o端口。

/proc/kcore 系统物理内存映像。与物理内存大小完全一样,然而实际上没有占用这么多内存;它仅仅是在程序访问它时才被创建。(注意:除非你把它拷贝到什么地方,否则/proc 下没有任何东西占用任何磁盘空间。)

/proc/kmsg 核心输出的消息。也会被送到s y s l o g。

/proc/ksyms 核心符号表。

/proc/loadavg 系统“平均负载”; 3个没有意义的指示器指出系统当前的工作量。

/proc/meminfo 各种存储器使用信息,包括物理内存和交换分区( s w a p )。

/proc/modules 存放当前加载了哪些核心模块信息。

/proc/net 网络协议状态信息。

/proc/self 存放到查看/proc 的程序的进程目录的符号连接。当2个进程查看/proc 时,这将会是不同的连接。这主要便于程序得到它自己的进程目录。

/proc/stat 系统的不同状态,例如,系统启动后页面发生错误的次数。

/proc/uptime 系统启动的时间长度。

/proc/version 核心版本。
 

7. /usr 目录

要注意, usr 不是 user 的缩写,而是 Unix Software Resource 的缩写,也就是 Unix 操作系统软件资源目录。

这里有个小知识点,那就是 Linux 一般被成为类 Unix 操作系统,苹果的 MacOS也是类 Unix 操作系统。关于 Linux 和 Unix 操作系统的渊源大家可以直接在网上找 Linux 的发展历史来看。

既然是软件资源目录,因此/usr 目录下也存放着很多软件,一般系统安装完成以后此目录占用的空间最多。

/usr 是个很重要的目录,通常这一文件系统很大,因为所有程序安装在这里。/usr 里的所有文件一般来自l i n u x发行版( d i s t r i b u t i o n );本地安装的程序和其他东西在/usr/local 下,因为这样可以在升级新版系统或新发行版时无须重新安装全部程序。/usr 目录下的许多内容是 可选的,但这些功能会使用户使用系统更加有效。/ u s r可容纳许多大型的软件包和它们的配置文件。下面列出一些重要的目录(一些不太重要的目录被省略了)。

包含二进制文件、库文件、文档和二级程序的源代码。

/usr/bin中包含用户程序的二进制文件。如果你在/bin中找不到用户二进制文件,到/usr/bin目录看看。例如:at、awk、cc、less、scp。

/usr/sbin中包含系统管理员的二进制文件。如果你在/sbin中找不到系统二进制文件,到/usr/sbin目录看看。例如:atd、cron、sshd、useradd、userdel。

/usr/local中包含了从源安装的用户程序。例如,当你从源安装Apache,它会在/usr/local/apache2中。
/usr/x11r6 包含x wi n d o w系统的所有可执行程序、配置文件和支持文件。为简化x的开发和安装,x的文件没有集成到系统中。x wi n d o w系统是一个功能强大的图形环境,提供了大量的图形工具程序。用户如果对microsoft wi n d o w s或m a c h i n t o s h比较熟悉的话,就不会对x wi n d o w系统感到束手无策了。

/usr/x386 类似/ u s r / x 11r6 ,但是是专门给x 11 release 5的。

/usr/bin 集中了几乎所有用户命令,是系统的软件库。另有些命令在/bin 或/usr/local/bin 中。

/usr/sbin包括了根文件系统不必要的系统管理命令,例如多数服务程序。

/usr/man、/ u s r / i n f o、/ u s r / d o c 这些目录包含所有手册页、g n u信息文档和各种其他文档文件。每个联机手册的“节”都有两个子目录。例如: / u s r / m a n /m a n 1中包含联机手册第一节的源码(没有格式化的原始文件),/ u s r / m a n / c a t 1包含第一节已格式化的内容。l联机手册分为以下九节:内部命令、系统调用、库函数、设备、文件格式、游戏、宏软件包、系统管理和核心程序。

/usr/include 包含了c语言的头文件,这些文件多以. h结尾,用来描述c语言程序中用到的数据结构、子过程和常量。为了保持一致性,这实际上应该放在/usr/lib 下,但习惯上一直沿用了这个名字。

/usr/lib 包含了程序或子系统的不变的数据文件,包括一些s i t e - w i d e配置文件。也包含了/usr/bin和/usr/sbin用到的库。名字l i b来源于库(library); 编程的原始库也存在/usr/lib 里。当编译程序时,程序便会和其中的库进行连接。也有许多程序把配置文件存入其中。

/usr/local 本地安装的软件和其他文件放在这里。这与/ u s r很相似。用户可能会在这发现一些比较大的软件包,如t e x、e m a c s等。/var文件系统/var 包含系统一般运行时要改变的数据。通常这些数据所在的目录的大小是要经常变化或扩充的。原来/ v a r目录中有些内容是在/ u s r中的,但为了保持/ u s r目录的相对稳定,就把那些需要经常改变的目录放到/ v a r中了。每个系统是特定的,即不通过网络与其他计算机共享。 下面列出一些重要的目录(一些不太重要的目录省略了)。

8. /var 目录 

此目录存放一些可以改变的数据。这个目录下可以找到内容可能增长的文件。
这包括 - 系统日志文件(/var/log);包和数据库文件(/var/lib);电子邮件(/var/mail);打印队列(/var/spool);锁文件(/var/lock);多次重新启动需要的临时文件(/var/tmp);

/var/catman 包括了格式化过的帮助( m a n )页。帮助页的源文件一般存在/ u s r / m a n / m a n中;有些m a n页可能有预格式化的版本,存在/ u s r / m a n / c a t中。而其他的m a n页在第一次看时都需要格式化,格式化完的版本存在/var/man 中,这样其他人再看相同的页时就无须等待格式化了。 (/var/catman 经常被清除,就像清除临时目录一样。)

/var/lib 存放系统正常运行时要改变的文件。

/var/local 存放/usr/local 中安装的程序的可变数据(即系统管理员安装的程序)。注意,如果必要,即使本地安装的程序也会使用其他/var 目录,例如/var/lock 。

/var/lock 锁定文件。许多程序遵循在/var/lock 中产生一个锁定文件的约定,以用来支持他们正在使用某个特定的设备或文件。其他程序注意到这个锁定文件时,就不会再使用这个设备或文件。

/var/log 各种程序的日志( l o g )文件,尤其是login (/var/log/wtmp log纪录所有到系统的登录和注销) 和syslog (/var/log/messages 纪录存储所有核心和系统程序信息)。/var/log 里的文件经常不确定地增长,应该定期清除。

/var/run 保存在下一次系统引导前有效的关于系统的信息文件。例如, /var/run/utmp 包含当前登录的用户的信息。

/var/spool 放置“假脱机( s p o o l )”程序的目录,如m a i l、n e w s、打印队列和其他队列工作的目录。每个不同的s p o o l在/var/spool 下有自己的子目录,例如,用户的邮箱就存放在/var/spool/mail 中。

/var/tmp 比/tmp 允许更大的或需要存在较长时间的临时文件。注意系统管理员可能不允许/var/tmp 有很旧的文件。
 

 9. /sbin 目录

此目录页用户存放一些可执行文件,但是此目录下的文件或者说命令只有管理员才能使用,主要用户系统管理。

和一开始我们讲的bin类似,s就是super 的意思,/sbin是Linux和其他UNIX类操作系统中root目录的标准子目录,包含可执行程序(即准备运行)程序,也就是说这里存放的是系统管理员使用的管理程序。

 10. /sys 目录

系统启动以后此目录作为 sysfs 文件系统的挂载点, sysfs 是一个类似于 proc 文件系统的特殊文件系统, sysfs 也是基于 ram 的文件系统,也就是说它也没有实际的存储设备。此目录是系统设备管理的重要目录,此目录通过一定的组织结构向用户提供详细的内核数据结构信息。

11. /opt 目录

可选的文件、软件存放区,由用户选择将哪些文件或软件放到此目录中。

12. /home 目录

存放linux系统的用户

我们通常同“~”来表示家目录。

所有用户用home目录来存储他们的个人档案。
例如:/home/john、/home/nikita

13. /tmp 目录

包含系统和用户创建的临时文件。
当系统重新启动时,这个目录下的文件都将被删除。

14. /srv 目录

srv代表服务。

包含服务器特定服务相关的数据。

例如,/srv/cvs包含cvs相关的数据。

15. /media 目录

可移动媒体设备
用于挂载可移动设备的临时目录。

举例来说,挂载CD-ROM的/media/cdrom,挂载软盘驱动器的/media/floppy;

16. /lost+found 目录

lost+found目录只准root 及所属者读取创建进入。我们切换到root用户cd进入发现是空的。这个文件夹是Linux、MaOS和其他类似UNIX的操作系统的一部分。每个文件系统即每个分区都有自己lost+found的目录。你会在这里找到被损坏的文件的恢复位。 这个目录平时是空的,当系统不正常关机后,这里就成了一些无家可归的文件的避难所,也就是说它对于恢复由于许多原因如电源故障而没有正确关闭的文件是有用的。任何要恢复的文件都保存在该文件夹中。fsck命令用于恢复这些文件。

四.一级目录的解释

‘/’ 目录: 根目录是linux目录结构中最顶级的目录,类似于windows中的C:\ , D:\目录

/boot目录:存放linux的启动配置文件和内核文件
/etc目录: 存放linux的配置文件

/home目录:存放linux普通用户的家目录
/root目录:存放root用户的家目录

/opt目录:存放软件文件的目录
/usr目录:linux软件默认安装的目录

/proc目录:存放进程文件

/srv目录:存放一些资源文件
/sys目录:存放一些资源文件(系统资源)

/tmp目录:存放一些临时文件
/var目录:存放log日志文件

/bin目录->/usr/bin:存放普通用户能执行的命令(超级用户也能执行)
/sbin目录->/usr/sbin:存放超级用户能执行的命令

/lib目录->/usr/lib:存放32位的函数文件
/lib64目录->/usr/lib64:存放64位的函数文件

/dev目录:存放linux的设备文件

/media目录:挂载点目录
/mnt目录:挂载点目录
/run目录:挂载点目录

挂载点:插入u盘时所挂载的地方
函数文件:一些软件的运行需要依赖一些基本的函数才能运行,这些函数具备一些操作系统最基础的功能
->:软链接,类似于快捷方式
root目录:它是linux系统中的一个超级用户,它可以在linux中做任何事。同时拥有自己的家,而其他用户的家都在home目录中
 

五.重定向

重定向命令

命令:"  > "  ">> "  "< "  "<&" "< >"

">" 将命令输出写入文件或设备,而不是命令提示符或句柄

cmd > file  将一个stdout 重定向到 file 文件中

cmd 1>file 将一个stdout 重定向到 file 文件中

命令的默认是 1   即  1> 和 > 是一样的

例如:ls -l > a.txt

# 将命令ls -l 的执行结果重定向到文件a.txt中,若当前没有a.txt这个文件则自动新创建,若有则将执行结果覆盖该文件的内容

''>>" 将命令输出添加到文件末尾而不删除文件中已有的信息

cmd >>file 将一个stdout 重定向到file文件中

例如:ls -l >>a.txt

#将命令ls执行的结果重定向到文件a.txt中,若当前没有a.txt则自动创建,若有则将执行结果追加在该文件尾部

"

cmd < file 将file文件的内容当作命令的输入(stdin)

例如:cat < a.txt  >b.txt  或 cat >b.txt

# 此时是将a.txt 里内容读入并覆盖b.txt的内容(有点像复制a.txt的内容粘贴到b.txt且完全覆盖)

cat >b.txt   如果将上例中的输出重定向改成 >>  这时就是 复制a.txt的内容粘贴且追加到b.txt尾部,不改变原文件里的内容

"<

# 此命令类似直接插入内容

"

" >&" 如 m >&n   重定向描述符m到描述符n中

# 指定为m文件所有输出发送到n

"< >" 如  n < > file  打开file文件并将描述符n分配给它

#如果file文件不存在,则新创建,如果描述符n没有指定,则默认为stdin

Linux重定向是指修改原来默认的一些东西,对原来系统命令的默认执行方式进行改变,比如说简单的我不想看到在显示器的输出而是希望输出到某一文件中就可以通过Linux重定向来进行这项工作。

Linux默认输入是键盘,输出是显示器。你可以用重定向来改变这些设置。比如用wc命令的时候本来是要手动输入一篇文字来计算字符数的,用了重定向后可以直接把一个已经写好的文件用‘

STDIN 0 键盘输入

STDOUT 1 输出信息到提示符窗口

STDERR 2 输出错误信息到提示符窗口

默认的 < 重定向输入操作符是 0,而默认的 > 重定向输出操作符是 1。键入 < 或 > 操作符之后,必须指定数据的读写位置,可以是文件名或其他现有的句柄。

要指定重定向到现有句柄,请使用与 & 字符,后面接要重定向的句柄号(即 &句柄号)。

例如,下面的命令可以将句柄 2(即 STDERR)重定向到句柄 1(即 STDOUT):2>&1

下表列出了可用于重定向输入和输出数据流的操作符:

Linux重定向操作符 功能描述

> 将命令输出写入文件或设备,而不是命令提示符或句柄

< 从文件而不是从键盘或句柄读入命令输入

>> 将命令输出添加到文件末尾而不删除文件中已有的信息

>& 将一个句柄的输出写入到另一个句柄的输入中

| 从一个命令中读取输出并将其写入另一个命令的输入中;也称为管道操作符

现在我们回过头来看看上面的那条语句mysh > mylog.txt 2>&1就可明白:

> mylog.txt意思是将标准输出重定向到mylog.txt,等价于mysh 1> mylog.txt;

2 >& 1 意思是将错误输出重定向到句柄1标准输出;综合起来就是mysh命令执行过程中产生的标准输出和错误输出都会被重定向到mylog.txt中;

重定向的功能十分强大,有兴趣的可以去尝试各种不同的组合,看看前后位置变下会有什么结果?

某些时候我们可能并不希望记录什么标准输出或者是错误输出,那可以用mysh >null 2>null或者mysh >/dev/null 2>/dev/null;

I/O重定向详解

1、 基本概念(这是理解后面的知识的前提,请务必理解)

a、 I/O重定向通常与 FD有关,shell的FD通常为10个,即 0~9;

b、 常用FD有3个,为0(stdin,标准输入)、1(stdout,标准输出)、2(stderr,标准错误输出),默认与keyboard、monitor、monitor有关;

c、 用 < 来改变读进的数据信道(stdin),使之从指定的档案读进;

d、 用 > 来改变送出的数据信道(stdout, stderr),使之输出到指定的档案;

e、 0 是 < 的默认值,因此 < 与 0 与 1> 是一样的;

f、 在IO重定向 中,stdout 与 stderr 的管道会先准备好,才会从 stdin 读进资料;

g、 管道“|”(pipe line):上一个命令的 stdout 接到下一个命令的 stdin;

h、 tee 命令是在不影响原本 I/O 的情况下,将 stdout 复制一份到档案去;

i、 bash(ksh)执行命令的过程:分析命令-变量求值-命令替代(``和$( ))-重定向-通配符展开-确定路径-执行命令;

j、 ( ) 将 command group 置于 sub-shell 去执行,也称 nested sub-shell,它有一点非常重要的特性是:继承父shell的Standard input, output, and error plus any other open file descriptors。

k、 exec 命令:常用来替代当前 shell 并重新启动一个 shell,换句话说,并没有启动子 shell。使用这一命令时任何现有环境都将会被清除。exec 在对文件描述符进行操作的时候,也只有在这时,exec 不会覆盖你当前的 shell 环境。

2、 基本IO

cmd > file 把 stdout 重定向到 file 文件中;

cmd >> file 把 stdout 重定向到 file 文件中(追加);

cmd 1> fiel 把 stdout 重定向到 file 文件中;

cmd > file 2>&1 把 stdout 和 stderr 一起重定向到 file 文件中;

cmd 2> file 把 stderr 重定向到 file 文件中;

cmd 2>> file 把 stderr 重定向到 file 文件中(追加);

cmd >> file 2>&1 把 stderr 和 stderr 一起重定向到 file 文件中(追加);

cmd < file >file2 cmd 命令以 file 文件作为 stdin,以 file2 文件作为 stdout;

cat <>file 以读写的方式打开 file;

cmd < file cmd 命令以 file 文件作为 stdin;

cmd << delimiter Here document,从 stdin 中读入,直至遇到 delimiter 分界符。

3、 进阶IO

>&n 使用系统调用 dup (2) 复制文件描述符 n 并把结果用作标准输出;

>&- 关闭标准输出;

n

n>&- 表示将 n 号输出关闭;

上述所有形式都可以前导一个数字,此时建立的文件描述符由这个数字指定而不是缺省的 0 或 1。如:

... 2>file 运行一个命令并把错误输出(文件描述符 2)定向到 file。

... 2>&1 运行一个命令并把它的标准输出和输出合并。(严格的说是通过复制文件描述符 1 来建立文件描述符 2 ,但效果通常是合并了两个流。)

我们对 2>&1详细说明一下 :2>&1 也就是 FD2=FD1 ,这里并不是说FD2 的值 等于FD1的值,因为 > 是改变送出的数据信道,也就是说把 FD2 的 “数据输出通道” 改为 FD1 的 “数据输出通道”。如果仅仅这样,这个改变好像没有什么作用,因为 FD2 的默认输出和 FD1的默认输出本来都是 monitor,一样的!但是,当 FD1 是其他文件,甚至是其他 FD 时,这个就具有特殊的用途了。请大家务必理解这一点。

exec 0exec 1>outfilename # 打开文件outfilename作为stdout。

exec 2>errfilename # 打开文件 errfilename作为 stderr。

exec 0

exec 1>&- # 关闭 FD1。

exec 5>&- # 关闭 FD5。

六.创建文件,删除文件,创建目录,删除目录

1.文件的创建

常见的创建文件的几种命令
以创建test.txt文件为例:

touch test.txt
vim test.txt

2.创建目录

创建的命令:mkdir test_dir

创建嵌套目录:可以使用选项-p创建嵌套目录结构。如果父目录不存在,它将为您创建。当您要创建目录结构或要确保目录路径存在时,这特别有用。
mkdir -p dir1/dir2/dir3/dir4

3.删除文件及目录的命令:rm

rm命令的用法:
rm (-操作符)文件路径

-d:直接把欲删除的目录的硬连接数据删除成0,删除该目录;

-f:强制删除文件或目录(没有提示);

-i:删除已有文件或目录之前先询问用户(默认设置);

-r或-R:递归处理,将指定目录下的所有文件与子目录一并处理(删除目录必须要加);

–preserve-root:不对根目录进行递归操作;

-v:显示指令的详细执行过程

举例1:删除/usr/local/test.txt 这个路径的文件test.txt
做法1:先使用CD命令进入local目录:cd /usr/local,再执行删除命令:rm test.txt
做法2:直接使用rm命令具体到文件及路径:rm /usr/local/test.txt

举例2:删除当前目录下的另一个目录test及其包含的所有文件,强制删除不出现提示:
rm -rf test

七.cp命令

1.cp命令简介

 1)英文原意:copy

 2)命令所在路径:/bin/cp

 3)功能描述:复制源文件或目录到指定目录(可以改名)

 4)语法:cp +选项+源文件或目录+目标目录

2.cp命令的选项

-r或-R:递归处理,将指定目录下的子文件和子目录一并处理(复制目录的时候使用)
-f:强行复制文件或目录,不论目标文件或目录是否已存在
-p:保留文件属性(所有者、所属组、文件权限、文件时间·····)
-a:相当于-pr
-i:覆盖既有文件时先询问用户。
-l:对源文件建立硬连接,非复制文件。
-S:在备份文件时,用指定的后缀“SUFFIX”代替文件的默认后缀。
-b:覆盖已存在的文件目标前将目标文件备份。
-v:详细显示命令执行的操作。
注意:当复制目录的时候一定要加上选项-p,不然不能复制

3.cp实例

 1)复制并且改名

[root@rhcsa test]# ls
1.txt
[root@rhcsa test]# cp 1.txt 2.txt
[root@rhcsa test]# ls
1.txt  2.txt

 2)复制文件保留文件属性和不保留的区别

[root@cxm test]# cp -p 1.txt 3.txt
[root@cxm test]# ll
总用量 0
-rw-r--r--. 1 cxm  cxm  0 3月   6 19:55 1.txt    (源文件)
-rw-r--r--. 1 root root 0 3月   6 19:59 2.txt    (没保留属性)
-rw-r--r--. 1 cxm  cxm  0 3月   6 19:55 3.txt    (保留属性)

 3)复制目录时的注意

[root@cxm test]# mkdir -p aa/bb/cc/dd
[root@cxm test]# ls
aa
[root@cxm test]# cp aa ee
cp: 略过目录"aa"
[root@cxm test]# cp -r aa gg
[root@cxm test]# ls
aa  gg                  (不加选项-p不可以复制)

4)mv命令是move的缩写,可以用来移动文件或者将文件改名(move (rename) files),是Linux系统下常用的命令,经常用来备份文件或者目录。

1.命令格式:
mv [选项] 源文件或目录 目标文件或目录

2.命令功能:
视mv命令中第二个参数类型的不同(是目标文件还是目标目录),mv命令将文件重命名或将其移至一个新的目录中。当第二个参数类型是文件时,mv命令完成文件重命名,此时,源文件只能有一个(也可以是源目录名),它将所给的源文件或目录重命名为给定的目标文件名。当第二个参数是已存在的目录名称时,源文件或目录参数可以有多个,mv命令将各参数指定的源文件均移至目标目录中。在跨文件系统移动文件时,mv先拷贝,再将原有文件删除,而链至该文件的链接也将丢失。

3.命令参数:
-b :若需覆盖文件,则覆盖前先行备份。
-f :force 强制的意思,如果目标文件已经存在,不会询问而直接覆盖;
-i :若目标文件 (destination) 已经存在时,就会询问是否覆盖!
-u :若目标文件已经存在,且 source 比较新,才会更新(update)
-t : --target-directory=DIRECTORY move all SOURCE arguments into DIRECTORY,即指定mv的目标目录,该选项适用于移动多个源文件到一个目录的情况,此时目标目录在前,源文件在后。

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值