我在linux里用命令出来is a directory是怎么回事

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了我在linux里用命令出来is a directory是怎么回事相关的知识,希望对你有一定的参考价值。

使用的命令应该是针对文件的命令。

在使用过程命令中把参数指定成了目录,所以linux报错说“这是一个目录”。可以理解为linux在提醒,这是一个目录不是文件,这个命令应该是针对文件的。

扩展资料:

参数:

-c :建立一个压缩文件的参数指令(create 的意思);

-x :解开一个压缩文件的参数指令!

-t :查看 tarfile 里面的文件!

特别注意,在参数的下达中, c/x/t 仅能存在一个!不可同时存在!因为不可能同时压缩与解压缩。

-z :是否同时具有 gzip 的属性?亦即是否需要用 gzip 压缩?

-j :是否同时具有 bzip2 的属性?亦即是否需要用 bzip2 压缩?

-v :压缩的过程中显示文件!这个常用,但不建议用在背景执行过程!

-f :使用档名,请留意,在 f 之后要立即接档名喔!不要再加参数!

例如使用『 tar -zcvfP tfile sfile』就是错误的写法,要写成『 tar -zcvPf tfile sfile』才对

-p :使用原文件的原来属性(属性不会依据使用者而变)

-P :可以使用绝对路径来压缩!

-N :比后面接的日期(yyyy/mm/dd)还要新的才会被打包进新建的文件中!

--exclude FILE:在压缩的过程中,不要将 FILE 打包!

参考技术A 你使用的命令应该是针对文件的命令,在使用过程你的命令中你把你的参数指定成了目录,所以linux报错说“这是一个目录”。你可以理解为linux在告诉你,这是一个目录不是文件,这个命令应该是针对文件的。本回答被提问者采纳 参考技术B 可能是你之前对这个文件的命名错误了,所以后面打开时就不是你想打开的那个文件就会报这样的错 参考技术C 系统报错信息是你打的是一个目录,而不是一个文件。 参考技术D

估计是你命令没输入完整

急急!Linux 命令框里 将文件导入程序的问题

注意这个是Linux的cmd
如果有一个play.c的文件,首先我编译它
>> gcc play.c
编译成功
然后我输入以下命令将一个test.txt的文件导入
>>./a.out < test.txt
我在play.c里用了argv字符串, 部分代码如下:
int main (int argc, char *argv[])

FILE* stream;

if ( (stream = fopen( argv[2] , "r" ) ) == 0 )

printf ("File open failed\n");
exit(1);

.........
return 0;

然后执行出来的结果就是 File open failed
请教达人这为什么打不开啊?
如果我用了指令./a.out < test.txt后,要在程序里读入test.txt里面的东西怎么办??
我不要类似“删掉导入符就可以了”的答案啊。。。

我实验了下, <和>这两个个符号,没有作为单独的参数处理,因为在作为参数传递给程序之前,已经提前被shell给解析并替换了。

简单的例子:

#include <stdio.h>
#include <stdlib.h>

int main(int argc ,char *argv[])

printf("arguement0=%s\narguement1=%s\narguement2=%s\n",
argv[0],argv[1],argv[2]);
FILE *stream;
if((stream = fopen(argv[2],"r")) == NULL )

perror("cannot open file...\n");
exit(-1);


fclose(stream);
return 0;


然后执行,结果相当奇怪:
[ksl@myhost ~]$ ./a.out < test2.c
arguement0=./a.out
arguement1=(null)
arguement2=SAL_USE_VCLPLUGIN=gtk
cannot open file...
: No such file or directory

再次执行:

[ksl@myhost ~]$ ./a.out > test2.c
cannot open file...
: No such file or directory

我觉得a.out的输出肯定是被定向到test2.c里面去了。。。再次验证:

[ksl@myhost ~]$ cat test2.c
arguement0=./a.out
arguement1=(null)
arguement2=SAL_USE_VCLPLUGIN=gtk

果然...所以这个是和shell的工作有关的...

不过,我们还有办法...利用这一点..刚才查了下
这里有说明http://blog.daviesliu.net/2005/08/31/200811/
,说>和<这两个符号把把stdin和stdout定向到了参数提供的文件...
不过,那不就更省事了,我们还不用打开文件了,直接读取stdin和stdout不就得了 ...

程序修改成这样:

#include <stdio.h>
#include <stdlib.h>

int main(int argc ,char *argv[])

char buf[128];

char *p=NULL;
while((p=fgets(buf,64,stdin))!=NULL) //打印下文件,看有效果没....
printf("%s",p);

return 0;


编译,换个文件再试试,就试试这个test.c吧:

[ksl@myhost ~]$ ./a.out < test.c
#include <stdio.h>
#include <stdlib.h>

int main(int argc ,char *argv[])

char buf[128];

char *p=NULL;
while((p=fgets(buf,64,stdin))!=NULL)
printf("%s",p);

return 0;


so,搞定..... 顺便重温了下重定向...呵呵
参考技术A 把 < 去掉,也就是 ./a.out test.txt
你用 <相当于输入的重定向,把test.txt的内容当成文件名了,当然不存在这样的一个文件追问

去掉 < 的我会用,现在的问题是必须用 < 这个而且应该是没错的,我不知道是不是除了argv以外还有另外的方法?

追答

你要先理解是输出的重定向,相当于把你printf出来的东西重定向到某个文件。

以上是关于我在linux里用命令出来is a directory是怎么回事的主要内容,如果未能解决你的问题,请参考以下文章

linux里用cmake安装的软件要怎么卸载?

ANSYS中,我在命令行输入、CLEAR,出现、CLEAR is not a recognized PREP7 command,abbreviantion,

linux 把当前目录的一个子目录里的文件移动到另一个子目录里用啥命令

sh Creacion de Acceso Directo en Linux

linux里用cmake安装的软件要怎么卸载

我在linux里用nasm编译成.o文件之后,用gcc连接就会报错,是否和我的linux是64位的有关?