Linux文件系统及常用Bash Shell
常见Linux目录名称
| 目录 | 用途 |
|---|---|
| / | 虚拟目录的根目录,通常不会在这里存储文件 |
| /bin | 二进制目录,存放许多用户级GNU工具 |
| /boot | 启动目录,存放启动文件 |
| /dev | 设备目录,Linux在这里创建设备节点 |
| /etc | 系统配置文件目录 |
| /home | 主目录,Linux在这里创建用户目录 |
| /lib | 库目录,存放系统和应用程序的库文件 |
| /media | 媒体目录,可移动媒体设备的常用挂载点 |
| /mnt | 挂在目录,另一个可移动媒体设备的常用挂载点 |
| /opt | 可选目录,常用于存放第三方软件包和数据文件 |
| /proc | 进程目录,存放现有硬件及当前进程的相关信息 |
| /root | root用户的主目录 |
| /sbin | 系统二进制目录,存放许多GNU管理员级工具 |
| /run | 运行目录,存放系统运作时的运行时数据 |
| /srv | 服务目录,存放本地服务的相关文件 |
| /sys | 系统目录,存放系统硬件信息的相关文件 |
| /tmp | 临时目录,可以在该目录中创建和删除临时工作文件 |
| /usr | 用户二进制目录,大量用户级的GNU工具和数据文件都存储在这里 |
| /var | 可变目录,用以存放经常变化的文件,比如日志文件 |
遍历目录
命令 cd
cd destination
cd命令可接受单个参数destination,用以指定想切换到的目录名。如果没有参数则切换到用户主目录。
destination参数可以用两种方式表示,一种是使用绝对文件路径,另一种是使用相对文件路径。
- 1.绝对文件路径
绝对文件路径定义了在虚拟目录结构中该目录的确切位置,相当于目录全名。
命令 pwd
pwd
获取当前目录位置
- 2.相对文件路径
相对文件路径允许用户指定一个基于当前位置的目标文件位置。
-
单点符,表示当前目录;
-
双点符,表示当前目录的父级目录
命令 ls
ls
ls 最基本的形式会显示当前目录下的文件和目录
ls -F
-F 参数在目录后加/,以方便用户分辨目录或文件,可执行文件后加星号
ls -a
-a 参数把隐藏文件和普通文件及目录一起显示出来。
ls -R
-R 参数递归列出当前目录下包含的子目录中的文件。
ls -l
-l 参数会产生长列表输出,包含了目录中每个文件的更多相关信息。
包含如下信息:
- 文件类型,比如目录(d),文件(-),字符型文件©或块设备(b);
- 文件的权限;
- 文件的硬链接总数;
- 文件属主的用户名;
- 文件属主的组名;
- 文件的大小(以字节为单位);
- 文件上次修改时间;
- 文件名或目录名;
过滤输出列表
指定文件的名称
ls -l my_script
- 问号(?)代表一个字符
- 星号(*)代表零个或多个字符
ls -l my_scr?pt
ls -l my*
ls -l my_s*t
元字符通配用[ ]
ls -l my_scr[ai]pt
也可以是字母范围
ls -l f[a-i]ll
也可以将不需要的内容排除
ls -l f[!a]ll
命令 touch
touch test_one
touch用来创建空文件
touch还用来改变文件修改时间,这个操作不需要改变文件的内容
touch -a test_one
ls -l --time=atime test_one
-a 参数只改变访问时间,ls -l命令只默认显示修改时间
命令 cp
cp source destination
当source和destination参数都是文件名时,cp命令将源文件复制成一个新文件,并且以destination命名。新文件就像全新的文件一样,有新的修改时间。
cp test_one test_two
新文件test_two和文件test_one的修改时间并不一样,如果目标文件已经存在,cp命令并不会提醒。
cp -i test_one test_two
-i 参数会询问是否需要覆盖文件,如果不回答y则复制不会继续
cp -R Scripts/ Mod_Scripts
-R 参数会将原目录递归的复制整个目录内容
cp *script Mod_Scripts/
也可以在cp命令中使用通配符
ln 命令
- 软链接
- 硬链接
ln -s data_file sl_data_file
软链接就是一个实实在在的文件,它指向存放在虚拟目录结构中某个地方的另一个文件,这两个文件通过软链接在一起,彼此的内容并不相同。要创造软链接原始文件必须存在。
ln code_file hl_code_file
硬链接会创建独立的虚拟文件,其中包含了原始文件的信息及位置,但是它们从根本上而言是一个文件,引用硬链接文件等同于引用了源文件。
mv 命令
mv命令可以将文件和目录移动到另一个位置或重新命名
mv fall fzll
注:inode编号和时间戳保持不变,因为mv只影响文件名或文件位置
rm 命令
rm -i fall
-i 参数提示是否要真的删除该文件
rm -i f?ll
也可以使用通配符删除成组的文件
rm -f f?ll
-f参数会使删除不受提示符打扰
mkdir 命令
mkdir New_Dir
创建一个以d开头的目录
mkdir -p New_Dir/Sub_Dir/Under_Dir
-p 参数可以根据需要创建缺失的父目录
tree 命令
tree Small_Dir
tree命令可以以一种美观的方式展示目录
cat 命令
cat test1
cat命令是显示文本文件所有数据的工具
cat -n test1
-n 参数会给所有行加上行号
cat -b test1
-b 参数只给有文本的行加上行号
cat -T test1
-T 参数会用^I字符组合去替换所有的制表符
more 命令
more /etc/bash.bashrc
cat的主要缺陷是一旦运行就无法控制后面的操作,more命令会在每页数据之后停下来
less 命令
less命令是more的升级版
tail 命令
tail log_file
tail命令会显示文件最后几行的内容,默认情况下它会显示该文件的末尾10行
tail -n 2 log_file
-n 参数可以修改所显示的行数
-f 参数是一个突出特性,它允许其他进程使用该文件时查看文件的内容
head 命令
head顾名思义会显示开头的那几行
head -5 log_file
它也支持-n参数,也可以直接在破折号后直接接数字
ps 命令
在默认的情况下,ps只显示运行在当前控制台下属于当前用户的进程
- Unix风格的参数,前面加单破折线;
- BSD风格的参数,前面不加破折线;
- GNU风格的长参数,前面加双破折线
Unix风格的参数
| 参数 | 描述 |
|---|---|
| -A | 显示所有进程 |
| -N | 显示与指定参数不符的所有进程 |
| -a | 显示除控制进程(session leader)和无终端进程外的所有进程 |
| -d | 显示除控制进程外的所有进程 |
| -e | 显示所有进程 |
| -C cmdlist | 显示包含在cmdlist列表中的进程 |
| -G grplist | 显示组ID在grplist列表中的进程 |
| -U userlist | 显示属主的用户ID在userlist列表中的进程 |
| -g grplist | 显示会话或组ID在grplist列表中的进程 |
| -p pidlist | 显示PID在pidlist列表中的进程 |
| -s sesslist | 显示会话ID在sesslist列表中的进程 |
| -t ttylist | 显示终端ID在ttylist列表中的进程 |
| -u userlist | 显示有效用户ID在userlist列表中的进程 |
| -F | 显示更多额外输出(相对-f参数而言) |
| -O format | 显示默认的输出列以及format列表指定的特定列 |
| -M | 显示进程的安全信息 |
| -c | 显示进程的额外调度器信息 |
| -f | 显示完整格式的输出 |
| -j | 显示任务信息 |
| -l | 显示长列表 |
| -o format | 仅显示由format指定的列 |
| -y | 不要显示进程标记(process flag,表明进程状态的标记) |
| -Z | 显示安全标签(security context)信息 |
| -H | 用层级格式来显示进程(树状,用来显示父进程) |
| -n namelist | 定义了WCHAN列显示的值 |
| -w | 采用宽输出模式,不限宽度显示 |
| -L | 显示进程中的线程 |
| -V | 显示ps命令的版本号 |
BSD风格的参数
| 参数 | 描述 |
|---|---|
| T | 显示跟当前终端关联的所有进程 |
| a | 显示跟任意终端关联的所有进程 |
| g | 显示所有进程,包括控制进程 |
| r | 仅显示运行中的进程 |
| x | 显示所有的进程,甚至包括未分配任何终端的进程 |
| U userlist | 显示归userlist列表中某用户ID所有的进程 |
| p pidlist | 显示PID在pidlist列表中的进程 |
| t ttylist | 显示所关联的终端在ttylist列表中的进程 |
| O format | 除了默认输出的列之外,还输出由format指定的列 |
| X | 按过去的Linux i386寄存器格式显示 |
| Z | 将安全信息添加到输出中 |
| j | 显示任务信息 |
| l | 采用长模式 |
| o format | 仅显示由format指定的列 |
| s | 采用信号格式显示 |
| u | 采用基于用户的格式显示 |
| v | 采用虚拟内存格式显示 |
| N namelist | 定义在WCHAN列中使用的值 |
| O order | 定义显示信息列的顺序 |
| S | 将数值信息从子进程加到父进程上,比如CPU和内存的使用情况 |
| c | 显示真实的命令名称(用以启动进程的程序名称) |
| e | 显示命令使用的环境变量 |
| f | 用分层格式来显示进程,表明哪些进程启动了哪些进程 |
| h | 不显示头信息 |
| k sort | 指定用以将输出排序的列 |
| n | 和WCHAN信息一起显示出来,用数值来表示用户ID和组ID |
| w | 为较宽屏幕显示宽输出 |
| H | 将线程按进程来显示 |
| m | 在进程后显示线程 |
| L | 列出所有格式指定符 |
| V | 显示ps命令的版本号 |
- VSZ:进程在内存中的大小,以千字节(KB)为单位
- RSS:进程在未换出时占用的物理内存
- STAT:代表当前进程状态的双字符状态码
- <:该进程运行在高优先级上
- N:该进程运行在低优先级上
- L:该进程有页面锁定在内存中
- s:该进程是控制进程
- l:该进程是多线程的
- +:该进程运行在前台
GNU长参数
| 参数 | 描述 |
|---|---|
| –deselect | 显示所有进程,除了命令行中列出的进程 |
| –Group grplist | 显示组ID在grplist列表中的进程 |
| –User grplist | 显示用户ID在userlist列表中的进程 |
| –group grplist | 显示有效组ID在grplist列表中的进程 |
| –pid pidlist | 显示PID在pidlist列表中的进程 |
| –ppid pidlist | 显示父PID在pidlist列表中的进程 |
| –sid sidlist | 显示会话ID在sidlist列表中的进程 |
| –tty ttylist | 显示终端设备号在ttylist列表中的进程 |
| –user userlist | 显示有效用户ID在userlist列表中的进程 |
| –format format | 仅显示由format指定的列 |
| –context | 显示额外的安全信息 |
| –cols n | 将屏幕宽度设置为n列 |
| –columns n | 将屏幕宽度设置为n列 |
| –cumulative | 包含已停止的子进程的信息 |
| –forest | 用层级结构显示出进程和父进程之间的关系 |
| –headers | 在每页输出中都显示列的头 |
| –no-headers | 不显示列的头 |
| –lines n | 将屏幕高度设计为n行 |
| –rows n | 将屏幕高度设为n排 |
| –sort order | 指定将输出按哪列排序 |
| –width n | 将屏幕宽度设计为n列 |
| –help | 显示帮助信息 |
| –info | 显示调试信息 |
| –version | 显示ps命令的版本号 |
top 命令
- PID:进程的ID
- USER:进程属主的名字
- PR:进程的优先级
- NI:进程的谦让度值
- VIRT:进程占用的虚拟内存总量
- RES:进程占用的物理内存总量
- SHR:进程和其他进程共享的内存总量
- S:进程状态(D代表可终端的休眠状态,R代表在运行状态,S代表休眠状态,T代表跟踪状态或停止状态,Z代表僵化状态)
- %CPU:进程使用的CPU时间比例
- %MEM:进程使用的内存占可用内存的比例
- TIME+:自进程启动到目前为止的CPU时间总量
- COMMAND:进程所对应的命令行名称,也就是启动的程序名
Linux进程信号
| 信号 | 名称 | 描述 |
|---|---|---|
| 1 | HUP | 挂起 |
| 2 | INT | 中断 |
| 3 | QUIT | 结束运行 |
| 9 | KILL | 无条件终止 |
| 11 | SEGV | 段错误 |
| 15 | TERM | 尽可能终止 |
| 17 | STOP | 无条件停止运行,但不终止 |
| 18 | TSTP | 停止或暂停,但继续在后台运行 |
| 19 | CONT | 在STOP或TSTP之后恢复执行 |
kill 命令
kill命令会向命令行中列出的全部PID发送一个TERM信号
kill 3940
kill -s HUP 3940
kill -s 参数支持指定其他信号
killall 命令
killall命令非常强大,它支持通过进程名而不是PID来结束进程
find 命令
find [path] [options] [tests] [actions]
find的选项
| 选项 | 含义 |
|---|---|
| -depth | 在查看目录本身之前先搜索目录的内容 |
| -follow | 跟随符号链接 |
| -maxdepths N | 最多搜索N层目录 |
| -mount(或-xdev) | 不搜索其他文件系统中的目录 |
测试部分,测试返回的结果为true或false。find命令开始工作时,它按照顺序将定义的每种测试依次应用到它搜索到的每个文件上。
测试参数
| 测试 | 含义 |
|---|---|
| -atime N | 文件在N天之前被最后访问过 |
| -mtime N | 文件在N天之前被最后修改过 |
| -name pattern | 文件名(不包括路径名)匹配提供的模式pattern为了确保pattern被传递给find命令而不是shell来处理,pattern必须总是用引号扩起 |
| -newer otherfile | 文件比otherfile文件要新 |
| -type c | 文件的类型为c,c是一个特殊类型,最常见的是d(目录),f(普通文件) |
| -user username | 文件的拥有者时指定的用户username |
测试的操作符
| 操作符,短格式 | 操作符,长格式 | 含义 |
|---|---|---|
| ! | -not | 测试取反 |
| -a | -and | 两个测试都必须是真 |
| -o | -or | 两个测试有一个必为真 |
动作参数
| 动作 | 含义 |
|---|---|
| -exec command | 执行一条命令,这个动作必须使用;结束 |
| -ok command | 与-exec类似,但它在执行命令前会针对每个要处理的文件提示确认,这个动作必须使用;结束 |
| 打印文件名 | |
| -ls | 对当前文件使用命令ls-dils |
grep命令
grep [options] PATTERN [FILES]
选项参数
| 选项 | 含义 |
|---|---|
| -c | 输出匹配行的数目,而不是输出匹配的行 |
| -E | 启用扩展表达式 |
| -h | 取消每个输出行的普通前缀,即匹配查询模式的文件名 |
| -i | 忽略大小写 |
| -l | 只列出包含匹配行的文件名,二不输出真正的匹配行 |
| -v | 对匹配模式取反,即搜索不匹配行而不是匹配行 |










