linux命令
cd 打开路径 cd/usr/local
pwd 显示当前路径
ls 显示当前路径下的文件名
-a 显示隐藏文件 隐藏文件:是以.开头命名的文件
-F 显示文件是否为文件或者文件夹或可执行文件
-R 迭代,显示当前路径或路径下的所有文件
-l 输出详细信息 默然显示修改时间
-d 只当前目录本身的信息,不列出其中的内容。
组合命令:ls -aFR
ls -l 文件名(*|?|!|[a-z]) 过滤命名,显示当前文件详情
touch 创建空文件
touch 文件名 如果文件不存在,则创建空文件,如果存在则修改修改时间
touch -a 文件名 如果文件不存在,则创建空文件,修改访问时间
cp 源文件名 目标文件名 复制源文件到目标文件
-i 询问是否覆盖已存在文件 如果不不存在则不询问
cp /usr/local/test.sh . 复制test.sh到当前目录下
-R 迭代文件夹中的全部文件并复制
tab键可以补全路径文件名等
链接文件是Linux文件系统的一个优势。如需要在系统上维护同一文件的两份或多份副本,除了保存多份单独的物理文件副本之外,
还可以采用保存一份物理文件副本和多个虚拟副本的方法。这种虚拟的副本就称为链接。链接是目录中指向文件真实位置的占位符。在Linux中有两种
不同类型的文件链接:
符号链接 存在实实在在的文件 ln -s 文件名 生成的链接文件名
硬链接 不存在的虚拟文件 ln 文件名 生成的链接文件名
mv 可以将文件和目录移动到另一个位置或重新命名
mv 源路径文件 目标路径文件 如果目标路径文件名与源路径文件名一致,则仅做移动文件操作,不修改文件名
inode编号和时间戳保持不变。这是因为mv只影响文件名。也可以使用mv来移动文件的位置。
在Linux中,删除(deleting)叫作移除(removing)①。bash shell中删除文件的命令是rm。rm命令的基本格式非常简单。
-i 询问是否删除文件 y删除 n不删除
-f 如果要删除很多文件且不受提示符的打扰,可以用-f参数强制删除。小心为妙!
-r 选项使得命令可以向下进入目录,删除其中的文件,然后再删除目录本身。
mkdir 创建目录
-p 多级目录 mkdir /usr/local/test/test1/test2
rmdir
默认情况下,rmdir命令只删除空目录。因为我们在New_Dir目录下创建了一个文件my_file,
所以rmdir命令拒绝删除目录。
要解决这一问题,得先把目录中的文件删掉,然后才能在空目录上使用rmdir命令。
file 查询文件类型
cat 查询文本
-n 每行加上行号
-b 有文本的行加行号
-T 不显示制表符
对大型文件来说,cat命令有点繁琐。文件的文本会在显示器上一晃而过。
more 命令只支持文本文件中的基本移动
less 上下键以及上下翻页键<推荐使用查看文本>
q退出查看
tail 命令会显示文件最后几行的内容(文件的“尾部”)。默认情况下,它会显示文件的末尾10行。
tail -2 文件名 只显示文件的最后两行
tail -f 它允许你在其他进程使用该文件时查看文件的内容。tail命令会保持活动状态,并不断显示添加到文件中的内容。这是实时监测系统日志的绝妙方式。
tomcat 日志输出文件是catalina.out,使用命令tail -f catalina.out就可以动态查看日志了
head 会显示文件开头那些行的内容。默认情况下,它会显示文件前10行的文本
-n n为数字,显示文件的头n行
-f 类型tail的-f参数的含义
系统管理的shell命令
进程(process)
ps 默认情况下,只会显示运行在当前控制台下的属于当前用户的进程。<只能显示某个特定时间点的信息>
-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命令的版本号
//more
ps 默认输出列
UID:启动这些进程的用户。
PID:进程的进程ID。
PPID:父进程的进程号(如果该进程是由另一个进程启动的)。
C:进程生命周期中的CPU利用率。
STIME:进程启动时的系统时间。
TTY:进程启动时的终端设备。
TIME:运行进程需要的累计CPU时间。
CMD:启动的程序名称。
ps -l增加输出的列
F:内核分配给进程的系统标记。
S:进程的状态(O代表正在运行;S代表在休眠;R代表可运行,正等待运行;Z代表僵化,进程已结束但父进程已不存在;T代表停止)。
PRI:进程的优先级(越大的数字代表越低的优先级)。
NI:谦让度值用来参与决定优先级。
ADDR:进程的内存地址。
SZ:假如进程被换出,所需交换空间的大致大小。
WCHAN:进程休眠的内核函数的地址。
top 命令雷士ps命令,但是能动态显示信息
输出的第一部分显示的是系统的概况:第一行显示了当前时间、系统的运行时间、登录的用户数以及系统的平均负载。
平均负载有3个值:最近1分钟的、最近5分钟的和最近15分钟的平均负载。值越大说明系统
的负载越高。由于进程短期的突发性活动,出现最近1分钟的高负载值也很常见,但如果近15分
钟内的平均负载都很高,就说明系统可能有问题。
<重点地方>
Linux系统管理的要点在于定义究竟到什么程度才算是高负载。这个值取决于系统的硬件
配置以及系统上通常运行的程序。对某个系统来说是高负载的值可能对另一系统来说就
是正常值。通常,如果系统的负载值超过了2,就说明系统比较繁忙了。
第二行显示了进程概要信息——top命令的输出中将进程叫作任务(task):有多少进程处在
运行、休眠、停止或是僵化状态(僵化状态是指进程完成了,但父进程没有响应)。
下一行显示了CPU的概要信息。top根据进程的属主(用户还是系统)和进程的状态(运行、
空闲还是等待)将CPU利用率分成几类输出。
紧跟其后的两行说明了系统内存的状态。第一行说的是系统的物理内存:总共有多少内存,
当前用了多少,还有多少空闲。后一行说的是同样的信息,不过是针对系统交换空间(如果分配
了的话)的状态而言的。
最后一部分显示了当前运行中的进程的详细列表,有些列跟ps命令的输出类似。
PID:进程的ID。
USER:进程属主的名字。
PR:进程的优先级。
NI:进程的谦让度值。
VIRT:进程占用的虚拟内存总量。
RES:进程占用的物理内存总量。
SHR:进程和其他进程共享的内存总量。
S:进程的状态(D代表可中断的休眠状态,R代表在运行状态,S代表休眠状态,T代表
跟踪状态或停止状态,Z代表僵化状态)。
%CPU:进程使用的CPU时间比例。
%MEM:进程使用的内存占可用内存的比例。
TIME+:自进程启动到目前为止的CPU时间总量。
COMMAND:进程所对应的命令行名称,也就是启动的程序名。
默认情况下,top命令在启动时会按照%CPU值对进程排序。可以在top运行时使用多种交互
命令重新排序。每个交互式命令都是单字符,在top命令运行时键入可改变top的行为。键入f允
许你选择对输出进行排序的字段,键入d允许你修改轮询间隔。键入q可以退出top。用户在top
命令的输出上有很大的控制权。用这个工具就能经常找出占用系统大部分资源的罪魁祸首。当然
了,一旦找到,下一步就是结束这些进程。这也正是接下来的话题。
**Linux进程信号**
信号 名称 描 述
1 HUP 挂起
2 INT 中断
3 QUIT 结束运行
9 KILL 无条件终止
11 SEGV 段错误
15 TERM 尽可能终止
17 STOP 无条件停止运行,但不终止
18 TSTP 停止或暂停,但继续在后台运行
19 CONT 在STOP或TSTP之后恢复执行
kill 进程信号 进程ID(PID) 但是只能处理本账户权限下的进程(进程属主)
killall 命令非常强大,它支持通过进程名而不是PID来结束进程。killall命令也支持通
配符,这在系统因负载过大而变得很慢时很有用。
killall http* 例中的命令结束了所有以http开头的进程,比如Apache Web服务器的httpd服务。
<重要>
以root用户身份登录系统时,使用killall命令要特别小心,因为很容易就会误用通配符
而结束了重要的系统进程。这可能会破坏文件系统。
监测磁盘空间
mount 命令会输出当前系统上挂载的设备列表
mount命令提供如下四部分信息:
媒体的设备文件名
媒体挂载到虚拟目录的挂载点
文件系统类型
已挂载媒体的访问状态
上面例子的最后一行输出中,U盘被GNOME桌面自动挂载到了挂载点/media/disk。vfat文件
系统类型说明它是在Windows机器上被格式化的。
要手动在虚拟目录中挂载设备,需要以root用户身份登录,或是以root用户身份运行sudo命
令。下面是手动挂载媒体设备的基本命令:
mount -t type device directory
type参数指定了磁盘被格式化的文件系统类型。Linux可以识别非常多的文件系统类型。如
果是和Windows PC共用这些存储设备,通常得使用下列文件系统类型。
vfat:Windows长文件系统。
ntfs:Windows NT、XP、Vista以及Windows 7中广泛使用的高级文件系统。
iso9660:标准CD-ROM文件系统。
大多数U盘和软盘会被格式化成vfat文件系统。而数据CD则必须使用iso9660文件系统类型。
后面两个参数定义了该存储设备的设备文件的位置以及挂载点在虚拟目录中的位置。比如
说,手动将U盘/dev/sdb1挂载到/media/disk,可用下面的命令:
mount -t vfat /dev/sdb1 /media/disk
媒体设备挂载到了虚拟目录后,root用户就有了对该设备的所有访问权限,而其他用户的访
问则会被限制。你可以通过目录权限(将在第7章中介绍)指定用户对设备的访问权限。
如果要用到mount命令的一些高级功能,表中列出了可用的参数。
mount命令的参数
参数 描述
-a 挂载/etc/fstab文件中指定的所有文件系统
-f 使mount命令模拟挂载设备,但并不真的挂载
-F 和-a参数一起使用时,会同时挂载所有文件系统
-v 详细模式,将会说明挂载设备的每一步
-I 不启用任何/sbin/mount.filesystem下的文件系统帮助文件
-l 给ext2、ext3或XFS文件系统自动添加文件系统标签
-n 挂载设备,但不注册到/etc/mtab已挂载设备文件中
-p num 进行加密挂载时,从文件描述符num中获得密码短语
-s 忽略该文件系统不支持的挂载选项
-r 将设备挂载为只读的
-w 将设备挂载为可读写的(默认参数)
-L label 将设备按指定的label挂载
-U uuid 将设备按指定的uuid挂载
-O 和-a参数一起使用,限制命令只作用到特定的一组文件系统上
-o 给文件系统添加特定的选项
-o参数允许在挂载文件系统时添加一些以逗号分隔的额外选项。以下为常用的选项。
ro:以只读形式挂载。
rw:以读写形式挂载。
user:允许普通用户挂载文件系统。
check=none:挂载文件系统时不进行完整性校验。
loop:挂载一个文件。
umount 支持通过设备文件或者是挂载点来指定要卸载的设备。如果有任何程序正在使用设备上的文件,系统就不会允许你卸载它
如果在卸载设备时,系统提示设备繁忙,无法卸载设备,通常是有进程还在访问该设备或使用该设备上的文件。
这时可用lsof命令获得使用它的进程信息,然后在应用中停止使用该设备或停止该进程。lsof命令的用法很简
单:lsof /path/to/device/node,或者lsof /path/to/mount/point。
df 命令可以让你很方便地查看所有已挂载磁盘的使用情况。
-h 转换成方便的数据
du 显示某个特定目录(默认情况下是当前目录)的磁盘使用情况。(包括目录下的子文件)列表是从目录层级的最底部开始,然后按文件、子目录、目录逐级向上
-c:显示所有已列出文件总的大小。
-h:按用户易读的格式输出大小,即用K替代千字节,用M替代兆字节,用G替代吉字节。
-s:显示每个输出参数的总计。
<重点部分>
排序数据
sort
sort命令按照会话指定的默认语言的排序规则对文本文件中的数据行排序。
如果你本期望这些数字能按值排序,就要失望了。默认情况下,sort命令会把数字当做字
符来执行标准的字符排序,产生的输出可能根本就不是你要的。解决这个问题可用-n参数,它会告诉sort命令把数字识别成数字而不是字符,并且按值排序。
-M,按月排序。Linux的日志文件经常会在每行的起始位置有一个时间戳,用来表明事件是什么时候发生的。
-b --ignore-leading-blanks 排序时忽略起始的空白
-C --check=quiet 不排序,如果数据无序也不要报告
-c --check 不排序,但检查输入数据是不是已排序;未排序的话,报告
-d --dictionary-order 仅考虑空白和字母,不考虑特殊字符
-f --ignore-case 默认情况下,会将大写字母排在前面;这个参数会忽略大小写
-g --general-number-sort 按通用数值来排序(跟-n不同,把值当浮点数来排序,支持科学
计数法表示的值)
-i --ignore-nonprinting 在排序时忽略不可打印字符
-k --key=POS1[,POS2] 排序从POS1位置开始;如果指定了POS2的话,到POS2位置结
束
-M --month-sort 用三字符月份名按月份排序
-m --merge 将两个已排序数据文件合并
-n --numeric-sort 按字符串数值来排序(并不转换为浮点数)
-o --output=file 将排序结果写出到指定的文件中
-R --random-sort 按随机生成的散列表的键值排序
--random-source=FILE 指定-R参数用到的随机字节的源文件
-r --reverse 反序排序(升序变成降序)
-S --buffer-size=SIZE 指定使用的内存大小
-s --stable 禁用最后重排序比较
-T --temporary-directory=DIR 指定一个位置来存储临时工作文件
-t --field-separator=SEP 指定一个用来区分键位置的字符
-u --unique 和-c参数一起使用时,检查严格排序;不和-c参数一起用时,仅输出第一例相似的两行
-z --zero-terminated 用NULL字符作为行尾,而不是用换行符
<重点部分>
搜索数据
grep 输入或指定的文件中查找包含匹配指定模式的字符的行。grep的输出就是包含了匹配模式的行。
下面两个简单的例子演示了使用grep命令来对4.3.1节中用到的文件file1进行搜索。
$ grep three file1
three
$ grep t file1
two
three
$
第一个例子在文件file1中搜索能匹配模式three的文本。grep命令输出了匹配了该模式的
行。第二个例子在文件file1中搜索能匹配模式t的文本。这个例子里,file1中有两行匹配了
指定的模式,两行都输出了。
如果要进行反向搜索(输出不匹配该模式的行),可加-v参数。
$ grep -v t file1
one
four
five
$
如果要显示匹配模式的行所在的行号,可加-n参数。
$ grep -n t file1
2:two
3:three
$
如果只要知道有多少行含有匹配的模式,可用-c参数。
$ grep -c t file1
2
$
如果要指定多个匹配模式,可用-e参数来指定每个模式。
$ grep -e t -e f file1
two
three
four
five
$
这个例子输出了含有字符t或字符f的所有行。