Linux基础(1)
来源:互联网 发布:java编程兵书 pdf 编辑:程序博客网 时间:2024/05/17 03:40
使用shell之前的第一个命令:
$ echo $SHELL
/bin/bash
如果上面的命令行报错或者不会类似地响应我们的示例,那么您可能正在运行一个不同于 bash 的 shell。
使用shell最重要的命令:cd,看看能不能知道下面的shell命令的意思?
$ cd / #跳转到根目录下
$ pwd #显示到当前目录
$ cd .. #跳转到上前目录的上一层目录
$ cd ../usr/share/zoneinfo #相对路径的跳转
$ cd ../bin/../bin #等价于$ cd ../bin
$ cd #没有参数,cd 将转到主目录
$ vim ~/myfile.txt #打开一个主目录下的文件
$vim ~fred/fredsfile.txt #打开其他用户主目录下的文件
使用shell最重要的命令:ls, 看看能不能知道下面的shell命令的意思?
$ cd /usr
$ ls
X11R6 doc i686-pc-linux-gnu lib man sbin ssl
bin gentoo-x86 include libexec portage share tmp
distfiles i686-linux info local portage.old src
$ ls -a
. bin gentoo-x86 include libexec portage share tmp
.. distfiles i686-linux info local portage.old src
X11R6 doc i686-pc-linux-gnu lib man sbin ssl
$ ls -l /usr
drwxr-xr-x 7 root root 168 Nov 24 14:02 X11R6
drwxr-xr-x 2 root root 14576 Dec 27 08:56 bin
drwxr-xr-x 2 root root 8856 Dec 26 12:47 distfiles
lrwxrwxrwx 1 root root 9 Dec 22 20:57 doc -> share/doc
drwxr-xr-x 62 root root 1856 Dec 27 15:54 gentoo-x86
drwxr-xr-x 4 root root 152 Dec 12 23:10 i686-linux
drwxr-xr-x 4 root root 96 Nov 24 13:17 i686-pc-linux-gnu
drwxr-xr-x 54 root root 5992 Dec 24 22:30 include
lrwxrwxrwx 1 root root 10 Dec 22 20:57 info -> share/info
drwxr-xr-x 28 root root 13552 Dec 26 00:31 lib
drwxr-xr-x 3 root root 72 Nov 25 00:34 libexec
drwxr-xr-x 8 root root 240 Dec 22 20:57 local
lrwxrwxrwx 1 root root 9 Dec 22 20:57 man -> share/man
lrwxrwxrwx 1 root root 11 Dec 8 07:59 portage -> gentoo-x86
drwxr-xr-x 60 root root 1864 Dec 8 07:55 portage.old
drwxr-xr-x 3 root root 3096 Dec 22 20:57 sbin
drwxr-xr-x 46 root root 1144 Dec 24 15:32 share
drwxr-xr-x 8 root root 328 Dec 26 00:07 src
drwxr-xr-x 6 root root 176 Nov 24 14:25 ssl
lrwxrwxrwx 1 root root 10 Dec 22 20:57 tmp -> ../var/tmp
有时,您想要查看目录本身,而不是目录内部。对于这种情况,您可以指定 -d 选项,它将告诉 ls 查看所有目
录,否则在通常情况下,ls 要查看目录内部:
$ ls -dl /usr /usr/bin /usr/X11R6/bin ../share
drwxr-xr-x 4 root root 96 Dec 18 18:17 ../share
drwxr-xr-x 17 root root 576 Dec 24 09:03 /usr
drwxr-xr-x 2 root root 3192 Dec 26 12:52 /usr/X11R6/bin
drwxr-xr-x 2 root root 14576 Dec 27 08:56 /usr/bin
文件系统的每个对象都分配到一个独一无二的索引,叫做索引节点号。这可能看起来微不足道,但是理解索引
节点对于理解许多文件系统操作来说很重要。例如,请考虑出现在每个目录中的 . 和 .. 链接。为了完全理解 ..
目录实际上是什么,我们将先来看一看 /usr/local 的索引节点号:
$ ls -id /usr/local
5120 /usr/local
/usr/local 目录有一个 5120 索引节点号。现在,我们来看一看 /usr/local/bin/.. 的索引节点号:
$ ls -id /usr/local/bin/..
5120 /usr/local/bin/..
也就是说/usr/local/bin/..和/usr/local具有相同的索引节点。
指向一个特定索引节点的连接可以有多个。
事实上,通过使用 ls -dl 命令,我们可以看到索引节点 5120 被引用的总次数:
$ ls -dl /usr/local
drwxr-xr-x 8 root root 240 Dec 22 20:57 /usr/local
如果我们看一看从左起的第二栏,我们可以看到目录 /usr/local(索引节点 5120)被引用了 8 次。在我的系统
中,引用该索引节点的不同路径有这些:
/usr/local
/usr/local/.
/usr/local/bin/..
/usr/local/games/..
/usr/local/lib/..
/usr/local/sbin/..
/usr/local/share/..
/usr/local/src/..
使用shell最重要的命令:mkdir
$ cd /tmp
$ mkdir tic tac toe
缺省情况下,mkdir 不会为您创建父目录;邻接的上一元素的完整路径必须存在。因此,如果您想要创建目录
won/der/ful,您将需要发出三个单独的 mkdir 命令:
$ mkdir won/der/ful
mkdir: cannot create directory `won/der/ful': No such file or directory
$ mkdir won
$ mkdir won/der
$ mkdir won/der/ful
然而,mkdir 有一个很方便的 -p 选项,该选项告诉 mkdir 创建所有缺少的父目录,如下所示:
$ mkdir -p easy/as/pie
总之,非常简单。要学习更多关于 mkdir 命令的知识,请输入 man mkdir 来阅读手册页。除 cd(它内置在
bash 中)之外,这几乎适用于这里所涉及的所有命令(比如 man ls)。
现在,我们将要快速地看一看 cp 和 mv 命令,这些命令用来复制、重命名以及移动文件和目录。为了开始该
概述,我们将首先用 touch 命令在 /tmp 中创建一个文件:
$ cd /tmp
$ touch copyme
如果文件存在,touch 命令将更新文件的“mtime”(请回想 ls -l 输出中的第六栏)。如果文件不存在,那么
将创建一个新的空文件。现在您应该有一个大小为零的 /tmp/copyme 文件。
使用shell最重要的命令:echo
带有输出重定向的同样的 echo 命令为:
$ echo "firstfile" > copyme
大于符号告诉 shell 将 echo 的输出写到名为 copyme 的文件中。如果该文件不存在,将创建这个文件;如果该
文件存在,将覆盖这个文件。通过输入 ls -l,我们可以看到 copyme 文件为 10 个字节长,因为它包括 firstfile
这个词和换行符:
$ ls -l copyme
-rw-r--r-- 1 root root 10 Dec 28 14:13 copyme
为了在终端显示文件的内容,要使用 cat 命令:
$ cat copyme
firstfile
现在,我们可以使用 cp 命令的基本调用来由原始的 copyme 文件创建 copiedme 文件:
$ cp copyme copiedme
通过观察,我们发现它们确实是相互独立的文件;它们的索引节点号不同:
$ ls -i copyme copiedme
648284 copiedme 650704 copyme
现在,我们来用“mv”命令将“copiedme”重命名为“movedme”。其索引节点号将仍然是同一个;但是,
指向该索引节点的文件名将改变。
$ mv copiedme movedme
$ ls -i movedme
648284 movedme
只要目标文件和源文件驻留在同一文件系统上,被移动的文件的索引节点号就将仍然不变。
当谈及目录条目和索引节点之间关系时,我们提到了链接这个术语。Linux 实际有两种链接。到此为止我们所
讨论的这种链接叫硬链接。一个给定的索引节点可以有任意数目的硬链接,该索引节点一直存在于文件系统,
直到所有的硬链接消失。可以使用 ln 命令来创建新的硬链接:
$ cd /tmp
$ touch firstlink
$ ln firstlink secondlink
$ ls -i firstlink secondlink
15782 firstlink 15782 secondlink
您可以看到,硬链接工作于索引节点级别,指向特殊的文件。在 Linux 系统上,硬链接有几个局限性。第一,
您只能给文件建立硬链接,而不能给目录建立硬链接。的确如此;即便 . 和 .. 是系统给目录创建的硬链接,也
不允许您(“root”用户也不行)创建任何您自己的硬链接。
硬链接的第二个局限性是它们不能跨文件系统。这意味着,如果您的 / 和 /usr 存在于不同的文件系统,您不能
创建从 /usr/bin/bash 到 /bin/bash 的链接。
实际上,符号链接(symbolic link,或“symlinks”)比硬链接更常用到。符号链接是一种专门的文件类型,
在这种文件类型中,链接通过名称引用另一个文件,而不是直接引用索引节点。符号链接不阻止文件被删除;
如果目标文件消失,那么符号链接仅仅是不可用,或“被破坏”。
通过将 -s 选项传给 ln,可以创建符号链接。
$ ln -s secondlink thirdlink
$ ls -l firstlink secondlink thirdlink
-rw-rw-r-- 2 agriffis agriffis 0 Dec 31 19:08 firstlink
-rw-rw-r-- 2 agriffis agriffis 0 Dec 31 19:08 secondlink
lrwxrwxrwx 1 agriffis agriffis 10 Dec 31 19:39 thirdlink -> secondlink
在 ls -l 输出中,可以用三种方式区分符号链接和一般文件。第一,请注意第一栏包含一个 l 字符的输出表明是
符号链接。第二,符号链接的大小是目标文件(本例是 secondlink)的字符数。第三,输出的最后一栏显示目
标文件名。
作为 root 用户,您可能想要给“keychain”创建一个别名,比如“kc”。在这个示例中,我们有 root 访问权
,由 bash 提示符改变为“#”可以证明。我们之所以需要 root 访问权是因为一般用户不能在 /usr/bin 中创建文
件。作为 root 用户,我们可以像下面这样给 keychain 创建一个别名:
# cd /usr/bin
# ln -s /usr/bin/keychain kc
当这个解决方法起作用时,如果我们想要把两个文件都移到 /usr/local/bin 时,它将会出现问题。
# mv /usr/bin/keychain /usr/bin/kc /usr/local/bin
因为在符号链接中,我们使用了绝对路径,而我们的 kc 符号链接仍然指向 /usr/bin/keychain,它已不存在了
— 另一个被破坏的符号链接。符号链接中的相对路径和绝对路径都各具优点,您应该使用适合于您的特殊应
用的路径类型。一般情况下,相对路径或绝对路径都能工作得很好。在这种情况下,下面的示例将起作用:
# cd /usr/bin
# ln -s keychain kc
# ls -l kc
lrwxrwxrwx 1 root root 8 Jan 5 12:40 kc -> keychain
既然我们知道怎样使用 cp、mv 和 ln,现在我们该学习怎样把对象从文件系统中删除了。通常,这用 rm 命令
来完成。要删除文件,只需在命令行中指定它们:
$ cd /tmp
$ touch file1 file2
$ ls -l file1 file2
-rw-r--r-- 1 root root 0 Jan 1 16:41 file1
-rw-r--r-- 1 root root 0 Jan 1 16:41 file2
$ rm file1 file2
$ ls -l file1 file2
ls: file1: No such file or directory
ls: file2: No such file or directory
要删除目录,您有两种选择。您可以删除目录中所有的对象,然后使用 rmdir 来删除目录本身:
$ mkdir mydir
$ touch mydir/file1
$ rm mydir/file1
$ rmdir mydir
或者,您可以使用 rm 命令的 recursive force 选项来告诉 rm 删除您指定的目录以及目录中包含的所有对象:
$ rm -rf mydir
一般情况下,rm -rf 是删除目录树的首选方法。在使用 rm -rf 时要十分小心,因为它的功能可以被很好地利用
,也可能会因使用不当造成恶果。
? 与任何单个字符匹配。例子:
myfile? 与文件名为 myfile 后跟单个字符的任何文件匹配。
/tmp/notes?txt 将与 /tmp/notes.txt 和 /tmp/notes_txt 都匹配,如果它们存在。
[]
该通配符与 ? 相似,但允许指定得更确切。要使用该通配符,把您想要匹配的所有字符放在 [] 内。结果的表达
式将与 [] 中任一字符相匹配。您也可以用 - 来指定范围,甚至还可以组合范围。例子:
myfile[12] 将与 myfile1 和 myfile2 匹配。只要当前目录中至少有一个这样的文件存在,该通配符就可以进行扩
展。
[Cc]hange[Ll]og 将与 Changelog、ChangeLog、changeLog 以及 changelog 匹配。您可以看到,与大写形式
的变形匹配时,使用括弧通配符很有用。
ls /etc/[0-9]* 将列出 /etc 中以数字开头的所有文件。
ls /tmp/[A-Za-z]* 将列出 /tmp 中以大写字母或小写字母开头的所有文件。
[!]
除了不与括弧中的任何字符匹配外,[!] 构造与 [] 构造类似,只要不是列在 [! 和 ] 之间的字符,它将与任何字符
匹配。例子:
rm myfile[!9] 将删除除 myfile9 之外的名为 myfile 加一个字符的所有文件。
这里有一些使用通配符时应该注意的告诫说明。由于 bash 对与通配符相关的字符(?、[、]、*)进行特别处理
,因此您将包含这些字符的参数输入到命令中时,需要特别小心。例如,如果您想要创建一个包含字符串 [fo]*
的文件,下面这个命令可能不会执行您想要做的事:
$ echo [fo]* > /tmp/mynewfile.txt
如果 [fo]* 这个模式与当前工作目录中的任何文件匹配,那么您将在 /tmp/mynewfile.txt 内发现那些文件的名称
,而不是您所期望的文字 [fo]*。解决方法是什么呢?嗯,一种方法是用单引号把这些字符括起来,这将告诉
bash 单纯地执行,而不会对其进行通配符扩展:
$ echo '[fo]*' > /tmp/mynewfile.txt
采用这种方法,您的新文件将包含所期望的文字的 [fo]*。另一种方法是,您可以使用反斜杠,告诉 bash [、]
和 * 应该被当成文字处理,而不是被当成通配符处理:
$ echo /[fo/]/* > /tmp/mynewfile.txt
两种方法都能同样地起作用。既然我们谈到反斜杠扩展,那么现在是时候提一提了,为了指定文字 /,您可以
将它放入单引号中,或者也可以输入 //(它将被扩展为 /)。
- Linux基础(1)
- Linux基础(1)
- Linux基础(1)
- linux基础(1)-shell
- Linux入门基础(1)
- linux基础学习(1)
- linux学习(1)-基础
- Linux入门基础(1)
- linux 基础操作(1)
- Linux基础(1)/Linux 系统简介
- 【linux-1】linux基础
- 架构基础1-linux基础
- Linux应用编程基础--(4)多进程基础1
- Linux基础(一)(1)
- linux之shell基础命令(1)
- linux 操作常用基础命令(1)
- Linux——基础(1)文件系统
- 1 linux命令基础(UEA)
- Oracle中有关Latch的介绍
- 研究数组
- 如何在map文件中生成行信息?
- 如何在map文件中生成行信息?
- nginx配置心得 location 与alias
- Linux基础(1)
- java的集合类
- MaintainScrollPositionOnPostback="true"
- 哈希加密
- 把office文档转化为pdf并在线显示
- 无法连接到wmi提供程序。您没有权限或者该服务器无法访问
- sqlserver2005 数据库的几种状态
- 要维护我的空间
- jsp图片上传完整代码