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
- 2.相对文件路径
相对文件路径允许用户指定一个基于当前位置的目标文件位置。
-
单点符,表示当前目录;
-
双点符,表示当前目录的父级目录
pwd
获取当前目录位置
命令 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 | 对匹配模式取反,即搜索不匹配行而不是匹配行 |