Unix / Linux - 快速指南


Unix - 入门

什么是Unix?

Unix操作系统是一组充当计算机和用户之间纽带的程序。

分配系统资源并协调计算机内部所有细节的计算机程序称为操作系统内核

用户通过称为shell 的程序与内核进行通信。shell 是一个命令行解释器;它翻译用户输入的命令并将其转换为内核可以理解的语言。

  • Unix 最初是由 AT&T 贝尔实验室的一群员工 Ken Thompson、Dennis Ritchie、Douglas McIlroy 和 Joe Ossanna 于 1969 年开发的。

  • 市场上有各种 Unix 变体。Solaris Unix、AIX、HP Unix 和 BSD 是一些示例。Linux 也是 Unix 的一种风格,可以免费获得。

  • 几个人可以同时使用一台Unix计算机;因此Unix被称为多用户系统。

  • 一个用户还可以同时运行多个程序;因此Unix是一个多任务环境。

Unix架构

这是 Unix 系统的基本框图 -

Unix架构

统一所有 Unix 版本的主要概念是以下四个基础知识 -

  • 内核- 内核是操作系统的核心。它与硬件和大多数任务交互,如内存管理、任务调度和文件管理。

  • Shell - shell 是处理您的请求的实用程序。当您在终端输入命令时,shell 会解释该命令并调用您想要的程序。shell 对所有命令使用标准语法。C Shell、Bourne Shell 和 Korn Shell 是最著名的 shell,可用于大多数 Unix 变体。

  • 命令和实用程序- 您可以在日常活动中使用各种命令和实用程序。cpmvcatgrep等是命令和实用程序的几个示例。有超过 250 个标准命令以及通过第 3 方软件提供的许多其他命令。所有命令都带有各种选项。

  • 文件和目录- Unix 的所有数据都组织成文件。然后所有文件都被组织到目录中。这些目录进一步组织成称为文件系统的树状结构。

系统启动

如果您有一台安装了 Unix 操作系统的计算机,那么您只需打开该系统即可使其运行。

一旦您打开系统,它就会开始启动,最后它会提示您登录系统,这是登录系统并将其用于您的日常活动的活动。

登录Unix

当您第一次连接到 Unix 系统时,您通常会看到如下提示 -

login:

登录

  • 准备好您的用户 ID(用户标识)和密码。如果您还没有这些,请联系您的系统管理员。

  • 在登录提示符处输入您的用户 ID,然后按ENTER。您的用户 ID区分大小写,因此请确保您完全按照系统管理员的指示输入。

  • 在密码提示处输入密码,然后按ENTER。您的密码也区分大小写。

  • 如果您提供正确的用户名和密码,则您将被允许进入系统。阅读屏幕上出现的信息和消息,如下所示。

login : amrood
amrood's password:
Last login: Sun Jun 14 09:32:32 2009 from 62.61.164.73
$

您将看到一个命令提示符(有时称为$提示符),您可以在其中键入所有命令。例如,要检查日历,您需要键入cal命令,如下所示 -

$ cal
     June 2009
Su Mo Tu We Th Fr Sa
    1  2  3  4  5  6
 7  8  9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30

$

更改密码

所有 Unix 系统都需要密码来帮助确保您的文件和数据属于您自己,并且系统本身不会受到黑客和破解者的攻击。以下是更改密码的步骤 -

步骤 1 - 首先,在命令提示符处输入密码,如下所示。

步骤 2 - 输入您当前使用的旧密码。

步骤 3 - 输入您的新密码。始终保持您的密码足够复杂,以便没人能猜到。但请确保您记住了。

步骤 4 - 您必须再次输入密码来验证密码。

$ passwd
Changing password for amrood
(current) Unix password:******
New UNIX password:*******
Retype new UNIX password:*******
passwd: all authentication tokens updated  successfully

$

注意- 我们在此处添加星号 (*) 只是为了显示您需要在系统中输入当前密码和新密码的位置。当您键入时,它不会显示任何字符。

列出目录和文件

Unix 中的所有数据都组织成文件。所有文件都组织到目录中。这些目录被组织成一个称为文件系统的树状结构。

您可以使用ls命令列出目录中可用的所有文件或目录。以下是使用带有-l选项的ls命令的示例。

$ ls -l
total 19621
drwxrwxr-x  2 amrood amrood      4096 Dec 25 09:59 uml
-rw-rw-r--  1 amrood amrood      5341 Dec 25 08:38 uml.jpg
drwxr-xr-x  2 amrood amrood      4096 Feb 15  2006 univ
drwxr-xr-x  2 root   root        4096 Dec  9  2007 urlspedia
-rw-r--r--  1 root   root      276480 Dec  9  2007 urlspedia.tar
drwxr-xr-x  8 root   root        4096 Nov 25  2007 usr
-rwxr-xr-x  1 root   root        3192 Nov 25  2007 webthumb.php
-rw-rw-r--  1 amrood amrood     20480 Nov 25  2007 webthumb.tar
-rw-rw-r--  1 amrood amrood      5654 Aug  9  2007 yourfile.mid
-rw-rw-r--  1 amrood amrood    166255 Aug  9  2007 yourfile.swf

$

这里以d.....开头的条目代表目录。例如,uml、univ 和 urlspedia 是目录,其余条目是文件。

你是谁?

当您登录系统时,您可能愿意知道:我是谁

找出“你是谁”的最简单方法是输入whoami命令 -

$ whoami
 amrood

$

