Linux Shell笔记

命令

echo 打印

date[参数][-指定格式]

%t 跳格[Tab 键]
%H 小时(00~23)
%I 小时(00~12)
%M 分钟(00~59)
%S 秒(00~59)
%j 今年中的第几天

reboot poweroff

wget

-b 后台下载模式
-P 下载到指定目录
-t 最大尝试次数
-c 断点续传
-p 下载页面内所有资源,包括图片、视频等
-r 递归下载

ps 查看进程

用例 ps aux(不必使用-前缀)

-a 显示所有进程(包括其他用户的进程)
-u 用户以及其他详细信息
-x 显示没有控制终端的进程

top 监视系统

pidof [参数] [服务名称]

kill [参数] [进程 PID]

killall [参数] [服务名称]

ifconfig [网络设备] [参数

uname [-a]

cat /etc/redhat-release

uptime 查看系统负载信息

free 显示内存信息 free [-h]

who 查看当前登入主机的用户终端信息

last 查看所有系统登入信息

history [-c] 显示执行过的命令 /etc/profile 中 HISTSIZE为大小

sosreport 收集系统配置及架构信息并输出诊断文档

pwd 当前目录

cd 切换目录 -上一次的目录,~家目录

ls 显示当前目录文件信息,-a查看所有,-l查看属性/大小,-d目录属性,用例ls -ld /etc

cat[选项] [文件] , -n显示行号

more

head 前n页 tail 后n页(持续刷新) ,-f

tr[原始] [目标] 替换文本,用例cat anaconda-ks.cfg | tr [a-z] [A-Z]

wc word count,-l 行数,-w单词数,-c字节数

stat 文件的具体存储信息和时间等信息

cut[参数] 文本,提取文本字符 -f列数,-d间隔符号,用例cut -d: -f1 /etc/passwd

diff[参数] 文本,-c具体不同,--brief仅判断

touch[选项] [文件],创建空白文件或设置文件的时间,-a修改atime,-m修改mtime,-d都修改

mkdir[选项] 目录,-p嵌套,用例mkdir -p a/b/c/d

cp[选项] 源 目标,-p保留属性,-d保留链接属性(?),-r递归,-i询问覆盖,-a等于-pdr

mv 剪切/重命名

rm 删除,-f强制删除.-r删除目录

dd,if输入文件,of输出,bs块大小,count块数量,用例dd if=/dev/zero of=560_file count=1 bs=560M

dd刻录isodd if=/dev/cdrom of=RHEL-server-7.0-x86_64.iso

file查看文件类型

tar

-c 创建压缩文件
-x 解开压缩文件
-t 查看压缩包内有哪些文件
-z 用 Gzip 压缩或解压
-j 用 bzip2 压缩或解压
-v 显示压缩或解压的过程
-f 目标文件名
-p 保留原始的权限与属性
-P 使用绝对路径来压缩
-C 指定解压到的目录

一般用-czvfxzvf

示例tar -czvf etc.tar.gz /etc.mkdir /root/etc,tar xzvf etc.tar.gz -C /root/etc

grep 关键词搜索

-b 将可执行文件(binary)当作文本文件(text)来搜索
-c 仅显示找到的行数
-i 忽略大小写
-n 显示行号
-v 反向选择—仅列出没有“关键词”的行

小知识

Linux中的进程分为5个状态,

R(运行) 进程正在运行或在运行队列中等待

S(中断) 进程处于休眠中,当某个条件形成后或者接收到信号时,则脱离该状态。

D(不可中断) 进程不响应系统异步信号,即便用 kill 命令也不能将其中断

Z(僵死), 进程已经终止,但进程描述符依然存在, 直到父进程调用 wait4()系统函数后将进程释放

T(停止) 进程收到停止信号后停止运行

输入重定向符号

命令 < 文件

命令 << 分界符 从STDIN读入,直到遇到分界符停止

命令 < 文件1 > 文件2

输出重定向符号

命令 > 文件

命令 2> 文件 STDERR

命令 >> 文件 追加模式

命令 2>> 文件 追加

命令 >> 文件 2>&1 或者 命令 &>> 文件 STDOUT和STDERR追加到同一文件

其中描述符 0 是STDIN 1是STDOUT 2是STDERR

管道命令符|a|b作用为把前一个命令当作是后一个命令的标准输入

通配符*表示0个或多个,?匹配单个,[0-9]匹配0-9之间的单个数,可用于文件操作

转义字符\后面一个变量变为字符串,"所有变量变为字符串,""保留变量属性不专义,``执行命令并返回

last update:2019/02/13

以下为The Linux Command Line笔记

ls命令有两个选项,“l”选项产生长格式输出,“t”选项按文件 修改时间的先后来排序。

加上长选项 “–reverse”,则结果会以相反的顺序输出

[me@linuxbox ~]$ ls -lt --reverse

ls 命令有大量的选项。表4-1列出了最常使用的选项。
表 4-1: ls 命令选项

选项 长选项 描述
-a --all 列出所有文件,甚至包括文件名以圆点开头的默认会被隐藏的隐藏文件。
-d --directory 通常,如果指定了目录名,ls 命令会列出这个目录中的内容,而不是目录本身。 把这 个选项与 -l 选项结合使用,可以看到所指定目录的详细信息,而不是目录中的内容。
-F --classify 这个选项会在每个所列出的名字后面加上一个指示符。例如,如果名字是 目录名,则会 加上一个'/'字符。
-h --human-readable 当以长格式列出时,以人们可读的格式,而不是以字节数来显示文件的大小。
-l 以长格式显示结果。
-r --reverse 以相反的顺序来显示结果。通常,ls 命令的输出结果按照字母升序排列。
-S 命令输出结果按照文件大小来排序。
-t 按照修改时间来排序。

-rw-r--r-- 1 root root 32059 2007-04-03 11:05 oo-cd-cover.odf

字段 含义
-rw-r--r-- 对于文件的访问权限。第一个字符指明文件类型。在不同类型之间, 开头的“-”说明是一 个普通文件,“d”表明是一个目录。其后三个字符是文件所有者的 访问权限,再其后的三个字符是文件 所属组中成员的访问权限,最后三个字符是其他所 有人的访问权限。这个字段的完整含义将在第十章讨 论。
1 文件的硬链接数目。参考随后讨论的关于链接的内容。
root 文件属主的用户名。
root 文件所属用户组的名字。
32059 以字节数表示的文件大小。
2007-04-03 11:05 上次修改文件的时间和日期。
oo-cd-cover.odf 文件名。

file picture.jpg picture.jpg: JPEG image data, JFIF standard 1.01

less 命令是一个用来浏览文本文件的程序。less filename

命令 行为
Page UP or b 向上翻滚一页
Page Down or space 向下翻滚一页
UP Arrow 向上翻滚一行
Down Arrow 向下翻滚一行
G 移动到最后一行
1G or g 移动到开头一行
/charaters 向前查找指定的字符串
n 向前查找下一个出现的字符串,这个字符串是之前所指定查找的
h 显示帮助屏幕
q 退出 less 程序

表 4-4: Linux 系统中的目录
| 目录 | 评论 |
|-----|---------|
| / | 根目录,万物起源。 |
| /bin | 包含系统启动和运行所必须的二进制程序。 |
| /boot | 包含 Linux 内核,最初的 RMA 磁盘映像(系统启动时,由驱动程序所需),和 启动加载程序。有趣的文件: /boot/grub/grub.conf or menu.lst, 被用来配置启动加载程序。 /boot/vmlinuz,Linux 内核。 |
| /dev | 这是一个包含设备结点的特殊目录。“一切都是文件”,也使用于设备。 在这个目录里,内核维护着它支持的设备。 |
| /etc | 这个目录包含所有系统层面的配置文件。它也包含一系列的 shell 脚本, 在系统启动时,这些脚本会运行每个系统服务。这个目录中的任何文件应该是可读的文本文件。有意思的文件:虽然/etc 目录中的任何文件都有趣,但这里只列出了一些我一直喜欢的文件: /etc/crontab, 定义自动运行的任务。 /etc/fstab,包含存储设备的列表,以及与他们相关的挂载点。/etc/passwd,包含用户帐号列表。 |
| /home | 在通常的配置环境下,系统会在/home 下,给每个用户分配一个目录。普通只能 在他们自己的目录下创建文件。这个限制保护系统免受错误的用户活动破坏。 |
| /lib | 包含核心系统程序所需的库文件。这些文件与 Windows 中的动态链接库相似。 |
| /lost+found | 每个使用 Linux 文件系统的格式化分区或设备,例如 ext3文件系统, 都会有这个目录。当部分恢复一个损坏的文件系统时,会用到这个目录。除非文件系统 真正的损坏了,那么这个目录会是个空目录。 |
| /media | 在现在的 Linux 系统中,/media 目录会包含可移除媒体设备的挂载点, 例如 USB 驱动器,CD-ROMs 等等。这些设备连接到计算机之后,会自动地挂载到这个目录结点下。 |
| /mnt | 在早些的 Linux 系统中,/mnt 目录包含可移除设备的挂载点。 |
| /opt | 这个/opt 目录被用来安装“可选的”软件。这个主要用来存储可能 安装在系统中的商业软件产品。 |
| /proc | 这个/proc 目录很特殊。从存储在硬盘上的文件的意义上说,它不是真正的文件系统。 反而,它是一个由 Linux 内核维护的虚拟文件系统。它所包含的文件是内核的窥视孔。这些文件是可读的, 它们会告诉你内核是怎样监管计算机的。 |
| /root | root 帐户的家目录。 |
| /sbin | 这个目录包含“系统”二进制文件。它们是完成重大系统任务的程序,通常为超级用户保留。 |
| /tmp | 这个/tmp 目录,是用来存储由各种程序创建的临时文件的地方。一些配置,导致系统每次 重新启动时,都会清空这个目录。 |
| /usr | 在 Linux 系统中,/usr 目录可能是最大的一个。它包含普通用户所需要的所有程序和文件。 |
| /usr/bin | /usr/bin 目录包含系统安装的可执行程序。通常,这个目录会包含许多程序。 |
| /usr/lib | 包含由/usr/bin 目录中的程序所用的共享库。 |
| /usr/local | 这个/usr/local 目录,是非系统发行版自带,却打算让系统使用的程序的安装目录。 通常,由源码编译的程序会安装在/usr/local/bin 目录下。新安装的 Linux 系统中,会存在这个目录, 但却是空目录,直到系统管理员放些东西到它里面。 |
| /usr/sbin | 包含许多系统管理程序。 |
| /usr/share | /usr/share 目录包含许多由/usr/bin 目录中的程序使用的共享数据。 其中包括像默认的配置文件,图标,桌面背景,音频文件等等。 |
| /usr/share/doc | 大多数安装在系统中的软件包会包含一些文档。在/usr/share/doc 目录下, 我们可以找到按照软件包分类的文档。 |
| /var | 除了/tmp 和/home 目录之外,相对来说,目前我们看到的目录是静态的,这是说, 它们的内容不会改变。/var 目录是可能需要改动的文件存储的地方。各种数据库,假脱机文件, 用户邮件等等,都驻扎在这里。 |
| /var/log | 这个/var/log 目录包含日志文件,各种系统活动的记录。这些文件非常重要,并且 应该时时监测它们。其中最重要的一个文件是/var/log/messages。注意,为了系统安全,在一些系统中, 你必须是超级用户才能查看这些日志文件。 |

完整的 Linux 文件系统层次体系标准可通过以下链接找到:

http://www.pathname.com/fhs/

Q.什么是软链接/硬链接

操作文件和目录

  • cp — 复制文件和目录
  • mv — 移动/重命名文件和目录
  • mkdir — 创建目录
  • rm — 删除文件和目录
  • ln — 创建硬链接和符号链接

通配符

通配符 意义
* 匹配任意多个字符(包括零个或一个)
? 匹配任意一个字符(不包括零个)
[characters] 匹配任意一个属于字符集中的字符
[!characters] 匹配任意一个不是字符集中的字符
[[:class:]] 匹配任意一个属于指定字符类中的字符

表5-2: 普遍使用的字符类

字符类 意义
[:alnum:] 匹配任意一个字母或数字
[:alpha:] 匹配任意一个字母
[:digit:] 匹配任意一个数字
[:lower:] 匹配任意一个小写字母
[:upper] 匹配任意一个大写字母

mkdir directory...(可重复,如mkdir dir1 dir2 dir3)

cp item1 item2cp item... directory

表5-4: cp 选项
| 选项 | 意义 |
|--------|-------|
| -a, --archive | 复制文件和目录,以及它们的属性,包括所有权和权限。 通常,复本具有用户所操作文件的默认属性。 |
| -i, --interactive | 在重写已存在文件之前,提示用户确认。如果这个选项不指定, cp 命令会默认重写文件。 |
| -r, --recursive | 递归地复制目录及目录中的内容。当复制目录时, 需要这个选项(或者-a 选项)。 |
| -u, --update | 当把文件从一个目录复制到另一个目录时,仅复制 目标目录中不存在的文件,或者是文件内容新于目标目录中已经存在的文件。 |
| -v, --verbose | 显示翔实的命令操作信息 |
表5-5: cp 实例
| 命令 | 运行结果 |
|--------|-------|
| cp file1 file2 | 复制文件 file1 内容到文件 file2。如果 file2 已经存在, file2 的内容会被 file1 的内容重写。如果 file2 不存在,则会创建 file2。 |
| cp -i file1 file2 | 这条命令和上面的命令一样,除了如果文件 file2 存在的话,在文件 file2 被重写之前, 会提示用户确认信息。 |
| cp file1 file2 dir1 | 复制文件 file1 和文件 file2 到目录 dir1。目录 dir1 必须存在。 |
| cp dir1/* dir2 | 使用一个通配符,在目录 dir1 中的所有文件都被复制到目录 dir2 中。 dir2 必须已经存在。 |
| cp -r dir1 dir2 | 复制目录 dir1 中的内容到目录dir2。如果目录 dir2 不存在, 创建目录 dir2,操作完成后,目录 dir2 中的内容和 dir1 中的一样。 如果目录 dir2 存在,则目录 dir1 (和目录中的内容)将会被复制到 dir2 中。 |

mv item1 item2mv item... directory

表5-6: mv 选项
| 选项 | 意义 |
|--------|-------|
| -i --interactive | 在重写一个已经存在的文件之前,提示用户确认信息。 如果不指定这个选项,mv 命令会默认重写文件内容。 |
| -u --update | 当把文件从一个目录移动另一个目录时,只是移动不存在的文件, 或者文件内容新于目标目录相对应文件的内容。 |
| -v --verbose | 当操作 mv 命令时,显示翔实的操作信息。 |
表5-7: mv 实例
|||
|--------|-------|
| mv file1 file2 | 移动 file1 到 file2。如果 file2 存在,它的内容会被 file1 的内容重写。 如果 file2 不存在,则创建 file2。 每种情况下,file1 不再存在。 |
| mv -i file1 file2 | 除了如果 file2 存在的话,在 file2 被重写之前,用户会得到 提示信息外,这个和上面的选项一样。 |
| mv file1 file2 dir1 | 移动 file1 和 file2 到目录 dir1 中。dir1 必须已经存在。 |
| mv dir1 dir2 | 如果目录 dir2 不存在,创建目录 dir2,并且移动目录 dir1 的内容到 目录 dir2 中,同时删除目录 dir1。如果目录 dir2 存在,移动目录 dir1(及它的内容)到目录 dir2。 |

rm item...

表5-8: rm 选项
| 选项 | 意义 |
|--------|-------|
| -i, --interactive | 在删除已存在的文件前,提示用户确认信息。 如果不指定这个选项,rm 会默默地删除文件 |
| -r, --recursive | 递归地删除文件,这意味着,如果要删除一个目录,而此目录 又包含子目录,那么子目录也会被删除。要删除一个目录,必须指定这个选项。 |
| -f, --force | 忽视不存在的文件,不显示提示信息。这选项颠覆了“--interactive”选项。 |
| -v, --verbose | 在执行 rm 命令时,显示翔实的操作信息。 |
表5-9: rm 实例
| 命令 | 运行结果 |
|--------|-------|
| rm file1 | 默默地删除文件 |
| rm -i file1 | 除了在删除文件之前,提示用户确认信息之外,和上面的命令作用一样。 |
| rm -r file1 dir1 | 删除文件 file1, 目录 dir1,及 dir1 中的内容。 |
| rm -rf file1 dir1 | 同上,除了如果文件 file1,或目录 dir1 不存在的话,rm 仍会继续执行。 |

小贴士。 无论什么时候,rm 命令用到通配符(除了仔细检查输入的内容外!), 用 ls 命令来测试通配符。这会让你看到要删除的文件列表。然后按下上箭头按键,重新调用 刚刚执行的命令,用 rm 替换 ls。

ln file link

  • type – 说明怎样解释一个命令名
  • which – 显示会执行哪个可执行程序
  • man – 显示命令手册页
  • apropos – 显示一系列适合的命令
  • info – 显示命令 info
  • whatis – 显示一个命令的简洁描述
  • alias – 创建命令别名

type command

[me@linuxbox ~]$ type type
type is a shell builtins
[me@linuxbox ~]$ type ls
ls is aliased to `ls --color=tty`
[me@linuxbox ~]$ type cp
cp is /bin/cp
[me@linuxbox ~]$ which ls
/bin/ls

注意which只对可执行程序有效

cd [-L|-P] [dir]

(一个竖杠字符 表示互斥选项)

重定向

  • cat - 连接文件
  • sort - 排序文本行
  • uniq - 报道或省略重复行
  • grep - 打印匹配行
  • wc - 打印文件中换行符,字,和字节个数
  • head - 输出文件第一部分
  • tail - 输出文件最后一部分

事实上,如果我们需要删除一个文件内容(或者创建一个 新的空文件),可以使用这样的技巧:

[me@linuxbox ~]$ > ls-output.txt

怎样才能把重定向结果追加到文件内容后面,而不是从开头重写文件?为了这个目的, 我们使用>>重定向符

[me@linuxbox ~]$ ls -l /bin/usr > ls-output.txt 2>&1

使用这种方法,我们完成两个重定向

重定向文件描述符2(标准错误)到文件描述符1(标准输出)使用表示法2>&1。

现在的 bash 版本提供了第二种方法,更精简合理的方法来执行这种联合的重定向。

[me@linuxbox ~]$ ls -l /bin/usr &> ls-output.txt

在这个例子里面,我们使用单单一个表示法 &> 来重定向标准输出和错误到文件 ls-output.txt

通过重定向输出结果 到一个特殊的叫做”/dev/null”的文件。这个文件是系统设备,叫做位存储桶,它可以 接受输入,并且对输入不做任何处理。为了隐瞒命令错误信息,我们这样做:

[me@linuxbox ~]$ ls -l /bin/usr 2> /dev/null

cat 命令读取一个或多个文件,然后复制它们到标准输出

cat [file]

你可以使用 cat 来显示 文件而没有分页,例如:

[me@linuxbox ~]$ cat ls-output.txt

将会显示文件 ls-output.txt 的内容。cat 经常被用来显示简短的文本文件

我们能用这个命令把它们连接起来:

cat movie.mpeg.0* > movie.mpeg

因为通配符总是以有序的方式展开,所以这些参数会以正确顺序安排。

如果 cat 没有给出任何参数,它会从标准输入读入数据,因为标准输入,默认情况下,连接到键盘。

[me@linuxbox ~]$ cat > lazy_dog.txt
The quick brown fox jumped over the lazy dog.
^d

使用“<”重定向操作符,我们把标准输入源从键盘改到文件 lazy_dog.tx。我们看到结果 和传递单个文件名作为参数的执行结果一样(cat lazy_dog.txt)

[me@linuxbox ~]$ cat < lazy_dog.txt
The quick brown fox jumped over the lazy dog.

命令可以从标准输入读取数据,然后再把数据输送到标准输出,命令的这种能力被 一个 shell 特性所利用,这个特性叫做管道线|

一个命令的 标准输出可以管道到另一个命令的标准输入:

command1 | command2

我们用 less 来一页一页地显示任何命令的输出,命令把 它的运行结果输送到标准输出:

[me@linuxbox ~]$ ls -l /usr/bin | less

想象一下,我们想把目录/bin 和/usr/bin 中 的可执行程序都联合在一起,再把它们排序,然后浏览执行结果:

[me@linuxbox ~]$ ls /bin /usr/bin | sort | less

为了确信 我们的列表中不包含重复句子(这是说,出现在目录/bin 和/usr/bin 中重名的程序),我们添加 uniq 到我们的管道线中:

[me@linuxbox ~]$ ls /bin /usr/bin | sort | uniq | less

如果我们想看到重复的数据列表,让 uniq 命令带上”-d”选项,就像这样:

[me@linuxbox ~]$ ls /bin /usr/bin | sort | uniq -d | less

如果 wc 不带命令行参数,它接受标准输入。”-l”选项限制命令输出只能 报道行数。添加 wc 到管道线来统计数据,是个很便利的方法。查看我们的有序列表中程序个数, 我们可以这样做:

[me@linuxbox ~]$ ls /bin /usr/bin | sort | uniq | wc -l
2728

grep 是个很强大的程序,用来找到文件中的匹配文本。这样使用 grep 命令:

grep pattern [file...]

当 grep 遇到一个文件中的匹配”模式”,它会打印出包含这个类型的行

我们想在我们的程序列表中,找到文件名中包含单词”zip”的所有文件

[me@linuxbox ~]$ ls /bin /usr/bin | sort | uniq | grep zip
bunzip2
bzip2
gunzip
...

-i导致 grep 忽略大小写当执行搜索时(通常,搜索是大小写 敏感的)

-v选项会告诉 grep 只打印不匹配的行

head / tail - 打印文件开头部分/结尾部分,两个命令都打印十行文本,但是可以通过”-n”选项来调整命令打印的行数。

[me@linuxbox ~]$ head -n 5 ls-output.txt
total 343496
...
[me@linuxbox ~]$ tail -n 5 ls-output.txt
...
[me@linuxbox ~]$ ls /usr/bin | tail -n 5
znew
...

使用-f选项,tail 命令继续监测这个文件,当新的内容添加到文件后,它们会立即 出现在屏幕上。这会一直继续下去直到你输入 Ctrl-c

tee - 从 Stdin 读取数据,并同时输出到 Stdout 和文件

在 grep 过滤管道线的内容之前,来捕捉整个目录列表到文件 ls.txt

[me@linuxbox ~]$ ls /usr/bin | tee ls.txt | grep zip
bunzip2
bzip2
....

shell特技

shell 把“*”展开成了 另外的东西,在 echo 命令被执行前。当回车键被按下时,shell 在命令被执行前在命令行上自动展开任何符合条件的字符, 所以 echo 命令从不会发现“*”,只把它展开成结果,这种通配符工作机制叫做路径名展开

[me@linuxbox ~]$ echo *
Desktop Documents ls-output.txt Music Pictures Public Templates Videos

给出一个家目录,它看起来像这样

[me@linuxbox ~]$ ls
Desktop   ls-output.txt   Pictures   Templates
....

我们能够执行以下参数展开模式:

[me@linuxbox ~]$ echo D*
Desktop  Documents

和:

[me@linuxbox ~]$ echo *s
Documents Pictures Templates Videos

甚至是:

[me@linuxbox ~]$ echo [[:upper:]]*
Desktop Documents Music Pictures Public Templates Videos

波浪号展开:

如果有用户”foo”这个帐号,然后:

[me@linuxbox ~]$ echo ~foo
/home/foo

算术表达式只支持整数(全部是数字,不带小数点),但是能执行很多不同的操作。这里是 一些它支持的操作符:
表 8-1: 算术操作符

操作符 说明
+
-
*
/ 除(但是记住,因为展开只是支持整数除法,所以结果是整数。)
% 取余,只是简单的意味着,“余数”
** 取幂

花括号展开

[me@linuxbox ~]$ mkdir Pics
[me@linuxbox ~]$ cd Pics
[me@linuxbox Pics]$ mkdir {2007..2009}-0{1..9} {2007..2009}-{10..12}
[me@linuxbox Pics]$ ls
2007-01 2007-07 2008-01 2008-07 2009-01 2009-07
2007-02 2007-08 2008-02 2008-08 2009-02 2009-08
2007-03 2007-09 2008-03 2008-09 2009-03 2009-09
2007-04 2007-10 2008-04 2008-10 2009-04 2009-10
2007-05 2007-11 2008-05 2008-11 2009-05 2009-11
2007-06 2007-12 2008-06 2008-12 2009-06 2009-12

参数展开$

查看有效的变量列表,试试这个:

[me@linuxbox ~]$ printenv | less

命令替换

[me@linuxbox ~]$ ls -l $(which cp)
-rwxr-xr-x 1 root root 71516 2007-12-05 08:58 /bin/cp

这里我们把 which cp 的执行结果作为一个参数传递给 ls 命令,因此要想得到 cp 程序的 输出列表,不必知道它完整的路径名

我们不只限制于简单命令。也可以使用整个管道线 (只展示部分输出):

[me@linuxbox ~]$ file $(ls /usr/bin/* | grep zip)
/usr/bin/bunzip2:     symbolic link to `bzip2'
....

单词分割机制会导致这个文件名被看作两个独自的参数,而不是所期望 的单个参数:

[me@linuxbox ~]$ ls -l two words.txt
ls: cannot access two: No such file or directory
ls: cannot access words.txt: No such file or directory

使用双引号,我们可以阻止单词分割,得到期望的结果;进一步,我们甚至可以修复 破损的文件名。

[me@linuxbox ~]$ ls -l "two words.txt"
-rw-rw-r-- 1 me   me   18 2008-02-20 13:03 two words.txt
[me@linuxbox ~]$ mv "two words.txt" two_words.txt

键盘操作

clear - 清空屏幕

history - 显示历史列表内容

表9-1: 光标移动命令
| 按键 | 行动 |
|--------|-------|
| Ctrl-a | 移动光标到行首。 |
| Ctrl-e | 移动光标到行尾。 |
| Ctrl-f | 光标前移一个字符;和右箭头作用一样。 |
| Ctrl-b | 光标后移一个字符;和左箭头作用一样。 |
| Alt-f | 光标前移一个字。 |
| Alt-b | 光标后移一个字。 |
| Ctrl-l | 清空屏幕,移动光标到左上角。clear 命令完成同样的工作。 |

表9-2: 文本编辑命令
| 按键 | 行动 |
|--------|-------|
| Ctrl-d | 删除光标位置的字符。 |
| Ctrl-t | 光标位置的字符和光标前面的字符互换位置。 |
| Alt-t | 光标位置的字和其前面的字互换位置。 |
| Alt-l | 把从光标位置到字尾的字符转换成小写字母。 |
| Alt-u | 把从光标位置到字尾的字符转换成大写字母。 |

剪切下来的本文被存储在一个叫做剪切环(kill-ring)的缓冲区中

表9-3: 剪切和粘贴命令

按键 行动
Ctrl-k 剪切从光标位置到行尾的文本。
Ctrl-u 剪切从光标位置到行首的文本。
Alt-d 剪切从光标位置到词尾的文本。
Alt-Backspace 剪切从光标位置到词头的文本。如果光标在一个单词的开头,剪切前一个单词。
Ctrl-y 把剪切环中的文本粘贴到光标位置。

表9-4: 自动补全命令
| 按键 | 行动 |
|--------|-------|
| Alt-? | 显示可能的自动补全列表。在大多数系统中,你也可以完成这个通过按 两次 tab 键,这会更容易些。 |
| Alt-* | 插入所有可能的自动补全。当你想要使用多个可能的匹配项时,这个很有帮助。 |

历史操作

我们想要找到列出目录 /usr/bin 内容的命令。一种方法,我们可以这样做:

[me@linuxbox ~]$ history | grep /usr/bin

我们的搜索结果之中,我们得到一行,包含了有趣的命令,像这样;

88  ls -l /usr/bin > ls-output.txt

数字 “88” 是这个命令在历史列表中的行号。随后在使用另一种展开类型时,叫做 历史命令展开,我们会用到这个数字。我们可以这样做,来使用我们所发现的行:

[me@linuxbox ~]$ !88

bash 会把 “!88” 展开成为历史列表中88行的内容。

权限

  • id – 显示用户身份号
  • chmod – 更改文件模式
  • umask – 设置默认的文件权限
  • su – 以另一个用户的身份来运行 shell
  • sudo – 以另一个用户的身份来执行命令
  • chown – 更改文件所有者
  • chgrp – 更改文件组所有权
  • passwd – 更改用户密码

表10-1: 文件类型
| 属性 | 文件类型 |
| ---- | ------------------------------------------------------------ |
| - | 一个普通文件 |
| d | 一个目录 |
| l | 一个符号链接。注意对于符号链接文件,剩余的文件属性总是"rwxrwxrwx",而且都是 虚拟值。真正的文件属性是指符号链接所指向的文件的属性。 |
| c | 一个字符设备文件。这种文件类型是指按照字节流,来处理数据的设备。 比如说终端机,或者调制解调器 |
| b | 一个块设备文件。这种文件类型是指按照数据块,来处理数据的设备,例如一个硬盘,或者 CD-ROM 盘。 |

表10-4: chmod 命令符号表示法
|||
|-----|-----------|
| u | "user"的简写,意思是文件或目录的所有者。|
| g | 用户组。 |
| o | "others"的简写,意思是其他所有的人。 |
| a | "all"的简写,是"u", "g"和“o”三者的联合。 |

如果没有指定字符,则假定使用”all”。执行的操作可能是一个“+”字符,表示加上一个权限, 一个“-”,表示删掉一个权限,或者是一个“=”,表示只有指定的权限可用,其它所有的权限被删除。

权限由 “r”,“w”,和 “x” 来指定。这里是一些符号表示法的实例:

表10-5: chmod 符号表示法实例
|||
|-----|-----------|
| u+x | 为文件所有者添加可执行权限。 |
| u-x | 删除文件所有者的可执行权限。 |
| +x | 为文件所有者,用户组,和其他所有人添加可执行权限。 等价于 a+x。 |
| o-rw | 除了文件所有者和用户组,删除其他人的读权限和写权限。 |
| go=rw | 给群组的主人和任意文件拥有者的人读写权限。如果群组的主人或全局之前已经有了执行的权限,他们将被移除。 |
| u+x,go=rw | 给文件拥有者执行权限并给组和其他人读和执行的权限。多种设定可以用逗号分开。 |

进程

  • ps – 报告当前进程快照
  • top – 显示任务
  • jobs – 列出活跃的任务
  • bg – 把一个任务放到后台执行
  • fg – 把一个任务放到前台执行
  • kill – 给一个进程发送信号
  • killall – 杀死指定名字的进程
  • shutdown – 关机或重启系统

默认情况下,ps 不会显示很多进程信息,只是列出与当前终端会话相关的进程

[me@linuxbox ~]$ ps
PID TTY           TIME CMD
5198 pts/1    00:00:00 bash
10129 pts/1   00:00:00 ps

TTY 是 “Teletype” 的简写,是指进程的控制终端。这里,Unix 展示它的年龄。TIME 字段表示 进程所消耗的 CPU 时间数量。

表11-1: 进程状态
| 状态 | 意义 |
| --- | --- |
| R | 运行。这意味着,进程正在运行或准备运行。 |
| S | 正在睡眠。 进程没有运行,而是,正在等待一个事件, 比如说,一个按键或者网络数据包。 |
| D | 不可中断睡眠。进程正在等待 I/O,比方说,一个磁盘驱动器的 I/O。 |
| T | 已停止. 已经指示进程停止运行。稍后介绍更多。 |
| Z | 一个死进程或“僵尸”进程。这是一个已经终止的子进程,但是它的父进程还没有清空它。 (父进程没有把子进程从进程表中删除) |
| < | 一个高优先级进程。这可能会授予一个进程更多重要的资源,给它更多的 CPU 时间。 进程的这种属性叫做 niceness。具有高优先级的进程据说是不好的(less nice), 因为它占用了比较多的 CPU 时间,这样就给其它进程留下很少时间。 |
| N | 低优先级进程。 一个低优先级进程(一个“好”进程)只有当其它高优先级进程执行之后,才会得到处理器时间。 |

表11-2: BSD 风格的 ps 命令列标题
| 标题 | 意思 |
| --- | --- |
| USER | 用户 ID. 进程的所有者。 |
| %CPU | 以百分比表示的 CPU 使用率 |
| %MEM | 以百分比表示的内存使用率 |
| VSZ | 虚拟内存大小 |
| RSS | 进程占用的物理内存的大小,以千字节为单位。 |
| START | 进程运行的起始时间。若超过24小时,则用天表示。 |

为了看到更多动态的信息,我们使用 top 命令。top 程序连续显示系统进程更新的信息(默认情况下,每三分钟更新一次)

表11-3: top 命令信息字段
| 行号 | 字段 | 意义 |
| --- | --- | --- |
| 1 | top | 程序名。 |
| | 14:59:20 |当前时间。|
| | up 6:30 |这是正常运行时间。它是计算机从上次启动到现在所运行的时间。 在这个例子里,系统已经运行了六个半小时。|
| | 2 users |有两个用户登录系统。|
| | load average: |加载平均值是指,等待运行的进程数目,也就是说,处于运行状态的进程个数, 这些进程共享 CPU。展示了三个数值,每个数值对应不同的时间周期。第一个是最后60秒的平均值, 下一个是前5分钟的平均值,最后一个是前15分钟的平均值。若平均值低于1.0,则指示计算机 工作不忙碌。|
| 2 | Tasks: | 总结了进程数目和各种进程状态。 |
| 3 | Cpu(s): | 这一行描述了 CPU 正在执行的进程的特性。 |
| | 0.7%us |0.7% of the CPU is being used for user processes.这意味着进程在内核之外。|
| | 1.0%sy |1.0%的 CPU 时间被用于系统(内核)进程。|
| | 0.0%ni |0.0%的 CPU 时间被用于"nice"(低优先级)进程。|
| | 98.3%id |98.3%的 CPU 时间是空闲的。|
| | 0.0%wa |0.0%的 CPU 时间来等待 I/O。|
| 4 | Mem: | 展示物理内存的使用情况。 |
| 5 | Swap: | 展示交换分区(虚拟内存)的使用情况。 |

控制进程暂留

shell环境

  • printenv - 打印部分或所有的环境变量
  • set - 设置 shell 选项
  • export — 导出环境变量,让随后执行的程序知道。
  • alias - 创建命令别名

VI

表13-1: 光标移动按键
| 按键 | 移动光标 |
| ------------------- | -------------------------------------- |
| l or 右箭头 | 向右移动一个字符 |
| h or 左箭头 | 向左移动一个字符 |
| j or 下箭头 | 向下移动一行 |
| k or 上箭头 | 向上移动一行 |
| 0 (零按键) | 移动到当前行的行首。 |
| ^ | 移动到当前行的第一个非空字符。 |
| $ | 移动到当前行的末尾。 |
| w | 移动到下一个单词或标点符号的开头。 |
| W | 移动到下一个单词的开头,忽略标点符号。 |
| b | 移动到上一个单词或标点符号的开头。 |
| B | 移动到上一个单词的开头,忽略标点符号。 |
| Ctrl-f or Page Down | 向下翻一页 |
| Ctrl-b or Page Up | 向上翻一页 |
| numberG | 移动到第 number 行。例如,1G 移动到文件的第一行。 |
| G | 移动到文件末尾。 |

vi 中的许多命令都可以在前面加上一个数字,比方说上面提到的”G”命令。在命令之前加上一个 数字,我们就可以指定命令执行的次数。例如,命令”5j”导致 vi 向下移动5行。

u撤回

a追加

A

表13-2: 文本行打开按键
| 命令 | 打开行 |
|-------|---------|
| o | 当前行的下方打开一行。 |
| O | 当前行的上方打开一行。 |

表13-3: 文本删除命令
| 命令 | 删除的文本 |
|-------|---------|
| x | 当前字符 |
| 3x | 当前字符及其后的两个字符。 |
| dd | 当前行。 |
| 5dd | 当前行及随后的四行文本。 |
| dW | 从光标位置开始到下一个单词的开头。 |
| d$ | 从光标位置开始到当前行的行尾。 |
| d0 | 从光标位置开始到当前行的行首。 |
| d^ | 从光标位置开始到文本行的第一个非空字符。 |
| dG | 从当前行到文件的末尾。 |
| d20G | 从当前行到文件的第20行。 |

表13-4: 复制命令
| 命令 | 复制的内容 |
|-------|---------|
| yy | 当前行。 |
| 5yy | 当前行及随后的四行文本。 |
| yW | 从当前光标位置到下一个单词的开头。 |
| y$ | 从当前光标位置到当前行的末尾。 |
| y0 | 从当前光标位置到行首。 |
| y^ | 从当前光标位置到文本行的第一个非空字符。 |
| yG | 从当前行到文件末尾。 |
| y20G | 从当前行到文件的第20行。 |

J连接行

f 命令查找一行,移动光标到下一个所指定的字符上。例如,命令 fa 会把光标定位到同一行中 下一个出现的”a”字符上。在一行中执行了字符的查找命令之后,通过输入分号来重复这个查找。

目前进度30%

上一篇:The linux command 之引用


下一篇:05 Java的class文件的组成介绍