Linux笔记

117 阅读7分钟

Linux笔记

1. 未分类命令

可以在终端中用Ctrl + l组合键进行清屏,或者使用clear命令

重启/关机命令:

  1. reboot:立刻重启
  2. halt:立刻关机
  3. shutdown -r now:立刻重启(-r参数代表reboot
  4. shutdown -h now:立刻关机(-h参数代表halt
  5. shutdown -h 1 '系统将于一分钟后关机':给所有终端发送一条警告信息,然后一分钟后关机
  6. shutdown:默认一分钟后关机
  7. sync:将内存中的数据同步到磁盘中;Linux在重启或关机前都会执行该命令(但最好还是手动执行一下)

登录/注销命令:

  1. su - {username}:切换成指定用户登录(横杠可以省略?)
  2. exitlogout:注销登录,退回到上一个用户;如果没有上一个用户,则关闭终端

如果是Ubuntu系统,那么在切换到根用户前需要先为根用户设置密码(使用sudo passwd [root]命令)

ssh {user}@{ip}

  1. 用指定的用户远程登录到指定的主机上
  2. 如果访问出错,则可以尝试删除~/.ssh/known_ssh文件

运行级别:

  • 0:关机
  • 1:单用户状态;有root权限,用于系统维护,禁止远程登录;也可以用来找回根用户密码
  • 2:多用户状态,但没有网络服务
  • 3:多用户状态,且有网络服务(常用)
  • 4:该级别为保留级别,暂未使用
  • 5:图形界面(常用)
  • 6:系统重启
  • init {level}:切换到指定运行级别,比如init 6命令会让Linux重启
  • systemctl get-default:查看默认运行级别;graphical.target代表级别5
  • systemctl set-default {xxx.target}:设置默认运行级别,如设置成multi-user.target(级别3)
  • 注意,不能将默认运行级别设置成0或6

帮助命令:

  1. man {cmd}:查看指定命令的用户手册;空格键下一页,b键上一页,q键退出
  2. help {cmd}info {cmd}:和上面的类似

echo {text}

  1. 打印指定文本(即text
  2. 如果文本中包含空格等特殊字符,则最好用引号包起来,如:echo 'hello world!'
  3. 还可以打印环境变量,比如echo $HOSTNAME会把主机名称打印出来,类似的还有echo $PATH
  4. 还可以打印其它命令的执行结果,执行的命令用反引号包起来,比如echo `pwd`的效果和pwd是一样的

history [num]

  1. 查看已经执行过的命令
  2. 可以通过num参数来指定只显示最后num个命令
  3. !num命令可以用于执行历史记录中的第num条命令

crontab [-uelr]

  1. 和定时任务相关的命令,后台进程为crond
  2. -u:用于指定目标用户;如果不指定,则默认为当前用户
  3. -e:用vim编辑器来编辑用户的定时任务文件;文件的每一行(cron表达式 + 命令或脚本文件)代表一个定时任务
  4. -l:查询用户所有的定时任务
  5. -r:删除用户的定时任务文件
  6. 功能类似的还有at命令,用于执行一次性的定时任务(atq查询任务队列,atrm {num}删除指定编号的任务)

2. 文件(夹)命令

ls [-alhR] [dir]

  1. 默认用平铺的方式展示指定目录(即dir)下的所有可见的文件和文件夹
  2. 文件夹用深色(如蓝色)表示,普通文件用浅色(如白色)表示,可执行文件用绿色表示
  3. 当不指定dir时,默认取当前所在的目录(即工作目录)
  4. -a(即all):加了该参数后,会把隐藏的文件和文件夹(名称以.开头)也展示出来
  5. -l(即list):以列表的方式来展示,同时还会展示出文件和文件夹的更多信息(如大小,单位为字节)
  6. -h(即human):配合-l选项使用,会将文件和文件夹的大小用人性化的方式展示,比如一千字节会用1kb展示
  7. -R:对文件夹中的子文件夹也执行ls命令并展示其结果(递归)

当打开终端后,会将当前用户的家目录(即/home/{username},用~表示)作为工作目录

tree {dir}

  1. 以树状方式展示指定文件夹及其内部的所有文件和文件夹内容

cd [dir]

  1. Change Directory的缩写;将工作目录更改为指定目录(即dir
  2. 当不指定dir时,默认切换到当前用户的家目录,也就是说,cdcd ~的效果是一样的
  3. 可以通过绝对路径(以/开头)或相对路径(不以/开头,此时的参照路径为当前目录)来指定目标目录
  4. .代表当前目录,也就是说,cd acd ./a的效果是一样的
  5. ..代表上一级目录,可以通过cd ../..连退两级目录

cd ~/desktop可以直接切换到当前用户的家目录下的桌面文件夹

pwd

  1. Print Work Directory的缩写,打印出当前的工作目录的绝对路径

mkdir [-p] {dir}

  1. Make Directory的缩写,创建指定目录(即dir
  2. 这里的目录也支持绝对路径和相对路径,并且也可以使用..~等特殊路径符
  3. -p:(即parent):加了该参数后,会自动创建不存在的父目录,适用于创建多层级的目录

rmdir {dir}

  1. Remove Directory的缩写,删除指定目录(即dir);注意只能删除空目录

touch {path}

  1. 用于创建指定名称的空文件
  2. 如果文件已存在,则会修改该文件的时间戳

cat [-n] {path}

  1. 查看指定名称的文件,会直接将文件的所有内容展示出来
  2. -n:加上该参数后,会显示行号

more {path}

  1. 查看指定名称的文件,分页展示文件内容;是基于vi编辑器的文本过滤器
  2. 空格键下一页,b键上一页,q键退出,回车键下一行,=键显示当前页最后一行的行号
  3. 也可以直接用鼠标滚轮进行翻阅

less {path}

  1. more命令类似,但功能更强大;more命令能用的快捷键,less命令也能用
  2. 会根据显示需要来加载文件内容(而不是直接读取文件全部内容),因此适合用于查看大文件
  3. 输入/?,可以进行字符串搜索(分别是向下和向上搜索);搜索时,n是正方向找下一个,N是反方向找下一个

head/tail [-nf] {path}

  1. 查看指定文件的最开始/最末尾的若干行数据;默认显示10行
  2. -n:用于指定查看几行数据,比如head -n 5 xxx只会显示前5行,还可以简写成head -5 xxx
  3. -ftail命令才有的参数,会阻塞等待文件内容的变化(当文件末尾新增了一行时,会立刻打印这一行数据)

cut [-fdc] {path}

  1. 对指定文件中的每一行内容进行裁剪,并输出裁剪结果
  2. -c:用于指定要输出第几个字符,比如cut -c 1 xxx会将文件中每一行的第一个字符打印出来
  3. -d:用于指定要根据什么分隔符进行分割
  4. -f:需配合-d使用;用于指定要输出分割后的第几列(下标从1开始算)
  5. 比如,cut -d '/' -f 1 xxx就代表将文件中每一行的第一个/之前的数据打印出来

sort [-utknr] {path}

  1. 以行为单位对指定文件中的所有行进行排序
  2. -u:排序完成后进行去重
  3. -t/-k:和cut-d/-f类似,用于指定如何分割,并根据分割后的第几列(可以有多个)来进行排序
  4. 比如,sort -t '/' -k 3,4 xxx就代表先根据/进行切分,然后根据第3和第4列的值对这些行进行排序
  5. -n:将排序的列当作数字(而不是字符)来进行比较,避免出现10小于2的情况
  6. -r:倒序排序(从大到小)

uniq [-cdu] {path}

  1. 以行为单位对指定文件中的所有行进行去重;需要有序,因此一般配合sort命令使用
  2. -c:显示出现的次数
  3. -d/-u:只显示出现多次/只出现一次的行

awk [-F] {script} {path}

  1. 先对指定文件中的所有行进行分割,然后将分割后的行交给指定脚本进行处理
  2. -F:用于指定分隔符,默认为空格或制表符;支持正则表达式
  3. awk -F '/' '{print $3}' xxx命令和cut -d '/' -f 3 xxx类似

cp [-r] {src} {tar}

  1. Copy的缩写,将源文件或文件夹(即src)复制为目标文件或文件夹(即tar
  2. -r(即recursive):在复制文件夹时使用,会对文件夹中的内容进行复制,否则会报错(复制空文件夹也得加该参数)
  3. 比如,cp 1.txt a/2.txt会对1.txt文件进行复制,复制后的文件名称为2.txt,且会放到a文件夹中
  4. 比如,cp -r a d会对a文件夹及其内容进行复制,复制后的文件夹名称为d,且还是放到当前目录中
  5. 注意,如果tar是个已存在的文件夹,则会将src复制到tar文件夹中
  6. 当复制后的文件和已有文件冲突时:如果是根用户,则会提示是否覆盖,否则会直接进行覆盖

对于根用户,如果复制时冲突比较多,且不想一个一个确认的话,则可以用\cp命令直接覆盖所有冲突的文件

rm [-rf] {name}

  1. Remove的缩写,用于删除文件或文件夹
  2. -r:删除文件夹时使用,递归删除文件夹中的所有内容
  3. -f(即force):强制删除,不用提示是否删除

mv {from} {to}

  1. Move的缩写,移动文件或文件夹,也可以对文件或文件夹进行重命名,或者在移动的同时顺便进行重命名
  2. 相当于先复制源文件(夹),然后再删除源文件(夹),因此和cp命令类似
  3. 注意,在移动文件夹时,无需指定-r参数

ln -s {src} {name}

  1. 为指定文件或文件夹(即src)创建指定名称(即name,可以带有路径)的软链接(相当于快捷方式)
  2. 如果要删除软链接,则可以用rm命令;cp等命令也可以用于操作软链接

basename {file} [suffix]

  1. 获取某个文件的文件名称,不包含路径信息;也就是获取最后一个/后面的内容;文件可以不存在
  2. 比如,basename /root/abc/1.txt会打印1.txt
  3. 如果指定了后缀suffix,则会去掉文件名称中的该后缀
  4. 比如,basename /root/abc/1.txt .txt会打印1

dirname {file}

  1. 获取某个文件所在的文件夹,也就是获取最后一个/前面的内容

3. 特殊命令、时间命令

|

  1. 管道命令,将前面命令的输出内容交给后面的命令来处理
  2. 我们知道,cat命令能显示行号,但不能分页;而more命令能分页,却不支持显示行号
  3. 此时可以用管道命令将这两个命令连接起来,先用cat命令显示行号,再交给more命令分页:cat -n xxx | more

>

  1. 重定向命令,将前面命令的输出内容转移到目标文件中(覆盖)
  2. 比如,echo abc > 1.txt会将1.txt文件中的内容覆盖为abc
  3. 比如,cat 1.txt > 2.txt会将1.txt文件中的内容复制到2.txt文件中并覆盖原先的内容
  4. 如果目标文件不存在,则会自动创建

>>

  1. 重定向命令,将前面命令的输出内容转移到目标文件中(追加)
  2. 比如,echo abc >> 1.txt会将abc追加到1.txt文件末尾

cal [year]

  1. 如果不指定年份,则打印当前月份的日历
  2. 否则,打印指定年份12个月的日历

date [-s] [format/str]

  1. 打印当前时间或设置日期
  2. 可以通过format指定打印的格式,如:date '+%Y-%m-%d %H:%M:%S'(加号是必须的,%Y等代表占位符)
  3. 当添加了-s参数时,代表设置日期,此时可以通过str来指定目标日期,如:date -s '2000-01-01 00:00:00'

4. 搜索命令、压缩命令

find {dir} {-name|-user|-size|-atime|-mtime|-ctime} {param} [-exec xxx ;]

  1. 在指定目录(包括其子目录)中查找满足要求的所有文件
  2. -name:根据名称查找,可以使用*通配符(代表若干个字符),如:find / -name '*.txt'
  3. -user:查找属于指定用户的文件,用户名称不支持通配符,必须是个确定的名称
  4. -size:查找大于/等于/小于指定大小的文件;+1M1k-1G分别代表大于1M、等于1k、小于1G
  5. -atime|-mtime|-ctime:根据最近访问时间/最近修改时间/创建时间进行查找;+n代表超过n天,-n代表n天内
  6. -exec:该参数可以用于指定一条命令,这条命令会对所有查询到的文件生效;该命令需要用分号结尾,且分号需要转义

删除某个目录下的10天前创建的文件:find {dir} -ctime +10 -exec rm -rf {} ;

locate {name}

  1. 查找指定名称的文件
  2. 本命令是通过索引来进行查找的,因此效率很高
  3. 但是在执行本命令前,需要先执行updatedb命令更新索引,确保查找结果正确

which {cmd}

  1. 查看指定的命令对应的程序,比如ls命令对应的程序是/usr/bin/ls

grep [-niv] {text} {file}

  1. 在指定文件(即file)中查找包含指定文本(即text)的行,支持正则表达式
  2. -i:不区分大小写
  3. -n:显示行号
  4. -v:反向查找,即查找出不包含指定文本的行
  5. 一般配合管道命令使用,如:cat 1.txt | grep -n 'a'

命令的综合应用:可以通过ls -l xxx | grep '^-' | wc -l命令来统计某个目录下普通文件的个数

wc [-cmwl] {file}

  1. 统计指定文件中的字节数量(-c)、字符数量(-m)、单词数(-w)、行数(-l
  2. 如果不带任何参数,则显示行数、单词数、字节数量
  3. 如果只指定了-c参数,则只显示字节数量;其它的同理

gzip/gunzip {file}

  1. gzip可以对指定文件进行压缩,压缩文件名称为源文件名称后面拼上.gz后缀;源文件会被压缩文件替换
  2. gunzip可以对指定压缩文件进行解压,解压后的文件名称为源文件名称去掉.gz后缀;压缩文件会被解压后的文件替换

zip [-r] {tar} {src}

  1. 用于压缩指定文件或文件夹(即src),压缩后的文件名称为tar
  2. -r:代表压缩文件夹及其所有内容

unzip [-d xxx] {src}

  1. 用于将压缩文件(即src)解压为文件或文件夹
  2. -d:用于指定要解压到哪个目录,默认解压到当前目录

tar

  1. 打包压缩文件或文件夹,也可以用于解压文件;压缩文件类型为.tar.gz
  2. -c:压缩时使用,代表打包成.tar文件
  3. -x:解压时使用,代表对.tar文件进行解包
  4. -z:代表需要进行压缩或解压
  5. -v:显示详细信息
  6. -f:用于指定要打包的文件或文件夹,或要解压的压缩文件
  7. -C:用于指定要解压到的位置(默认解压到当前目录)
  8. 对多个文件进行压缩:tar -zcvf xxx.tar.gz 1.txt 2.txt
  9. 将压缩文件解压到指定目录:tar -zxvf xxx.tar.gz -C target/

5. 用户(组)

用户管理:

  1. useradd {username}:添加一个用户,但可能不会自动创建家目录(默认为/home/{username},也可通过-d参数指定)
  2. passwd {username}:为指定用户设置密码;如果不指定用户,则为当前用户设置密码
  3. userdel {username}:删除指定用户,但不删除其家目录;如果要删除其家目录,则可以添加-r参数(慎用)
  4. id {username}:查看指定用户的信息,比如用户id、所在组的id、所在的组的名称
  5. whoami:查看当前用户的名称
  6. who am i:查看当前会话中第一次登录的用户及ip等信息

根用户的家目录为/root,非根用户的家目录默认为/home/{username}

用户组管理:

  1. groupadd {groupname}:添加一个用户组
  2. groupdel {groupname}:删除指定用户组
  3. useradd -g {groupname} {username}:创建用户并指定用户组
  4. usermod -g {groupname} {username}:更新指定用户的用户组
  5. usermod -d {directory} {username}:更新指定用户的家目录
  6. 每个用户都必须有且仅有一个用户组;如果创建用户时没有指定用户组,则会为该用户创建一个同名的用户组

用户信息文件:

  1. /etc/passwd:用户信息,格式为用户名:密码(一般不可见):用户id:用户所在组的id:注释性描述:主目录:使用的Shell
  2. /etc/shadow:密码信息,格式为用户名:加密后的密码:最后修改时间:最小时间间隔:最大时间间隔:警告时间:不活动时间:失效时间:标志
  3. /etc/group:用户组信息,格式为组名:密码(一般不可见):组id:组内的用户名称(一般不可见)

Shell其实就是命令的翻译器,用户输入的命令必须经过Shell的翻译后才能被Linux识别

Linux上,一切皆文件;每个文件都会有所有者、所在组、其它组的概念:

  1. 文件的创建者默认就是该文件的所有者,但也可以更改文件的所有者
  2. 文件的创建者所在的组默认就是该文件的所在组,但所有者的变动或所有者所在组的变动不会影响到文件的所在组
  3. 除了所有者和所在组中的所有用户之外,其它用户都属于其它组
  4. 更改文件(夹)的所有者:chown {user} {file}
  5. 更改文件(夹)的所在组:chgrp {group} {file}

在执行ls -l命令时,文件信息的展示方式大致为drwxr-xr-x 1 root root 4096 Oct 18 16:33 home

  1. drwxr-xr-x:代表这个文件的访问权限信息,后文细说
  2. 1:对普通文件来说,该数字代表硬链接数;对文件夹来说,该数字代表子目录数(包括...两个特殊目录)?
  3. root:该文件的所有者
  4. root:该文件的所在组
  5. 4096:该文件的大小(单位:字节)
  6. Oct 18 16:33:该文件的最后修改时间
  7. home:该文件的名称

访问权限信息共有10位,其中:

  1. 第0位代表文件类型,-dlcb分别代表普通文件、文件夹、软链接、字符设备(比如键盘)、块设备(比如硬盘)
  2. 第1-3位代表所有者的权限,rwx代表有读、写、执行的权限(也可用数字7表示)
  3. 第4-6位代表所在组的权限,r-x代表有读、执行的权限(也可用数字5表示)
  4. 第7-9位代表其他组的权限,--x代表有执行权限(也可用数字1表示)
  5. 这三种权限对文件和文件夹来说的含义是不同的
文件文件夹
r可以读取文件内容,如cat可以查看文件夹的内容,如ls
w可以修改文件名和文件内容,但不一定能删除该文件可以修改文件夹名,或在文件夹中新增、删除文件
x可以执行该文件可以进入该文件夹,如cd

chmod {setting} {file}

  1. 用于更改文件的所有者(u)、所在组(g)、其它组(o)、所有用户(a)的权限
  2. chmod u=rwx,g=rx,o=x 1.txt代表将指定文件的权限更改为所有者可读写执行、所在组可读执行、其它组可执行
  3. chmod o+r+w,a-x 1.txt代表给指定文件的其它组新增读写权限、给所有用户去掉执行权限
  4. 也可以直接用数字来表示权限组合,比如chmod 751 1.txt等价于chmod u=rwx,g=rx,o=x 1.txt

chown [-R] {user}:{group} {file}

  1. 更改某个文件的所有者和所在组;所有者和所在组不需要同时指定
  2. 当只指定所有者时,就只更改所有者,此时冒号可以省略,如chown user 1.txt
  3. 当只指定所在组时,就只更改所在组,此时冒号不能省略,如chown :group 1.txt
  4. -R:当修改的是文件夹,并且想同时更改文件夹中的所有文件(夹)的所有者和所在组,则需要加该参数(chgrp命令同理)
  5. 更改了所有者和所在组之后,涉及到的用户需要重新登录才会刷新对该文件的权限

6. 磁盘、网络

磁盘分区概述:

  1. Linux会将磁盘划分成一个或多个分区(分区大小可以不一样),并以分区为单位来使用磁盘
  2. 我们在创建CentOS虚拟机时,就会接触到磁盘的自动分区和手动分区

在手动分区时,一般会用如下方式来划分磁盘(假设大小为20G):

  1. /boot分区:引导分区,1G,文件系统为ext4
  2. swap分区:交换分区,大小与内存大小保持一致即可,相当于虚拟内存?文件系统为swap
  3. /:根分区,占用磁盘剩余的空间,文件系统为ext4;用于存放根目录中的所有内容

挂载(mount/mnt目录就与挂载相关):

  1. 由于根分区存放了根目录的所有数据,因此,我们称根分区挂载到了根目录上
  2. 我们也可以把其它磁盘分区挂载到根目录的某个子目录上,这样,该目录的数据就会存放到该分区上,而不是根分区上
  3. 如果某个分区原先挂载到了A目录,后来挂载到B目录,那么就相当于将A目录的所有数据覆盖到了B目录中?
  4. 访问某个目录,其实就是在读取挂载到该目录上的那个分区上的数据

lsblk [-f]

  1. 查看磁盘分区挂载信息
  2. 硬盘可分为IDE硬盘(hd)和SCSI硬盘(sd),目前基本上用的都是后者
  3. 硬盘名称为hdxsdx,其中x代表盘号(a:基本盘;b:基本从属盘;c:辅助盘;d:辅助从属盘)
  4. 而分区名称为硬盘名称 + 分区编号,比如sda1hdb2
  5. -f:加上该参数后,可以查看分区的文件系统类型和UUID(分区在格式化后才会被分配一个UUID)

实战:新增硬盘并划分成一个分区,然后将其挂载到/newdisk目录上:

  1. 省略新增硬盘和创建目录的步骤(新增硬盘后要重启;虚拟机也可以新增逻辑硬盘)
  2. 执行lsblk命令,发现多了个sdb硬盘
  3. 执行fdisk /dev/sdb命令,对新硬盘进行分区:n子命令用于新增分区,w保存修改并退出,q退出且不保存
  4. 执行mkfs -t ext4 /dev/sdb1命令,对新分区进行格式化(即指定其文件系统类型为ext4
  5. 执行mount /dev/sdb1 /newdisk命令,真正进行挂载(重启后会失效)
  6. 执行umount {name}命令进行卸载(name可以是分区名称,也可以是挂载目录)
  7. 如果要永久挂载,则需要在/etc/fstab文件中进行配置,然后执行mount -a命令让配置立即生效

注意,/dev目录代表设备(device),而不是开发环境

df [-h]

  1. 查看磁盘的使用情况(每一行代表一个分区,包括分区名称、总大小、已用大小、可用大小、挂载目录等)
  2. 当分区的空间使用率达到80%时,就需要考虑清理空间或新增硬盘了

du [-ahsc] [--max-depth=x] {dir}

  1. 查询某个目录的磁盘使用情况;如果不指定目录,则默认为当前目录
  2. --max-depth:用于指定最大搜索深度;如果是0,则只统计该目录;如果是1,则只统计该目录及其一级子目录
  3. -a:加上该参数后,还会统计搜索到的文件
  4. -c:额外打印一行汇总记录(有点多余,因为最后一行本身就会显示该目录的总大小)
  5. -s:等价于--max-depth=0

ifconfig

  1. 查看所有网卡信息(比如ip地址)
  2. Windows上的相应命令是ipconfigipconfig /displaydnsipconfig /flushdns用于打印/清空DNS缓存
  3. 网卡的配置信息保存在/etc/sysconfig/network-scripts/ifcfg-xxx文件中(其中xxx代表网卡名称)?

关于虚拟机网络:

  1. 在NAT模式下,虚拟机通过母机上的VMnet8虚拟网卡与外界通信
  2. VMnet8虚拟网卡会将虚拟机的请求转发到母机的网卡上
  3. 扩展:虚拟机网络配置

hostname

  1. 查看主机名称
  2. 可以通过修改/etc/hostname文件来修改主机名称;重启后生效
  3. Hosts文件:Linux为/etc/hosts,Windows为C:\Windows\System32\drivers\etc\hosts

7. 进程、服务

ps [-auxefp]

  1. 查看进程的运行情况(PID:进程id;TTY:终端信息;TIME:占用CPU的总时间;CMD:该进程对应的命令或进程名)
  2. -a:显示当前终端执行的所有进程
  3. -u:显示面向用户的信息,包含CPU占用、内存占用、虚拟内存大小(VSZ)、物理内存大小(RSS)、进程状态等指标
  4. -x:显示所有与终端无关的进程?
  5. -e-A:显示系统中的所有进程
  6. -f:全格式,会展示父进程id(PPID)等信息
  7. -p:用于指定要展示的进程的id,如ps -p 1只会展示id为1的进程

进程的状态:

  1. S:休眠
  2. s:表示该进程是会话的先导进程
  3. N:表示该进程的优先级低于普通优先级
  4. >:表示该进程的优先级高于普通优先级
  5. R:正在运行
  6. D:不可被中断的休眠
  7. Z:僵死状态,可能是进程已经结束,但其内存未被释放(要特别注意)
  8. T:被跟踪或被中止

top [-dip]

  1. 不断监控进程的运行情况,每隔一段时间会刷新一次结果
  2. -d:用于指定刷新的间隔(单位:秒);默认3秒刷新一次
  3. -i:不显示闲置和僵死的进程
  4. -p:用于指定要展示的进程的id,如top -p 1只会展示id为1的进程

top命令的监控页面中,可以使用如下子命令:

  1. P:按照CPU使用率倒序排序(默认)
  2. M:按照内存使用率倒序排序
  3. N:按照PID倒序排序
  4. u:用于指定要查询哪个用户的进程
  5. k:用于指定要终止哪个进程
  6. q:退出

kill [-9] {PID}

  1. 向指定进程id对应的进程提出终止请求
  2. -9:强制终止;这里的数字9代表的是信号量

killall [-I] {name}

  1. 终止指定名称的进程及其子进程,支持通配符
  2. -I:不区分大小写

pstree [-pu]

  1. 以树状方式展示进程信息(父进程为父节点,子进程为子节点)
  2. -p:显示进程号
  3. -u:显示启动该进程的用户

服务概述:

  1. 服务就是运行在后台的、通常会监听某个端口的进程,又称为守护进程
  2. 要查看所有服务,可以通过setup命令打开设置面板,其中就有系统服务选项(*代表开机自动启动)
  3. Linux启动时,会先创建systemd进程(PID为1),该进程会根据运行级别来启动相应的服务

service {name} [start|stop|restart|reload|status]

  1. 该命令可以对指定的服务进行启动、关闭、重启、重新加载文件、查看运行状态
  2. 但是,从CentOS 7.0开始,很多服务都不再受service命令管理,转而改用systemctl命令
  3. service命令管理管理的服务都存放在/etc/init.d目录中(这些服务被称为SysV服务)

chkconfig

  1. chkconfig --list:查看所有SysV服务在不同的运行级别下是否自动启动
  2. chkconfig --level {num} {name} on|off:开启或关闭指定的SysV服务在指定的运行级别下的自启动;重启后生效

systemctl [start|stop|restart|status|enable|disable|is-enabled] {name}

  1. 该命令可以对指定的服务进行启动、关闭、重启、查看运行状态、设置/查看是否开机自启动
  2. 该命令能管理的服务都存放在/usr/lib/systemd/system目录中(以.service为后缀?)
  3. 服务名称可以省略.service后缀,也可以写全名
  4. 该命令在设置是否开机自启动时,无需指定运行级别,因为运行级别默认是3和5
  5. 也可以用systemctl list-unit-files命令查看各个服务是否开机自启动

netstat [-anp]

  1. 查看网络状态,比如各个端口的监听状态、连接的建立情况
  2. -a:显示所有状态(默认不显示LISTEN状态)
  3. -n:以数字形式显示ip地址和端口,而不是显示主机名称
  4. -p:显示进程信息
  5. 可以通过telnet {host} {port}命令判断某个主机的某个端口是否可以访问

打开/关闭防火墙的端口:

  1. 永久打开端口:firewall-cmd --permanent --add-port={port}/{protocol}
  2. 永久关闭端口:firewall-cmd --permanent --remove-port={port}/{protocol}
  3. 修改之后需要重新加载:firewall-cmd --reload
  4. 重新某个端口是否开启:firewall-cmd --query-port={port}/{protocol}

8. 包管理、环境变量

rpm概述(CentOS):

  1. 全称为:RedHat Package Manager,已成为一套公认的行业标准
  2. rpm包的完整名称为:软件名 + 版本号 + 适用的操作系统 + .rpm后缀
  3. 注意,适用的操作系统中如果包含i686i386,则适用于32位系统;如果包含noarch,则代表32位和64位通用

rpm命令:

  1. rpm -qa:查询出所有已安装的软件包
  2. rpm -q {name}:查询是否已安装某个软件
  3. rpm -qi {name}:查询某个软件的安装信息
  4. rpm -ql {name}:查询安装某个软件时产生的所有文件和文件夹
  5. rpm -qf {file}:判断指定的文件或文件夹是哪个软件产生的
  6. rpm -e {name}:卸载指定的软件;某些软件可能会依赖被卸载的软件,此时卸载会报错,可以加--nodeps参数强制卸载
  7. rpm -ivh xxx.rpm:安装指定的软件包;-i:安装;-v:显示提示信息;-h:显示进度条

yum命令:

  1. yum list:查询出远程仓库中的所有可安装的软件;配合管道命令和grep命令使用
  2. yum install {name}:安装指定程序,会自动下载软件包,并自动安装目标软件依赖的所有其它软件

apt概述(Ubuntu):

  1. 全称为:Advanced Packaging Tool
  2. 是Ubuntu系统上的软件包管理工具,类似于ContOS上的rpm
  3. /etc/apt/sources.list文件中记录了apt的远程仓库地址
  4. 扩展:apt的使用

配置环境变量(以配置JDK环境变量为例):

  1. 编辑环境变量文件:vim /etc/profile
  2. 在文件末尾定义JAVA_HOME环境变量:export JAVA_HOME=/xxx
  3. 将更新PATH环境变量中:export PATH=$JAVA_HOME/bin:$PATH
  4. 文件修改完成后,刷新:source /etc/profile

可以通过set命令查看所有环境变量,比如通过set | grep '^PATH'命令查看PATH环境变量