在您的系统上尝试一下。此命令列出与当前登录关联的帐户名。您也可以尝试“我是谁”来获取有关您自己的信息。

谁登录了?

有时您可能有兴趣知道谁同时登录到计算机。

根据您希望了解其他用户的程度,可以使用三个命令来获取此信息:userswhow

$ users
 amrood bablu qadir

$ who
amrood ttyp0 Oct 8 14:10 (limbo)
bablu  ttyp2 Oct 4 09:08 (calliope)
qadir  ttyp4 Oct 8 12:09 (dent)

$

在您的系统上尝试使用w命令来检查输出。这列出了与登录系统的用户相关的信息。

注销

完成会话后,您需要退出系统。这是为了确保没有其他人访问您的文件。

注销

  • 只需在命令提示符下键入注销命令,系统就会清理所有内容并断开连接。

系统关闭

通过命令行正确关闭 Unix 系统的最一致的方法是使用以下命令之一 -

先生。 命令与说明
1

立即关闭系统

2

初始化0

使用预定义脚本关闭系统电源,以在关闭之前同步和清理系统

3

初始化6

通过完全关闭然后重新启动来重新启动系统

4

关机

通过关闭电源来关闭系统

5

重启

重新启动系统

6

关闭

关闭系统

您通常需要成为超级用户或 root(Unix 系统上权限最高的帐户)才能关闭系统。然而,在一些独立的或个人拥有的 Unix 机器上,管理用户(有时是普通用户)可以这样做。

Unix - 文件管理

在本章中,我们将详细讨论 Unix 中的文件管理。Unix 中的所有数据都组织成文件。所有文件都组织到目录中。这些目录被组织成一个称为文件系统的树状结构。

当您以某种方式使用 Unix 时,您大部分时间都在处理文件。本教程将帮助您了解如何创建和删除文件、复制和重命名文件、创建指向它们的链接等。

在 Unix 中,存在三种基本类型的文件 -

  • 普通文件- 普通文件是系统上包含数据、文本或程序指令的文件。在本教程中,您将了解如何使用普通文件。

  • 目录- 目录存储特殊文件和普通文件。对于熟悉 Windows 或 Mac OS 的用户来说,Unix 目录相当于文件夹。

  • 特殊文件- 一些特殊文件提供对硬件的访问,例如硬盘驱动器、CD-ROM 驱动器、调制解调器和以太网适配器。其他特殊文件类似于别名或快捷方式,使您能够使用不同的名称访问单个文件。

列出文件

要列出当前目录中存储的文件和目录,请使用以下命令 -

$ls

这是上述命令的示例输出 -

$ls

bin        hosts  lib     res.03
ch07       hw1    pub     test_results
ch07.bak   hw2    res.01  users
docs       hw3    res.02  work

命令ls支持-l选项,这将帮助您获取有关列出的文件的更多信息 -

$ls -l
total 1962188

drwxrwxr-x  2 amrood amrood      4096 Dec 25 09:59 uml
-rw-rw-r--  1 amrood amrood      5341 Dec 25 08:38 uml.jpg
drwxr-xr-x  2 amrood amrood      4096 Feb 15  2006 univ
drwxr-xr-x  2 root   root        4096 Dec  9  2007 urlspedia
-rw-r--r--  1 root   root      276480 Dec  9  2007 urlspedia.tar
drwxr-xr-x  8 root   root        4096 Nov 25  2007 usr
drwxr-xr-x  2    200    300      4096 Nov 25  2007 webthumb-1.01
-rwxr-xr-x  1 root   root        3192 Nov 25  2007 webthumb.php
-rw-rw-r--  1 amrood amrood     20480 Nov 25  2007 webthumb.tar
-rw-rw-r--  1 amrood amrood      5654 Aug  9  2007 yourfile.mid
-rw-rw-r--  1 amrood amrood    166255 Aug  9  2007 yourfile.swf
drwxr-xr-x 11 amrood amrood      4096 May 29  2007 zlib-1.2.3
$

以下是有关所有列出的列的信息 -

  • 第一列- 表示文件类型和文件的权限。以下是所有类型文件的描述。

  • 第二列- 表示文件或目录占用的内存块数。

  • 第三列- 代表文件的所有者。这是创建该文件的 Unix 用户。

  • 第四列- 代表所有者的组。每个 Unix 用户都会有一个关联的组。

  • 第五列- 表示文件大小(以字节为单位)。

  • 第六列- 表示上次创建或修改此文件的日期和时间。

  • 第七列- 表示文件或目录名称。

ls -l列表示例中,每个文件行都以d-l开头。这些字符指示列出的文件的类型。

先生。 前缀和描述
1

-

常规文件,例如 ASCII 文本文件、二进制可执行文件或硬链接。

2

块特殊文件。块输入/输出设备文件,例如物理硬盘驱动器。

3

C

字符特殊文件。原始输入/输出设备文件,例如物理硬盘驱动器。

4

d

包含其他文件和目录的列表的目录文件。

5

符号链接文件。任何常规文件的链接。

6

p

命名管道。进程间通信的机制。

7

s

用于进程间通信的套接字。

元字符

元字符在 Unix 中具有特殊含义。例如,*? 是元字符。我们使用*来匹配 0 个或多个字符,问号 ( ? ) 匹配单个字符。

例如 -

$ls ch*.doc

显示名称以ch开头并以.doc结尾的所有文件-

ch01-1.doc   ch010.doc  ch02.doc    ch03-2.doc 
ch04-1.doc   ch040.doc  ch05.doc    ch06-2.doc
ch01-2.doc ch02-1.doc c

