Command line UNIX tty命令和文件命令?

Command line UNIX tty命令和文件命令?,command-line,unix,Command Line,Unix,我是UNIX新手,在阅读一本关于UNIX的书时,我遇到了以下两个我不理解的问题。我非常感谢你的帮助 1) 在手册页中查找file命令,然后在/dev目录中的所有文件上使用它。你能把这些文件分成两类吗 2) 运行tty命令,并记下终端的设备名称。现在在命令cp/etc/passwd/dev/pts/6中使用这个设备名(/dev/pst/6)。你观察到了什么?公平的问题真的。。。我们很容易把这么多事情视为理所当然 要阅读名为file的命令的手册页面,只需键入 man file …这将提供很多可能会

我是UNIX新手,在阅读一本关于UNIX的书时,我遇到了以下两个我不理解的问题。我非常感谢你的帮助

1) 在手册页中查找file命令,然后在/dev目录中的所有文件上使用它。你能把这些文件分成两类吗


2) 运行tty命令,并记下终端的设备名称。现在在命令cp/etc/passwd/dev/pts/6中使用这个设备名(/dev/pst/6)。你观察到了什么?

公平的问题真的。。。我们很容易把这么多事情视为理所当然

要阅读名为
file
的命令的手册页面,只需键入

man file
…这将提供很多可能会让人困惑的信息,但如果你坚持下去,你会很快习惯这些东西。重要的是,
file
是一个程序,它试图对您要求它分类的文件进行分类。如果你打字

file /dev/*
…这将执行问题所要求的操作,并使用/dev/子目录中的文件列表调用file。列表实际上是由您正在输入的“shell”程序准备的,该程序随后执行文件程序并将其传递给列表<代码>文件然后输出文件的一些描述。在我的计算机上,当您的计算机上的
[SHELL-PROMPT]
不同时,我键入了文件/dev/*并且部分输出如下所示:

[SHELL-PROMPT] file /dev/*
...lots of stuff...
/dev/cevt:      character special (255/176)
/dev/console:   character special (5/1)
/dev/core:      symbolic link to `/proc/kcore'
/dev/cpqci:     character special (10/209)
/dev/cpqhealth: directory
/dev/crom:      character special (255/180)
...lots of stuff...
/dev/md8:       block special (9/8)
/dev/md9:       block special (9/9)
/dev/mem:       character special (1/1)
/dev/mice:      character special (13/63)
/dev/mouse0:    character special (13/32)
/dev/mptctl:    character special (10/220)
/dev/net:       directory
/dev/nflog:     character special (36/5)
/dev/null:      character special (1/3)
/dev/parport0:  character special (99/0)
...lots of stuff...
在左列中,每个目录/文件组合(称为路径)都有一个文件系统条目,文件在右边描述了内容。这些描述可能没有多大意义,但您可以看到一些模式:一些条目是“块特殊的”,其他条目是“字符特殊的”,一些是目录,这意味着您可以在下面找到更多文件(即
ls/dev/net/*
)。“特殊”文件后面的数字只是操作系统标识符,用于区分提到的文件。这一点的意义在于,连接到计算机的某些设备的输入和输出成为可能,就好像该设备是文件系统中的文件一样。这种“文件”抽象被用作输入和输出的通用模型。例如,/dev/tty就是tty-或终端设备。您试图从中读取的任何数据实际上都将从您用于在shell中键入的键盘中获取(在简单的情况下),并且您在shell中写入的任何内容都将在您正在键入的同一终端中可见/dev/null是另一个有趣的例子:您可以从中读取和写入数据,但它是一个虚构的东西,从来没有实际提供数据(只是指示和结束文件条件,并丢弃写入其中的任何数据)。您可以继续从/dev/random读取数据,它每次都会生成随机值。。。如果您需要随机数字或文件内容进行加密或进行某种统计工作,这将非常有用

2) 运行tty命令,并注意 终端的设备名称。现在使用 中的设备名称(/dev/pst/6) 命令cp/etc/passwd/dev/pts/6。 你观察到了什么

通过键入“tty”,您可以要求提供代表您的终端的设备

[SHELL-PROMPT] tty
/dev/pts/11
但是,我刚才说/dev/tty是同一事物的另一个名称,所以通常不需要使用“tty”程序来查找这个更具体的名称。不过,如果您为主机创建一对终端窗口,并在每个窗口中键入tty,您将看到每个shell都连接到不同的伪终端设备。不过,默认情况下,每个shell和从shell运行的程序也可以将自己的终端输入和输出设备称为/dev/tty。。。这是一个方便的上下文敏感名称。命令

cp /etc/passwd /dev/pts/6
…当您用tty程序真正报告的内容(例如,在我的情况下为11)替换6时,所做的操作与

cp /etc/passwd /dev/tty
…它只读取文件/etc/passwd的内容,并将其写在屏幕上。现在,问题是/etc/password对于普通人来说就像是一堆难以理解的垃圾——难怪你不能理解发生了什么。试试这个

echo "i said hello" > /tmp/hello.file
cp /tmp/hello.file /dev/tty
…您将看到如何将一些特定的、可识别的内容定向到新文件中(在本例中,将其放入tmp“临时”目录中(重新启动电脑时该文件将消失),然后将该文件内容复制回屏幕


(如果您登录了两个终端窗口,您甚至可以进入一个shell并将该文件复制到另一个shell报告的/dev/pts/NN设备,从而有效地向另一个窗口发送消息。您甚至可以绕过该文件并
echo'boo'>/dev/tty/NN
。只有在相同的用户名被记录时,您才有权执行此操作。)o两个窗口。)

你能解释一下你对这些问题的理解和不理解吗?问题有答案。只需按照上面提到的步骤进行操作。谢谢你的快速回答。在第一个问题上,我甚至不确定问题是什么,我应该将什么分为两类。在第二个问题上,当我按照上面提到的步骤进行操作时,我发现我输入了这么多我不懂的信息。非常感谢您的完美解释和您的时间。这非常有帮助。谢谢。