UNIX tty命令和文件命令?

时间:2010-09-15 11:34:08

标签: command-line unix

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

1)查找文件命令的手册页,然后在/ dev目录中的所有文件上使用它。您可以将这些文件分为两类吗?

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

1 个答案:

答案 0 :(得分:10)

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

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

即可
man file

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

file /dev/*

...将执行问题,并使用/ dev /子目录中的文件列表调用文件。该列表实际上是由您键入的“shell”程序准备的,然后执行文件程序并将其传递给列表。 file然后输出文件的一些描述。在我的计算机上,以及计算机上[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的键盘中获取的(在简单的情况下),您在那里写的任何内容都将在您输入的同一终端中显示。 / 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程序真正报告的东西替换6(例如我的情况下是11),做同样的事情......

cp /etc/passwd /dev/tty

...它只是读取文件/ etc / passwd的内容并将它们写在屏幕上。现在,问题是/ etc / password看起来像普通人看起来很难听懂的垃圾 - 难怪你无法弄清楚发生了什么。试试这个......

echo "i said hello" > /tmp/hello.file
cp /tmp/hello.file /dev/tty

...您将看到如何将一些特定的,可识别的内容导入新文件(在这种情况下将其放入tmp“临时”目录(当您重新启动PC时文件将消失),然后复制该文件内容返回到您的屏幕。

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