在这里,*用作与任何字符匹配的元字符。如果您想显示所有以.doc结尾的文件,那么您可以使用以下命令 -

$ls *.doc

隐藏文件

不可见文件是第一个字符是点或句点字符 (.) 的文件。Unix 程序(包括 shell)使用大部分这些文件来存储配置信息。

隐藏文件的一些常见示例包括以下文件 -

  • .profile - Bourne shell ( sh) 初始化脚本

  • .kshrc - Korn shell ( ksh) 初始化脚本

  • .cshrc - C shell (csh) 初始化脚本

  • .rhosts - 远程 shell 配置文件

要列出不可见文件,请为ls指定-a选项-

$ ls -a

.         .profile       docs     lib     test_results
..        .rhosts        hosts    pub     users
.emacs    bin            hw1      res.01  work
.exrc     ch07           hw2      res.02
.kshrc    ch07.bak       hw3      res.03
$
  • 单点 (.) - 这代表当前目录。

  • 双点 (..) - 这代表父目录。

创建文件

您可以使用vi编辑器在任何 Unix 系统上创建普通文件。您只需给出以下命令 -

$ vi filename

上面的命令将打开一个具有给定文件名的文件。现在,按i键进入编辑模式。进入编辑模式后,您可以开始在文件中写入内容,如以下程序所示 -

This is unix file....I created it for the first time.....
I'm going to save this content in this file.

完成该程序后,请按照以下步骤操作 -

  • 按esc键退出编辑模式。

  • 同时按下两个键Shift + ZZ可完全退出文件。

现在,您将在当前目录中创建一个名为 filename的文件。

$ vi filename
$

编辑文件

您可以使用vi编辑器编辑现有文件。我们将简短讨论如何打开现有文件 -

$ vi filename

文件打开后,您可以按i键进入编辑模式,然后可以继续编辑文件。如果您想在文件内移动,那么首先您需要按Esc键退出编辑模式。之后,您可以使用以下键在文件内移动 -

  • l键移动到右侧。

  • h键移动到左侧。

  • k键在文件中向上移动。

  • j键在文件中向下移动。

因此,使用上述键,您可以将光标定位在您想要编辑的任何位置。定位后,您可以使用i键进入编辑模式。完成文件编辑后,按Esc 键,最后同时按两个键Shift + ZZ即可完全退出文件。

显示文件的内容

您可以使用cat命令查看文件的内容。以下是一个简单的示例,用于查看上面创建的文件的内容 -

$ cat filename
This is unix file....I created it for the first time.....
I'm going to save this content in this file.
$

您可以使用-b选项和cat命令来显示行号,如下所示 -

$ cat -b filename
1   This is unix file....I created it for the first time.....
2   I'm going to save this content in this file.
$

计算文件中的字数

您可以使用wc命令来获取文件中包含的总行数、单词数和字符数。以下是一个简单的示例,用于查看上面创建的文件的信息 -

$ wc filename
2  19 103 filename
$

这是所有四列的详细信息 -

  • 第一列- 表示文件中的总行数。

  • 第二列- 表示文件中的总字数。

  • 第三列- 表示文件中的总字节数。这是文件的实际大小。

  • 第四列- 表示文件名。

您可以提供多个文件并一次获取有关这些文件的信息。以下是简单的语法 -

$ wc filename1 filename2 filename3

复制文件

要制作文件的副本,请使用cp命令。该命令的基本语法是 -

$ cp source_file destination_file

以下是创建现有文件filename的副本的示例。

$ cp filename copyfile
$

现在,您将在当前目录中找到另一个文件副本文件。该文件将与原始文件filename完全相同。

重命名文件

要更改文件名,请使用mv命令。以下是基本语法 -

$ mv old_file new_file

以下程序将现有文件filename重命名为newfile

$ mv filename newfile
$

mv命令会将现有文件完全移动到新文件中。在这种情况下,您将在当前目录中仅找到newfile 。

删除文件

要删除现有文件,请使用rm命令。以下是基本语法 -

$ rm filename

注意- 文件可能包含有用的信息。始终建议您在使用此删除命令时要小心。最好将-i选项与rm命令一起使用。

以下示例展示了如何完全删除现有文件filename

$ rm filename
$

您可以使用下面给出的命令一次删除多个文件 -

$ rm filename1 filename2 filename3
$

标准 Unix 流

正常情况下,每个 Unix 程序在启动时都会为其打开三个流(文件) -

  • stdin - 这被称为标准输入,关联的文件描述符是 0。这也表示为 STDIN。Unix 程序将从 STDIN 读取默认输入。

  • stdout - 这称为标准输出,关联的文件描述符为 1。这也表示为 STDOUT。Unix 程序会将默认输出写入 STDOUT

  • stderr - 这被称为标准错误,关联的文件描述符是 2。这也表示为 STDERR。Unix 程序会将所有错误消息写入 STDERR。

Unix - 目录管理

在本章中,我们将详细讨论 Unix 中的目录管理。

目录是一个文件,其唯一作用是存储文件名和相关信息。所有文件,无论是普通文件、特殊文件还是目录文件,都包含在目录中。

Unix 使用层次结构来组织文件和目录。这种结构通常称为目录树。该树有一个根节点,即斜杠字符 ( / ),所有其他目录都包含在其下方。

主目录

您首次登录时所在的目录称为您的主目录。

您将在您的主目录和子目录中完成大部分工作,您将创建这些目录和子目录来组织文件。

