简单命令
查看磁盘剩余空间的数量,输入 df
显示空闲内存的数量,输入命令 free
文件/目录
ls可以接两个文件夹
ls -lt —reverse 按照时间逆序
表 4-1: ls 命令选项
选项 | 长选项 | 描述 |
---|---|---|
-a | —all | 列出所有文件,甚至包括文件名以圆点开头的默认会被隐藏的隐藏文件。 |
-d | —directory | 通常,如果指定了目录名,ls 命令会列出这个目录中的内容,而不是目录本身。 把这个选项与 -l 选项结合使用,可以看到所指定目录的详细信息,而不是目录中的内容。 |
-F | —classify | 这个选项会在每个所列出的名字后面加上一个指示符。例如,如果名字是 目录名,则会加上一个’/‘字符。 |
-h | —human-readable | 当以长格式列出时,以人们可读的格式,而不是以字节数来显示文件的大小。 |
-l | 以长格式显示结果。 | |
-r | —reverse | 以相反的顺序来显示结果。通常,ls 命令的输出结果按照字母升序排列。 |
-S | 命令输出结果按照文件大小来排序。 | |
-t | 按照修改时间来排序。 |
file filename 查看file的详细信息
less 允许查看文件 g为首行,n查找,q退出
表 4-4: Linux 系统中的目录
目录 | 评论 |
---|---|
/boot | 包含 Linux 内核,最初的 RMA 磁盘映像(系统启动时,由驱动程序所需),和 启动加载程序。有趣的文件: /boot/grub/grub.conf or menu.lst, 被用来配置启动加载程序。 /boot/vmlinuz,Linux 内核。 |
/dev | 这是一个包含设备结点的特殊目录。“一切都是文件”,也使用于设备。 在这个目录里,内核维护着它支持的设备。 |
/etc | 这个目录包含所有系统层面的配置文件。它也包含一系列的 shell 脚本, 在系统启动时,这些脚本会运行每个系统服务。这个目录中的任何文件应该是可读的文本文件。有意思的文件:虽然/etc 目录中的任何文件都有趣,但这里只列出了一些我一直喜欢的文件: /etc/crontab, 定义自动运行的任务。 /etc/fstab,包含存储设备的列表,以及与他们相关的挂载点。/etc/passwd,包含用户帐号列表。 |
/lost+found | 每个使用 Linux 文件系统的格式化分区或设备,例如 ext3文件系统, 都会有这个目录。当部分恢复一个损坏的文件系统时,会用到这个目录。除非文件系统 真正的损坏了,那么这个目录会是个空目录。 |
/media | 在现在的 Linux 系统中,/media 目录会包含可移除媒体设备的挂载点, 例如 USB 驱动器,CD-ROMs 等等。这些设备连接到计算机之后,会自动地挂载到这个目录结点下。 |
/opt | 这个/opt 目录被用来安装“可选的”软件。这个主要用来存储可能 安装在系统中的商业软件产品。 |
/proc | 这个/proc 目录很特殊。从存储在硬盘上的文件的意义上说,它不是真正的文件系统。 反而,它是一个由 Linux 内核维护的虚拟文件系统。它所包含的文件是内核的窥视孔。这些文件是可读的, 它们会告诉你内核是怎样监管计算机的。 |
/sbin | 这个目录包含“系统”二进制文件。它们是完成重大系统任务的程序,通常为超级用户保留。 |
/tmp | 这个/tmp 目录,是用来存储由各种程序创建的临时文件的地方。一些配置,导致系统每次 重新启动时,都会清空这个目录。 |
/usr | 在 Linux 系统中,/usr 目录可能是最大的一个。它包含普通用户所需要的所有程序和文件。 |
/usr/bin | /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。注意,为了系统安全,在一些系统中, 你必须是超级用户才能查看这些日志文件。 |
通配符 | 意义 |
---|---|
* | 匹配任意多个字符(包括零个或一个) |
? | 匹配任意一个字符(不包括零个) |
[characters] | 匹配任意一个属于字符集中的字符 |
[!characters] | 匹配任意一个不是字符集中的字符 |
[[:class:]] | 匹配任意一个属于指定字符类中的字符 |
字符类 | 意义 |
---|---|
[:alnum:] | 匹配任意一个字母或数字 |
[:alpha:] | 匹配任意一个字母 |
[:digit:] | 匹配任意一个数字 |
[:lower:] | 匹配任意一个小写字母 |
[ | 匹配任意一个大写字母 |
cp /mv
cp
选项 | 意义 |
---|---|
-a, —archive | 复制文件和目录,以及它们的属性,包括所有权和权限。 通常,复本具有用户所操作文件的默认属性。 |
-i, —interactive | 在重写已存在文件之前,提示用户确认。如果这个选项不指定, cp 命令会默认重写文件。 |
-r, —recursive | 递归地复制目录及目录中的内容。当复制目录时, 需要这个选项(或者-a 选项)。 |
-u, —update | 当把文件从一个目录复制到另一个目录时,仅复制 目标目录中不存在的文件,或者是文件内容新于目标目录中已经存在的文件。 |
-v, —verbose | 显示翔实的命令操作信息 |
cp file1 file2 dir1 | 多个文件cp |
-a, —archive | 复制文件和目录,以及它们的属性,包括所有权和权限。 通常,复本具有用户所操作文件的默认属性。 |
mv的i u v与cp相同
命令
type command 显示command 的用法
man command 手册
手册页的顺序
章节 内容 1 用户命令 2 程序接口内核系统调用 3 C 库函数程序接口 4 特殊文件,比如说设备结点和驱动程序 5 文件格式 6 游戏娱乐,如屏幕保护程序 7 其他方面 8 系统管理员命令 有时候,我们需要查看参考手册的特定章节,从而找到我们需要的信息。 如果我们要查找一种文件格式,而同时它也是一个命令名时,这种情况尤其正确。 没有指定章节号,我们总是得到第一个匹配项,可能在第一章节。我们这样使用 man 命令, 来指定章节号:
man section search_term
例如:
[me@linuxbox ~]$ man 5 passwd
命令运行结果会显示文件 /etc/passwd 的文件格式说明手册。
可以把多个命令放在同一行上,命令之间 用”;”分开
alias unalias
重定向
将错误也重定向到同一个文件
ls -l /bin/usr &> ls-output.txt
cat输入完之后按ctrl+d
uniq删除重复行,uniq -d看到重复行
ls /bin /usr/bin | sort | uniq -d | less
wc(字计数)命令是用来显示文件所包含的行,字和字节数 wc -l
只显示行数
head -n 5
tail -n 5
tail -f /var/log/messages
使用”-f”选项,tail 命令继续监测这个文件,当新的内容添加到文件后,它们会立即 出现在屏幕上。这会一直继续下去直到你输入 Ctrl-c。
tee - 从 Stdin 读取数据,并同时输出到 Stdout 和文件
... | tee output.txt | ...
括号展开
echo Number_{1..5}
echo {Z..A}
echo a{A{1,2},B{3,4}}b
aA1b aA2b aB3b aB4b
展开变量列表
printenv | less
$()把括号内的值替换括号
如果你把文本放在双引号中, shell 使用的特殊字符,除了 $
,\
(反斜杠),和 `(倒引号)之外, 则失去它们的特殊含义,被当作普通字符来看待。
如果需要禁止所有的展开,我们使用单引号
[me@linuxbox ~]$ echo text ~/*.txt {a,b} $(echo foo) $((2+2)) $USER
text /home/me/ls-output.txt a b foo 4 me
[me@linuxbox ~]$ echo "text ~/*.txt {a,b} $(echo foo) $((2+2)) $USER"
text ~/*.txt {a,b} foo 4 me
[me@linuxbox ~]$ echo 'text ~/*.txt {a,b} $(echo foo) $((2+2)) $USER'
text ~/*.txt {a,b} $(echo foo) $((2+2)) $USER
echo 命令带上 ‘-e’ 选项,能够解释转义序列
键盘操作
表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 | 把从光标位置到字尾的字符转换成大写字母。 |
表9-3: 剪切和粘贴命令
按键 | 行动 |
---|---|
Ctrl-k | 剪切从光标位置到行尾的文本。 |
Ctrl-u | 剪切从光标位置到行首的文本。 |
Alt-d | 剪切从光标位置到词尾的文本。 |
Alt-Backspace | 剪切从光标位置到词头的文本。如果光标在一个单词的开头,剪切前一个单词。 |
Ctrl-y | 把剪切环中的文本粘贴到光标位置。 |
用户
setuid 位(八进制4000)。当应用到一个可执行文件时,它把有效用户 ID 从真正的用户(实际运行程序的用户)设置成程序所有者的 ID。比如我来跑root的文件,执行的用户是root
setgid 位(八进制2000),这个相似于 setuid 位,把有效用户组 ID 从真正的 用户组 ID 更改为文件所有者的组 ID。如果设置了一个目录的 setgid 位,则目录中新创建的文件 具有这个目录用户组的所有权,而不是文件创建者所属用户组的所有权。对于共享目录来说, 当一个普通用户组中的成员,需要访问共享目录中的所有文件,而不管文件所有者的主用户组时, 那么设置 setgid 位很有用处。
sudo chmod g+s /usr/local/share/Music
这会保证在目录中新建的文件用户组是目录的用户组
此外系统中默认的掩码值是0022,这会禁止用户组成员编辑属于同组成员的文件。umask 0002
chmod 命令符号表示法
u | ”user”的简写,意思是文件或目录的所有者。 |
g | 用户组。 |
o | ”others”的简写,意思是其他所有的人。 |
a | ”all”的简写,是”u”, “g”和“o”三者的联合。 |
chmod 符号表示法实例
u+x | 为文件所有者添加可执行权限。 |
u-x | 删除文件所有者的可执行权限。 |
+x | 为文件所有者,用户组,和其他所有人添加可执行权限。 等价于 a+x。 |
o-rw | 除了文件所有者和用户组,删除其他人的读权限和写权限。 |
go=rw | 给群组的主人和任意文件拥有者的人读写权限。如果群组的主人或全局之前已经有了执行的权限,他们将被移除。 |
u+x,go=rw | 给文件拥有者执行权限并给组和其他人读和执行的权限。多种设定可以用逗号分开。 |
su -c 'command'
使用这种模式,命令传递到一个新 shell 中执行。把命令用单引号引起来很重要,因为我们不想 命令在我们的 shell 中展开,但需要在新 shell 中展开。
更改文件所有者和用户组
chown [owner][:[group]] file...
passwd [user]改密码
进程
ps aux
BSD 风格的 ps 命令列标题
标题 | 意思 |
---|---|
USER | 用户 ID. 进程的所有者。 |
%CPU | 以百分比表示的 CPU 使用率 |
%MEM | 以百分比表示的内存使用率 |
VSZ | 虚拟内存大小 |
RSS | 进程占用的物理内存的大小,以千字节为单位。 |
START | 进程运行的起始时间。若超过24小时,则用天表示。 |
命令之后,加上”&”字符 放到后台运行
jobs
列出从终端中启动的任务。
放到前台
fg %1 (job number)
ctrl+Z 停止,可以用bg移入后台
编号 | 名字 | 含义 | |
---|---|---|---|
1 | HUP | 挂起。这是美好往昔的痕迹,那时候终端机通过电话线和调制解调器连接到 远端的计算机。这个信号被用来告诉程序,控制的终端机已经“挂起”。 通过关闭一个终端会话,可以说明这个信号的作用。发送这个信号到终端机上的前台程序,程序会终止。许多守护进程也使用这个信号,来重新初始化。这意味着,当发送这个信号到一个守护进程后, 这个进程会重新启动,并且重新读取它的配置文件。Apache 网络服务器守护进程就是一个例子。 | |
2 | INT | 中断。实现和 Ctrl-c 一样的功能,由终端发送。通常,它会终止一个程序。 | |
9 | KILL | 杀死。这个信号很特别。鉴于进程可能会选择不同的方式,来处理发送给它的 信号,其中也包含忽略信号,这样呢,从不发送 Kill 信号到目标进程。而是内核立即终止 这个进程。当一个进程以这种方式终止的时候,它没有机会去做些“清理”工作,或者是保存劳动成果。 因为这个原因,把 KILL 信号看作杀手锏,当其它终止信号失败后,再使用它。 | |
15 | TERM | 终止。这是 kill 命令发送的默认信号。如果程序仍然“活着”,可以接受信号,那么 这个信号终止。 | |
18 | CONT | 继续。在停止一段时间后,进程恢复运行。 | |
19 | STOP | 停止。这个信号导致进程停止运行,而没有终止。像 KILL 信号,它不被 发送到目标进程,因此它不能被忽略。 | |
3 | QUIT | 退出 | |
11 | SEGV | 段错误。如果一个程序非法使用内存,就会发送这个信号。也就是说, 程序试图写入内存,而这个内存空间是不允许此程序写入的。 | |
20 | TSTP | 终端停止。当按下 Ctrl-z 组合键后,终端发送这个信号。不像 STOP 信号, TSTP 信号由目标进程接收,且可能被忽略。 | |
28 | WINCH | 改变窗口大小。当改变窗口大小时,系统会发送这个信号。 一些程序,像 top 和 less 程序会响应这个信号,按照新窗口的尺寸,刷新显示的内容。 |
shell环境
printenv和set可以查看环境变量
建议在 .bash_profile
里加一句让它自动加载 .bashrc
:
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi
环境变量放在 .bash_profile
,而别名、函数、shell 选项等放在 .bashrc
(一般只在交互式终端中使用)。
$PS1存放了你的提示符的值
网络
netstat -ie看接口,-r看路由表
查找文件
locate 程序快速搜索路径名数据库,并且输出每个与给定字符串相匹配的文件名。比
find
- find ~ -type d/f -name ”*.JPG” -size +1M
find 测试条件
测试条件 | 描述 |
---|---|
-cmin n | 匹配的文件和目录的内容或属性最后修改时间正好在 n 分钟之前。 指定少于 n 分钟之前,使用 -n,指定多于 n 分钟之前,使用 +n。 |
-cnewer file | 匹配的文件和目录的内容或属性最后修改时间早于那些文件。 |
-ctime n | 匹配的文件和目录的内容和属性最后修改时间在 n*24小时之前。 |
-empty | 匹配空文件和目录。 |
-group name | 匹配的文件和目录属于一个组。组可以用组名或组 ID 来表示。 |
-iname pattern | 就像-name 测试条件,但是不区分大小写。 |
-inum n | 匹配的文件的 inode 号是 n。这对于找到某个特殊 inode 的所有硬链接很有帮助。 |
-mmin n | 匹配的文件或目录的内容被修改于 n 分钟之前。 |
-mtime n | 匹配的文件或目录的内容被修改于 n*24小时之前。 |
-name pattern | 用指定的通配符模式匹配的文件和目录。 |
-newer file | 匹配的文件和目录的内容早于指定的文件。当编写 shell 脚本,做文件备份时,非常有帮助。 每次你制作一个备份,更新文件(比如说日志),然后使用 find 命令来决定自从上次更新,哪一个文件已经更改了。 |
-nouser | 匹配的文件和目录不属于一个有效用户。这可以用来查找 属于删除帐户的文件或监测攻击行为。 |
-nogroup | 匹配的文件和目录不属于一个有效的组。 |
-perm mode | 匹配的文件和目录的权限已经设置为指定的 mode。mode 可以用 八进制或符号表示法。 |
-samefile name | 相似于-inum 测试条件。匹配和文件 name 享有同样 inode 号的文件。 |
-size n | 匹配的文件大小为 n。 |
-type c | 匹配的文件类型是 c。 |
-user name | 匹配的文件或目录属于某个用户。这个用户可以通过用户名或用户 ID 来表示。 |
find ~ \( -type f -not -perm 0600 \) -or \( -type d -not -perm 0700 \)
-and -or -not
find预定义操作
预定义的 find 命令操作
操作 | 描述 |
---|---|
-delete | 删除当前匹配的文件。 |
-ls | 对匹配的文件执行等同的 ls -dils 命令。并将结果发送到标准输出。 |
把匹配文件的全路径名输送到标准输出。如果没有指定其它操作,这是 默认操作。 | |
-quit | 一旦找到一个匹配,退出。 |
-exec command {} ; | -exec rm ’{}’ ’;’ 因为;和{}需要被转义 |
-ok | 每次exec会询问用户 |
通过把末尾的分号改为加号,就激活了 find 命令的一个功能,把搜索结果结合为一个参数列表, 然后执行一次所期望的命令
xargs它从标准输入接受输入,并把输入转换为一个特定命令的 参数列表