我是那种新手到Linux的,我不知道是否>
和touch
有同样的效果。我的意思是,以下两个命令是否具有相同的作用?:
$ > file.txt
$ touch file.txt
如果是这样,很高兴知道我可以键入`> file.txt'来创建新文件。
touch
的文件包含数据,则不会发生任何事情,但是如果您>
将其删除,则不会发生任何事情。
我是那种新手到Linux的,我不知道是否>
和touch
有同样的效果。我的意思是,以下两个命令是否具有相同的作用?:
$ > file.txt
$ touch file.txt
如果是这样,很高兴知道我可以键入`> file.txt'来创建新文件。
touch
的文件包含数据,则不会发生任何事情,但是如果您>
将其删除,则不会发生任何事情。
Answers:
双方touch
并>
会创建一个新的文件,如果它不存在。如以下终端命令所示,当您touch
使用现有文件时,访问/上次修改时间将被更新。但是,如果您>
使用现有文件,则该文件将被截断,并且上次修改的时间将被更新(访问时间未更新)。请注意,>
这不会删除/取消链接文件。索引节点保持不变-这就是为什么>
/或truncate
即使在打开文件句柄的情况下也经常清除日志文件的原因。
rick@dell:~$ > EmptyFile
rick@dell:~$ touch EmptyFile2
rick@dell:~$ ls Empty*
EmptyFile EmptyFile2
rick@dell:~$ ls -l Empty*
-rw-rw-r-- 1 rick rick 0 Sep 29 20:27 EmptyFile
-rw-rw-r-- 1 rick rick 0 Sep 29 20:27 EmptyFile2
rick@dell:~$ echo Hello > EmptyFile
rick@dell:~$ ls -l Empty*
-rw-rw-r-- 1 rick rick 6 Sep 29 20:28 EmptyFile
-rw-rw-r-- 1 rick rick 0 Sep 29 20:27 EmptyFile2
rick@dell:~$ > EmptyFile
rick@dell:~$ ls -l Empty*
-rw-rw-r-- 1 rick rick 0 Sep 29 20:28 EmptyFile
-rw-rw-r-- 1 rick rick 0 Sep 29 20:27 EmptyFile2
rick@dell:~$ echo Hello > EmptyFile
rick@dell:~$ touch EmptyFile
rick@dell:~$ ls -l Empty*
-rw-rw-r-- 1 rick rick 6 Sep 29 20:32 EmptyFile
-rw-rw-r-- 1 rick rick 0 Sep 29 20:27 EmptyFile2
如注释中所述,它touch
是一个外部命令,仅对文件起作用。>
是Shell内置功能,可用于许多不同目的。通常,您会看到它的用法像cat source.fil > target.fil
。
清空文件的长格式为:
cat /dev/null > emptyme.fil
使用> emptme.fil
可以将任何内容都不重定向到文件的紧凑格式来完成相同的操作。
> file.txt
非常适合清除日志文件。
ln foo bar
先删除然后重新创建foo
,则bar
仍然具有其先前的内容)。
rm /var/log/nginx/access.log
在nginx打开该文件时,它将具有0个链接,但inode仍然存在。 lsof -c nginx | grep access.log
然后加上pid,ls -l /proc/<pid>/fd/ | grep access.log
最后加上cat / proc / <pid> / fd / <前一个命令>`中的文件名。即使这很旧也要发表评论。希望它有意义
两者之间有很大的不同。 Touch
是用于为文件加上时间戳的命令。该>
符号是标准的输出重定向器。
触摸的用法
如果文件不存在,它将创建文件。
触摸通常用于创建标志。例如,如果要在系统上两次查找所有文件,可以使用以下命令序列:
$ touch -t 201609292200 starttime
$ touch -t 201609292300 endtime
这将创建以下文件(或如果存在则更改时间戳):
-rw-rw-r-- 1 ljames ljames 0 Sep 29 23:00 endtime
-rw-rw-r-- 1 ljames ljames 0 Sep 29 22:00 starttime
现在,您可以使用find来显示或处理在该小时(这两个文件时间戳之间的时间,即2016年9月29日晚上10点到晚上11点之间)之间修改过的所有文件。
$ find ~/ -newer starttime ! -newer endtime -printf "%M %Tm/%Td %TH:%TM %TM %p\n"
这是上述find命令的部分输出:
-rw-rw-r-- 09/29 22:08 08 /home/users/l/j/ljames/.thunderbird/lj7p62iq.default/gcontactsync/google_feed_backups/apollothethird@gmail.com_groups.xml
-rw-rw-r-- 09/29 22:08 08 /home/users/l/j/ljames/.thunderbird/lj7p62iq.default/gcontactsync/google_feed_backups/apollothethird@gmail.com.xml
-rw-rw-r-- 09/29 22:08 08 /home/users/l/j/ljames/.thunderbird/lj7p62iq.default/gcontactsync/address_book_backups/abook.mab.bak
-rw-rw-r-- 09/29 23:00 00 /home/users/l/j/ljames/endtime
drwx------ 09/29 22:44 44 /home/users/l/j/ljames/.config/google-chrome/Default/Extensions/Temp
drwx------ 09/29 22:44 44 /home/users/l/j/ljames/.config/google-chrome/Default/Extensions/fahmaaghhglfmonjliepjlchgpgfmobi
drwx------ 09/29 22:44 44 /home/users/l/j/ljames/.config/google-chrome/Default/Extensions/fahmaaghhglfmonjliepjlchgpgfmobi/1.337.0_0
使用输出重定向
重定向符号会将标准输出重定向到指定文件。如果可能失败,则取决于您的网吧/夜机设置。Noclobber仅在文件不存在时才会创建。
重定向输出有多种版本,包括:
>-重定向标准输出。创建或覆盖现有文件。 >>-重定向附加。创建或附加到现有文件。 >&-重定向标准输出和标准错误。 >>&-重定向/附加标准输出和标准错误
我们可以使用find
上面的命令将在指定小时内创建的所有文件的内容重定向到一个我们可以稍后记录和研究的文件:
$ find ~/ -newer starttime ! -newer endtime -printf "%M %Tm/%Td %TH:%TM %TM %p\n" > ~/files.log
file.txt
存在并且不为空,> file.txt
则将清除其内容,但touch file.txt
不会清除。但是没有人提到这>> file.txt
是一个很好的替代品touch file.txt
-如果文件不存在,它将创建文件(假设您具有这样做的权限),但是不会截断现有文件。请参阅“>”和“ >>”有什么区别?
Usage of Output redirection
。通知说>>
= Redirect append>
。
>> file.txt
可以替代的方法touch file.txt
。(您是唯一提到的人,>>
这就是为什么我在您的答案而不是在问题下发表我的评论的原因。)
>
是Shell输出重定向操作符,用于将前面命令的STDOUT重定向到后面提到的文件描述符 >
。如果该文件存在,则其内容将被截断,如带有open(2)
-ed和O_TRUNC
标志的文件,如果该文件不存在,则将创建该文件。
需要注意的重要一点是,此重定向操作符将在前面的命令运行之前由Shell处理,因此它不依赖于任何命令,而是由Shell本身处理。
请注意,某些外壳程序(例如zsh
)在使用空重定向时会有所不同,例如:
>file.txt
一个典型的解决方法是添加:
(true
)no-op命令:
: >file.txt
传统上,的主要目的touch
是更改文件的时间戳,而不是创建文件。
touch
仅当参数中提到的文件不存在时才创建文件,否则它将文件的修改时间更改为当前时间戳。您还可以使用更改访问时间和索引节点创建时间touch
。
zsh
确实支持空重定向-它的行为cat
与不带参数的文件重定向非常相似。基本上,您键入的任何内容都会写入文件,直到出现EOF字符或中断为止。这zsh
与just的行为<file
类似,它只是打印文件内容,就像cat
这样做一样。这些可能是可配置的,我已经看到<file
在寻呼机中打开文件。
EOF
(就像cat >file.txt
你说的那样),bash
只要这样做>file.txt
就足够了。
touch
更新文件的修改时间和访问时间。有一些选项只能更新一个。(2)通常,Unix / Linux / POSIX不支持“ inode创建时间”。某些文件系统类型支持它,但是没有通用的查看方式,更不用说对其进行修改了。您是否可以提供一个引用,说明该版本touch
可以使用户更改inode的创建时间?
file.txt
已经存在并且不为空,则它们肯定不存在。