您可以随时使用以下命令进入您的主目录 -

$cd ~
$

这里~表示主目录。假设您必须进入任何其他用户的主目录,请使用以下命令 -

$cd ~username
$

要进入最后一个目录,您可以使用以下命令 -

$cd -
$

绝对/相对路径名

目录按层次结构排列,根 (/) 位于顶部。任何文件在层次结构中的位置都由其路径名描述。

路径名的元素由 / 分隔。如果相对于 root 进行描述,则路径名是绝对路径名,因此绝对路径名始终以 / 开头。

以下是绝对文件名的一些示例。

/etc/passwd
/users/sjones/chem/notes
/dev/rdsk/Os3

路径名也可以相对于当前工作目录。相对路径名绝不能以 / 开头。相对于用户 amrood 的主目录,某些路径名可能如下所示 -

chem/notes
personal/res

要随时确定您在文件系统层次结构中的位置,请输入命令pwd来打印当前工作目录 -

$pwd
/user0/home/amrood

$

列出目录

要列出目录中的文件,您可以使用以下语法 -

$ls dirname

以下是列出/usr/local目录中包含的所有文件的示例-

$ls /usr/local

X11       bin          gimp       jikes       sbin
ace       doc          include    lib         share
atalk     etc          info       man         ami

创建目录

我们现在将了解如何创建目录。目录是通过以下命令创建的 -

$mkdir dirname

这里,directory 是要创建的目录的绝对或相对路径名。例如,命令 -

$mkdir mydir
$

在当前目录中创建目录mydir 。这是另一个例子 -

$mkdir /tmp/test-dir
$

此命令在/tmp目录中创建目录test-dir如果mkdir命令成功创建请求的目录,则不会产生任何输出。

如果您在命令行上指定多个目录,则mkdir会创建每个目录。例如, -

$mkdir docs pub
$

在当前目录下创建目录 docs 和 pub。

创建父目录

我们现在将了解如何创建父目录。有时,当您要创建目录时,其父目录或多个目录可能不存在。在这种情况下,mkdir会发出如下错误消息 -

$mkdir /tmp/amrood/test
mkdir: Failed to make directory "/tmp/amrood/test"; 
No such file or directory
$

在这种情况下,您可以为mkdir命令指定-p选项。它为您创建所有必需的目录。例如 -

$mkdir -p /tmp/amrood/test
$

上面的命令创建所有必需的父目录。

删除目录

可以使用rmdir命令删除目录,如下所示 -

$rmdir dirname
$

注意- 要删除目录,请确保它是空的,这意味着该目录内不应有任何文件或子目录。

您可以一次删除多个目录,如下所示 -

$rmdir dirname1 dirname2 dirname3
$

上述命令删除目录 dirname1、dirname2 和 dirname3(如果它们为空)。如果成功,rmdir命令不会产生任何输出。

更改目录

您可以使用cd命令执行更多操作,而不仅仅是更改主目录。您可以使用它通过指定有效的绝对或相对路径来更改到任何目录。语法如下 -

$cd dirname
$

这里,dirname是您要更改到的目录的名称。例如,命令 -

$cd /usr/local/bin
$

更改目录/usr/local/bin。从此目录中,您可以使用以下相对路径cd到目录/usr/home/amrood -

$cd ../../home/amrood
$

重命名目录

mv(移动)命令也可用于重命名目录。语法如下 -

$mv olddir newdir
$

您可以将目录mydir重命名为yourdir,如下所示 -

$mv mydir yourdir
$

目录。(点)和..(点点)

文件名 . (点)代表当前工作目录;文件名..(点点)代表当前工作目录的上一级目录,通常称为父目录。

如果我们输入命令来显示当前工作目录/文件的列表,并使用 -a选项列出所有文件并使用-l 选项提供长列表,我们将收到以下结果。

$ls -la
drwxrwxr-x    4    teacher   class   2048  Jul 16 17.56 .
drwxr-xr-x    60   root              1536  Jul 13 14:18 ..
----------    1    teacher   class   4210  May 1 08:27 .profile
-rwxr-xr-x    1    teacher   class   1948  May 12 13:42 memo
$

Unix - 文件权限/访问模式

在本章中,我们将详细讨论 Unix 中的文件权限和访问模式。文件所有权是 Unix 的一个重要组成部分,它提供了一种安全的文件存储方法。Unix 中的每个文件都具有以下属性 -

  • 所有者权限- 所有者的权限决定文件所有者可以对文件执行哪些操作。

  • 组权限- 组的权限确定作为文件所属组的成员的用户可以对文件执行哪些操作。

  • 其他(世界)权限- 其他人的权限指示所有其他用户可以对文件执行什么操作。

权限指标

使用ls -l命令时,它显示与文件权限相关的各种信息,如下所示 -

$ls -l /home/amrood
-rwxr-xr--  1 amrood   users 1024  Nov 2 00:10  myfile
drwxr-xr--- 1 amrood   users 1024  Nov 2 00:10  mydir

这里,第一列代表不同的访问模式,即与文件或目录相关联的权限。

权限分为三组,组中的每个位置表示特定权限,按以下顺序:读 (r)、写 (w)、执行 (x) -

  • 前三个字符 (2-4) 代表文件所有者的权限。例如-rwxr-xr--表示所有者拥有读(r)、写(w)和执行(x)权限。

  • 第二组三个字符 (5-7) 包含文件所属组的权限。例如-rwxr-xr--表示该组有读(r)和执行(x)权限,但没有写权限。

  • 最后一组三个字符 (8-10) 代表其他人的权限。例如,-rwxr-xr--表示有只读(r)权限。

