命令
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 指定解压到的目录
一般用-czvf
和xzvf
示例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 文件系统层次体系标准可通过以下链接找到:
Q.什么是软链接/硬链接
操作文件和目录
- cp — 复制文件和目录
- mv — 移动/重命名文件和目录
- mkdir — 创建目录
- rm — 删除文件和目录
- ln — 创建硬链接和符号链接
通配符
通配符 | 意义 |
---|---|
* | 匹配任意多个字符(包括零个或一个) |
? | 匹配任意一个字符(不包括零个) |
[characters] | 匹配任意一个属于字符集中的字符 |
[!characters] | 匹配任意一个不是字符集中的字符 |
[[:class:]] | 匹配任意一个属于指定字符类中的字符 |
表5-2: 普遍使用的字符类
字符类 | 意义 |
---|---|
[:alnum:] | 匹配任意一个字母或数字 |
[:alpha:] | 匹配任意一个字母 |
[:digit:] | 匹配任意一个数字 |
[:lower:] | 匹配任意一个小写字母 |
[:upper] | 匹配任意一个大写字母 |
mkdir directory...
(可重复,如mkdir dir1 dir2 dir3
)
cp item1 item2
和cp 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 item2
和mv 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%