文件访问模式

文件的权限是Unix系统安全的第一道防线。Unix 权限的基本构建块是读取写入执行权限,如下所述 -

授予读取(即查看)文件内容的能力。

授予修改或删除文件内容的能力。

执行

具有执行权限的用户可以将文件作为程序运行。

目录访问模式

目录访问模式的列出和组织方式与任何其他文件相同。有一些差异需要提及 -

访问目录意味着用户可以读取其中的内容。用户可以查看目录内的文件名。

访问权限意味着用户可以在目录中添加或删除文件。

执行

执行目录并没有真正的意义,因此可以将其视为遍历权限。

用户必须具有bin目录的执行访问权限才能执行lscd命令。

更改权限

要更改文件或目录权限,请使用chmod(更改模式)命令。有两种使用 chmod 的方法——符号模式和绝对模式。

在符号模式下使用 chmod

对于初学者来说,修改文件或目录权限的最简单方法是使用符号模式。对于符号权限,您可以使用下表中的运算符添加、删除或指定所需的权限集。

先生。 Chmod 运算符和说明
1

+

将指定的权限添加到文件或目录。

2

-

从文件或目录中删除指定的权限。

3

=

设置指定的权限。

这是使用testfile 的示例。在测试文件上运行ls -1显示该文件的权限如下 -

$ls -l testfile
-rwxrwxr--  1 amrood   users 1024  Nov 2 00:10  testfile

然后在测试文件上运行上表中的每个示例chmod命令,然后运行​​ls –l,这样您就可以看到权限更改 -

$chmod o+wx testfile
$ls -l testfile
-rwxrwxrwx  1 amrood   users 1024  Nov 2 00:10  testfile
$chmod u-x testfile
$ls -l testfile
-rw-rwxrwx  1 amrood   users 1024  Nov 2 00:10  testfile
$chmod g = rx testfile
$ls -l testfile
-rw-r-xrwx  1 amrood   users 1024  Nov 2 00:10  testfile

以下是如何将这些命令组合在一行上 -

$chmod o+wx,u-x,g = rx testfile
$ls -l testfile
-rw-r-xrwx  1 amrood   users 1024  Nov 2 00:10  testfile

使用具有绝对权限的 chmod

使用 chmod 命令修改权限的第二种方法是使用数字来指定文件的每组权限。

每个权限都分配有一个值,如下表所示,每组权限的总和为该组提供了一个编号。

数字 八进制权限表示 参考号
0 没有许可 ---
1 执行权限 - X
2 写权限 -w-
3 执行和写入权限:1(执行)+2(写入)= 3 -wx
4 读取权限 r--
5 读取和执行权限:4(读取)+ 1(执行)= 5 接收
6 读写权限:4(读)+2(写)=6 RW-
7 所有权限:4(读)+ 2(写)+ 1(执行)= 7 读写

这是使用测试文件的示例。在测试文件上运行ls -1显示该文件的权限如下 -

$ls -l testfile
-rwxrwxr--  1 amrood   users 1024  Nov 2 00:10  testfile

然后在测试文件上运行上表中的每个示例chmod命令,然后运行​​ls –l,这样您就可以看到权限更改 -

$ chmod 755 testfile
$ls -l testfile
-rwxr-xr-x  1 amrood   users 1024  Nov 2 00:10  testfile
$chmod 743 testfile
$ls -l testfile
-rwxr---wx  1 amrood   users 1024  Nov 2 00:10  testfile
$chmod 043 testfile
$ls -l testfile
----r---wx  1 amrood   users 1024  Nov 2 00:10  testfile

更改所有者和组

在 Unix 上创建帐户时,它会为每个用户分配一个所有者 ID和一个组 ID。上述所有权限也是根据所有者和组分配的。

有两个命令可用于更改所有者和文件组 -

  • chown - chown命令代表“更改所有者”,用于更改文件的所有者。

  • chgrp - chgrp命令代表“更改组”,用于更改文件的组。

变更所有权

chown命令更改文件的所有权。基本语法如下 -

$ chown user filelist

user 的值可以是系统上用户的名称,也可以是系统上用户的用户 ID (uid) 。

以下示例将帮助您理解这个概念 -

$ chown amrood testfile
$

将给定文件的所有者更改为用户amrood

注意- 超级用户 root 具有不受限制的能力来更改任何文件的所有权,但普通用户只能更改他们拥有的那些文件的所有权。

更改组所有权

chgrp命令更改文件的组所有权。基本语法如下 -

$ chgrp group filelist

group 的值可以是系统上组的名称或系统上组的组 ID (GID) 。

以下示例可以帮助您理解这个概念 -

$ chgrp special testfile
$

将给定文件的组更改为特殊组。

SUID和SGID文件权限

通常,当执行命令时,必须以特殊权限执行才能完成其任务。

例如,当您使用passwd命令更改密码时,您的新密码将存储在文件/etc/shadow中。

作为普通用户,出于安全原因,您没有对此文件的读取写入权限,但是当您更改密码时,您需要具有对此文件的写入权限。这意味着passwd程序必须授予您额外的权限,以便您可以写入文件/etc/shadow

通过称为设置用户 ID (SUID)设置组 ID (SGID)位的机制向程序授予附加权限。

当您执行启用了 SUID 位的程序时,您将继承该程序所有者的权限。未设置 SUID 位的程序将以启动该程序的用户的权限运行。

SGID 也是如此。通常,程序会使用您的组权限执行,但您的组将仅针对该程序更改为该程序的组所有者。

如果权限可用,SUID 和 SGID 位将显示为字母“s” 。SUID “s”位将位于所有者执行权限通常所在的权限位中。

例如,命令 -

$ ls -l /usr/bin/passwd
-r-sr-xr-x  1   root   bin  19031 Feb 7 13:47  /usr/bin/passwd*
$

显示 SUID 位已设置并且该命令由 root 拥有。执行位置中的大写字母S而不是小写s表示执行位未设置。

如果在目录上启用了粘滞位,则只有当您是以下用户之一时才能删除文件 -

  • 粘性目录的所有者
  • 被删除文件的所有者
  • 超级用户,root

要为任何目录设置 SUID 和 SGID 位,请尝试以下命令 -

$ chmod ug+s dirname
$ ls -l
drwsr-sr-x 2 root root  4096 Jun 19 06:45 dirname
$

Unix - 环境

在本章中,我们将详细讨论 Unix 环境。一个重要的 Unix 概念是环境,它是由环境变量定义的。有些是由系统设置的,有些是由您设置的,还有一些是由 shell 或加载另一个程序的任何程序设置的。

变量是我们为其赋值的字符串。分配的值可以是数字、文本、文件名、设备或任何其他类型的数据。

例如,首先我们设置一个变量 TEST,然后使用echo命令访问它的值-

$TEST="Unix Programming"
$echo $TEST

它产生以下结果。

Unix Programming

请注意,环境变量的设置不使用$符号,但在访问它们时我们使用 $ 符号作为前缀。这些变量将保留它们的值,直到我们退出 shell。

当您登录系统时,shell 会经历一个称为初始化的阶段来设置环境。这通常是一个两步过程,涉及 shell 读取以下文件 -

  • /etc/配置文件
  • 轮廓

过程如下 -

  • shell 检查文件/etc/profile是否存在。

  • 如果存在,shell 会读取它。否则,将跳过该文件。不显示错误消息。

  • shell 检查文件.profile是否存在于您的主目录中。您的主目录是您登录后开始的目录。

  • 如果存在,shell 会读取它;否则,shell 会跳过它。不显示错误消息。

一旦读取了这两个文件,shell 就会显示一个提示 -

$

这是您可以输入命令以执行命令的提示。

注意- 此处详细介绍的 shell 初始化过程适用于所有Bourne类型 shell,但bashksh使用一些附加文件。

.profile 文件

文件/etc/profile由 Unix 机器的系统管理员维护,包含系统上所有用户所需的 shell 初始化信息。

文件.profile由您控制。您可以根据需要向此文件添加任意数量的 shell 自定义信息。您需要配置的最小信息集包括 -

  • 您正在使用的终端类型。
  • 命令所在的目录列表。
  • 影响终端外观的变量列表。

您可以检查主目录中可用的.profile 。使用 vi 编辑器打开它并检查为您的环境设置的所有变量。

设置终端类型

通常,您使用的终端类型是由登录getty程序自动配置的。有时,自动配置过程会错误地猜测您的终端。

如果您的终端设置不正确,命令的输出可能看起来很奇怪,或者您可能无法与 shell 正确交互。

为了确保情况并非如此,大多数用户通过以下方式将其终端设置为最低公分母 -

$TERM=vt100
$

设置路径

当您在命令提示符下键入任何命令时,shell 必须先找到该命令,然后才能执行该命令。

PATH 变量指定 shell 应在其中查找命令的位置。通常 Path 变量设置如下 -

$PATH=/bin:/usr/bin
$

此处,由冒号字符(:)分隔的每个单独条目都是目录。如果您请求 shell 执行命令,但它无法在 PATH 变量中给定的任何目录中找到该命令,则会出现类似于以下内容的消息 -

$hello
hello: not found
$

PS1 和 PS2 等变量将在下一节中讨论。

PS1 和 PS2 变量

shell 作为命令提示符显示的字符存储在变量 PS1 中。您可以将此变量更改为您想要的任何内容。一旦你改变它,它就会被 shell 从那时起使用。

例如,如果您发出命令 -

$PS1='=>'
=>
=>
=>

您的提示符将变为 =>。要设置PS1的值以使其显示工作目录,请发出命令 -

=>PS1="[\u@\h \w]\$"
[root@ip-72-167-112-17 /var/www/tutorialspoint/unix]$
[root@ip-72-167-112-17 /var/www/tutorialspoint/unix]$

该命令的结果是提示符显示用户的用户名、机器的名称(主机名)和工作目录。

有相当多的转义序列可以用作 PS1 的值参数;尝试将自己限制在最关键的内容上,这样提示就不会淹没您的信息。

先生。 转义序列和描述
1

\t

当前时间,表示为 HH:MM:SS

2

\d

当前日期,表示为工作日月日

3

\n

新队

4

\s

当前的shell环境

5

\W

工作目录

6

\w

工作目录的完整路径

7

\u

当前用户的用户名

8

\H

当前机器的主机名

9

\#

当前命令的命令号。输入新命令时增加

10

\$

如果有效UID为0(即以root身份登录),则以#字符结束提示符;否则,使用 $ 符号

您可以在每次登录时自行进行更改,也可以通过将更改添加到.profile文件来在 PS1 中自动进行更改。

当您发出不完整的命令时,shell 将显示辅助提示符并等待您完成该命令并再次按Enter 键

默认的辅助提示符是>(大于号),但可以通过重新定义PS2 shell 变量来更改 -

以下是使用默认辅助提示的示例 -

$ echo "this is a
> test"
this is a
test
$

下面给出的示例使用自定义提示重新定义了 PS2 -

$ PS2="secondary prompt->"
$ echo "this is a
secondary prompt->test"
this is a
test
$

环境变量

以下是重要环境变量的部分列表。这些变量的设置和访问如下所述 -

先生。 变量和描述
1

展示

包含X11程序默认使用的显示器标识符。

2

指示当前用户的主目录:cd内置命令的默认参数。

3

IFS

表示解析器在扩展后用于分词的内部字段分隔符。

4

兰格

LANG 扩展到默认系统区域设置;LC_ALL 可用于覆盖它。例如,如果其值为pt_BR,则语言设置为(巴西)葡萄牙语,区域设置为巴西。

5

LD_LIBRARY_PATH

具有动态链接器的 Unix 系统包含一个以冒号分隔的目录列表,在 exec 之后构建进程映像时,动态链接器应在搜索任何其他目录之前搜索共享对象。

6

小路

指示命令的搜索路径。它是一个以冒号分隔的目录列表,shell 在其中查找命令。

7

残疾人士

指示由 cd 命令设置的当前工作目录。

8

随机的

每次引用时生成 0 到 32,767 之间的随机整数。

9

SHLVL

每次启动 bash 实例时加一。该变量对于确定内置 exit 命令是否结束当前会话很有用。

10

学期

指显示类型。

11

泰兹

指时区。它可以采用 GMT、AST 等值。

12

用户识别码

扩展为当前用户的数字用户 ID,在 shell 启动时初始化。

以下是显示一些环境变量的示例 -

$ echo $HOME
/root
]$ echo $DISPLAY

$ echo $TERM
xterm
$ echo $PATH
/usr/local/bin:/bin:/usr/bin:/home/amrood/bin:/usr/local/bin
$

Unix 基本实用程序 - 打印、电子邮件

在本章中,我们将详细讨论 Unix 的基本实用程序打印和电子邮件。到目前为止,我们已经尝试了解 Unix 操作系统及其基本命令的性质。在本章中,我们将学习一些可以在日常生活中使用的重要 Unix 实用程序。

打印文件

在 Unix 系统上打印文件之前,您可能需要重新格式化它以调整页边距、突出显示某些单词等。大多数文件无需重新格式化即可打印,但原始打印输出可能没有那么吸引人。

Unix 的许多版本都包含两个强大的文本格式化程序:nrofftroff

pr 命令

pr命令对终端屏幕上或打印机上的文件进行较小的格式化。例如,如果文件中有很长的名称列表,您可以在屏幕上将其格式化为两列或更多列。

以下是pr命令的语法-

pr option(s) filename(s)

pr仅在屏幕或打印副本上更改文件格式;它不会修改原始文件。下表列出了一些pr选项 -

先生。 选项和说明
1

-k

产生k列输出

2

-d

输出双倍行距(并非在所有pr版本上)

3

-h“标头”

将下一项作为报告标题

4

-t

消除页眉和上/下边距的打印

5

-l PAGE_LENGTH

将页长度设置为 PAGE_LENGTH (66) 行。默认文本行数为 56

6

-o 边距

用 MARGIN(零)空格偏移每行

7

-w 页面宽度

仅针对多文本列输出将页面宽度设置为 PAGE_WIDTH (72) 个字符

在使用pr之前,以下是名为 food.txt 的示例文件的内容。

$cat food
Sweet Tooth
Bangkok Wok
Mandalay
Afghani Cuisine
Isle of Java
Big Apple Deli
Sushi and Sashimi
Tio Pepe's Peppers
........
$

让我们使用pr命令制作一个标题为“餐馆”的两列报告-

$pr -2 -h "Restaurants" food
Nov  7  9:58 1997  Restaurants   Page 1

Sweet Tooth              Isle of Java
Bangkok Wok              Big Apple Deli
Mandalay                 Sushi and Sashimi
Afghani Cuisine          Tio Pepe's Peppers
........
$

lp 和 lpr 命令

命令lplpr将文件打印到纸上而不是屏幕显示。一旦准备好使用pr命令进行格式化,您就可以使用这些命令中的任何一个在连接到计算机的打印机上打印文件。

您的系统管理员可能已在您的站点设置了默认打印机。要在默认打印机上打印名为food的文件,请使用lplpr命令,如下例所示 -

$lp food
request id is laserp-525  (1 file)
$

lp命令显示一个 ID,可用于取消打印作业或检查其状态。

  • 如果使用lp命令,则可以使用 -n Num选项来打印 Num 份数。与命令lpr一起,您可以使用 -Num实现相同的效果。

  • 如果有多个打印机连接到共享网络,那么您可以使用 -d打印机选项和 lp 命令来选择打印机,出于同样的目的,您可以使用 -P打印机选项和 lpr 命令。这里的打印机是打印机名称。

lpstat 和 lpq 命令

lpstat命令显示打印机队列中的内容:请求 ID、所有者、文件大小、发送作业进行打印的时间以及请求的状态。

如果您想查看除您自己的输出请求之外的所有输出请求,请使用lpstat -o 。请求按打印顺序显示 -

$lpstat -o
laserp-573  john  128865  Nov 7  11:27  on laserp
laserp-574  grace  82744  Nov 7  11:28
laserp-575  john   23347  Nov 7  11:35
$

lpq提供的信息与lpstat -o略有不同-

$lpq
laserp is ready and printing
Rank   Owner      Job  Files                  Total Size
active john       573  report.ps              128865 bytes
1st    grace      574  ch03.ps ch04.ps        82744 bytes
2nd    john       575  standard input         23347 bytes
$

这里第一行显示打印机状态。如果打印机被禁用或纸张用完,您可能会在第一行看到不同的消息。

cancel 和 lprm 命令

cancel命令终止来自lp 命令的打印请求。lprm命令终止所有lpr 请求。您可以指定请求的 ID(由 lp 或 lpq 显示)或打印机的名称。

$cancel laserp-575
request "laserp-575" cancelled
$

要取消当前正在打印的任何请求,无论其 ID 如何,只需输入取消和打印机名称 -

$cancel laserp
request "laserp-573" cancelled
$

如果活动作业属于您,则lprm命令将取消该作业。否则,您可以将职位编号作为参数,或使用破折号(-)删除所有职位 -

$lprm 575
dfA575diamond dequeued
cfA575diamond dequeued
$

lprm命令告诉您从打印机队列中删除的实际文件名。

发送电子邮件

您可以使用 Unix mail 命令发送和接收邮件。这是发送电子邮件的语法 -

$mail [-s subject] [-c cc-addr] [-b bcc-addr] to-addr

以下是与邮件命令相关的重要选项 -s

先生。 选项和说明
1

-s

在命令行上指定主题。

2

-C

将副本发送到用户列表。列表应该是逗号分隔的名称列表。

3

-b

将密件抄送至列表。列表应该是逗号分隔的名称列表。

以下是向 admin@yahoo.com 发送测试消息的示例。

$mail -s "Test Message" admin@yahoo.com 

然后,您需要输入消息,并在行首输入“control-D” 。要停止,只需键入点(.),如下所示 -

Hi,

This is a test
.
Cc: 

您可以使用重定向 < 运算符发送完整的文件,如下所示 -

$mail -s "Report 05/06/07" admin@yahoo.com < demo.txt 

要在 Unix 系统上检查传入的电子邮件,您只需输入电子邮件,如下所示 -

$mail
no email

Unix - 管道和过滤器

在本章中,我们将详细讨论 Unix 中的管道和过滤器。您可以将两个命令连接在一起,以便一个程序的输出成为下一个程序的输入。以这种方式连接的两个或多个命令形成一个管道。

要创建管道,请在命令行上的两个命令之间放置一个竖线 ( | )。

当一个程序从另一个程序获取输入时,它会对该输入执行某些操作,并将结果写入标准输出。它被称为过滤

grep 命令

grep 命令在一个或多个文件中搜索具有特定模式的行。语法是 -

$grep pattern file(s)

“grep”这个名字来自 ed(Unix 行编辑器)命令g/re/p,意思是“全局搜索正则表达式并打印包含它的所有行”。

正则表达式是一些纯文本(例如单词)和/或用于模式匹配的特殊字符。

grep 最简单的用法是查找由单个单词组成的模式。它可以在管道中使用,以便仅将输入文件中包含给定字符串的那些行发送到标准输出。如果你没有给 grep 一个要读取的文件名,它会读取它的标准输入;这就是所有过滤器程序的工作方式 -

$ls -l | grep "Aug"
-rw-rw-rw-   1 john  doc     11008 Aug  6 14:10 ch02
-rw-rw-rw-   1 john  doc      8515 Aug  6 15:30 ch07
-rw-rw-r--   1 john  doc      2488 Aug 15 10:51 intro
-rw-rw-r--   1 carol doc      1605 Aug 23 07:35 macros
$

您可以将多种选项与grep命令一起使用 -

先生。 选项和说明
1

-v

打印所有与模式不匹配的行。

2

-n

打印匹配的行及其行号。

3

-l

仅打印具有匹配行的文件名(字母“l”)

4

-C

仅打印匹配行的计数。

5

-我

匹配大写或小写。

现在让我们使用一个正则表达式,告诉 grep 查找包含“carol”的行,后跟零或其他在正则表达式中缩写为“.*”的字符),然后是“Aug”。 -

在这里,我们使用-i选项进行不区分大小写的搜索 -

$ls -l | grep -i "carol.*aug"
-rw-rw-r--   1 carol doc      1605 Aug 23 07:35 macros
$

排序命令

sort命令按字母或数字顺序排列文本行。以下示例对食物文件中的行进行排序 -

$sort food
Afghani Cuisine
Bangkok Wok
Big Apple Deli
Isle of Java

Mandalay
Sushi and Sashimi
Sweet Tooth
Tio Pepe's Peppers
$

sort命令默认按字母顺序排列文本行。有很多选项可以控制排序 -

先生。 描述
1

-n

按数字排序(例如:10 将排序在 2 之后),忽略空格和制表符。

2

-r

反转排序顺序。

3

-F

将大写和小写放在一起排序。

4

+x

排序时忽略前x 个字段。

两个以上的命令可以链接到一个管道中。以之前使用grep 的管道为例,我们可以进一步按大小顺序对 8 月份修改的文件进行排序。

以下管道由命令lsgrepsort组成-

$ls -l | grep "Aug" | sort +4n
-rw-rw-r--  1 carol doc      1605 Aug 23 07:35 macros
-rw-rw-r--  1 john  doc      2488 Aug 15 10:51 intro
-rw-rw-rw-  1 john  doc      8515 Aug  6 15:30 ch07
-rw-rw-rw-  1 john  doc     11008 Aug  6 14:10 ch02
$