Linux操作命令分类详解 - 进程查找其他
Posted 孔子-说
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux操作命令分类详解 - 进程查找其他相关的知识,希望对你有一定的参考价值。
目录
系列文章
1、su、sudo
Sudo 的全称为:super user do。 顾名思义:干超级用户才能干的事!所以Sudo最常用的功能就是提升一个用户的执行权限。它允许已验证的用户以其他用户的身份来运行命令。其他用户可以是普通用户或者超级用户。使用权限:在 /etc/sudoers 中有出现的使用者。
su :切换到某某用户模式,提示输入密码时该密码为切换后账户的密码,用法为“su 账户名称”。如果后面不加账户时系统默认为root账户,密码也为超级账户的密码。没有时间限制。
1.1 sudo 使用步骤
第一步:登陆root账号,使用命令 adduser sudotest 创建一个账号:sudotest。
第二步: 授予cuiHuaNiu管理员权限,也就是将其注册到/etc/sudoers文件中。默认情况下,在系统中有一个sudo的组,属于此组的用户都可以使用sudo命令,所以只需要把 sudotest 加到sudo组里面即可。命令为:usermod -aG sudo sudotest 。-a 参数表示附加,只和 -G 参数一同使用,表示将用户增加到组中。
第三步: 用户可以使用 sudotest 登录服务器,然后使用sudo来执行管理者才能执行的命令了。如果有root权限也可以使用sudo -i 切换用户身份到root。
1.2 常用参数搭配
# 以root权限执行上一条命令
$ sudo !!
# 以特定用户身份进行编辑文本
# 以 uggc 用户身份编辑 home 目录下www目录中的 index.html 文件
$ sudo -u uggc vi ~www/index.html
# 以root用户身份创建文件夹
sudo mkdir demo1
# 列出目前的权限
sudo -l
# 列出 sudo 的版本资讯
sudo -V
# 显示sudo设置
sudo -L
# 普通用户切换到root用户下
sudo -i
# root用户切换到普通用户下
su testuser
1.3 实例
ubuntu@xnzysq20210118001:/home$ ls
b kz test ubuntu
# 创建目录demo失败
ubuntu@xnzysq20210118001:/home$ mkdir demo
mkdir: cannot create directory ‘demo’: Permission denied
# 以root权限执行上一条命令,创建目录demo成功
ubuntu@xnzysq20210118001:/home$ sudo !!
sudo mkdir demo
ubuntu@xnzysq20210118001:/home$ ls
b demo kz test ubuntu
# sudo命令以root权限创建目录demo1成功
ubuntu@xnzysq20210118001:/home$ sudo mkdir demo1
ubuntu@xnzysq20210118001:/home$ ls
b demo demo1 kz test ubuntu
# 普通用户切换到root用户下
ubuntu@xnzysq20210118001:/home$ sudo -i
root@xnzysq20210118001:~#
# root用户切换到普通用户下
root@xnzysq20210118001:~# su ubuntu
ubuntu@xnzysq20210118001:/root$
2、上传文件工具命令
从本地windows上传一些文件到远程Linux服务器可以通过xshell的xftp也可以通过下面这个小工具lrzsz,使用更加方便。
yum install lrzsz #安装工具,ubuntu上用apt-get install lrzsz
常用命令:
sz dist.zip #下载文件dist.zip到本地
rz #会打开窗口,上传文件到远程服务器
3、系统进程命令
3.1 ps 显示当前进程的状态
Linux ps (英文全拼:process status)命令用于显示当前进程的状态,类似于 windows 的任务管理器。
1)语法
ps [options] [--help]
2)选项参数
ps 的参数非常多, 在此仅列出几个常用的参数并大略介绍含义
- -A 列出所有的进程
- -w 显示加宽可以显示较多的资讯
- -au 显示较详细的资讯
- -aux 显示所有包含其他使用者的行程
- au(x) 输出格式 : USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
- USER: 行程拥有者
- PID: pid
- %CPU: 占用的 CPU 使用率
- %MEM: 占用的记忆体使用率
- VSZ: 占用的虚拟记忆体大小
- RSS: 占用的记忆体大小
- TTY: 终端的次要装置号码 (minor device number of tty)
- STAT: 该行程的状态
- START: 行程开始时间
- TIME: 执行的时间
- COMMAND:所执行的指令
3)常用参数搭配
# 查找指定进程格式
ps -ef | grep 进程关键字
# 显示进程信息
ps -A
# 显示指定用户信息(显示root进程用户信息)
ps -u root
# 显示所有进程信息,连同命令行
ps -ef //显示所有命令,连带命令行
4)实例
# 例如显示 php 的进程:
# ps -ef | grep php
root 794 1 0 2020 ? 00:00:52 php-fpm: master process (/etc/php/7.3/fpm/php-fpm.conf)
www-data 951 794 0 2020 ? 00:24:15 php-fpm: pool www
www-data 953 794 0 2020 ? 00:24:14 php-fpm: pool www
www-data 954 794 0 2020 ? 00:24:29 php-fpm: pool www
...
3.2 kill 删除执行中的程序或工作
Linux kill 命令用于删除执行中的程序或工作。
kill 可将指定的信息送至程序。预设的信息为 SIGTERM(15),可将指定程序终止。若仍无法终止该程序,可使用 SIGKILL(9) 信息尝试强制删除程序。程序或工作的编号可利用 ps 指令或 jobs 指令查看。
1)语法
kill [-s <信息名称或编号>][程序] 或 kill [-l <信息编号>]
2)选项参数
- -l <信息编号> 若不加<信息编号>选项,则 -l 参数会列出全部的信息名称。
- -s <信息名称或编号> 指定要送出的信息。
- [程序] [程序]可以是程序的PID或是PGID,也可以是工作编号。
- 使用 kill -l 命令列出所有可用信号。
最常用的信号是:
- 1 (HUP):重新加载进程。
- 9 (KILL):杀死一个进程。
- 15 (TERM):正常停止一个进程。
3)实例
杀死进程
# kill 12345
强制杀死进程
# kill -KILL 123456
发送SIGHUP信号,可以使用一下信号
# kill -HUP pid
彻底杀死进程
# kill -9 123456
杀死指定用户所有进程
#kill -9 $(ps -ef | grep hnlinux) //方法一 过滤出hnlinux用户进程
#kill -u hnlinux //方法二
显示信号
# kill -l
4、查找命令
4.1 find 查找命令
Linux find 命令用来在指定目录下查找文件。任何位于参数之前的字符串都将被视为欲查找的目录名。如果使用该命令时,不设置任何参数,则 find 命令将在当前目录下查找子目录与文件。并且将查找到的子目录和文件全部进行显示。
1)语法
find path -option [ -print ] [ -exec -ok command ] \\;
2)选项参数
find 根据下列规则判断 path 和 expression,在命令列上第一个 - ( ) , ! 之前的部份为 path,之后的是 expression。如果 path 是空字串则使用目前路径,如果 expression 是空字串则使用 -print 为预设 expression。
expression 中可使用的选项有二三十个之多,在此只介绍最常用的部份。
- -mount, -xdev : 只检查和指定目录在同一个文件系统下的文件,避免列出其它文件系统中的文件
- -amin n : 在过去 n 分钟内被读取过
- -anewer file : 比文件 file 更晚被读取过的文件
- -atime n : 在过去n天内被读取过的文件
- -cmin n : 在过去 n 分钟内被修改过
- -cnewer file :比文件 file 更新的文件
- -ctime n : 在过去n天内被修改过的文件
- -empty : 空的文件-gid n or -group name : gid 是 n 或是 group 名称是 name
- -ipath p, -path p : 路径名称符合 p 的文件,ipath 会忽略大小写
- -name name, -iname name : 文件名称符合 name 的文件。iname 会忽略大小写
- -size n : 文件大小 是 n 单位,b 代表 512 位元组的区块,c 表示字元数,k 表示 kilo bytes,w 是二个位元组。
- -type c : 文件类型是 c 的文件。
- d: 目录
- c: 字型装置文件
- b: 区块装置文件
- p: 具名贮列
- f: 一般文件
- l: 符号连结
- s: socket
- -pid n : process id 是 n 的文件
- 你可以使用 ( ) 将运算式分隔,并使用下列运算。
- exp1 -and exp2
- ! expr
- -not expr
- exp1 -or exp2
- exp1, exp2
3)实例
find选项大概有以下几类:
- 1.按时间范围查找
- 2.按文件大小查找
- 3.按文件名称查找
- 4.按其他:比如权限、用户组、类型等
#从根目开始,查找名称以nginx开头的目录和文件
find / -name nginx*
#查找文件大小超过100M的文件
find / -size +100M
查找当前目录大于100M的文件
find . -size +100M
#查找/home/zx目录下,10分钟内被修改过的文件和目录
find /home/zx/ -mmin -10
将当前目录及其子目录下所有文件后缀为 .c 的文件列出来:
# find . -name "*.c"
将当前目录及其子目录中的所有文件列出:
# find . -type f
将当前目录及其子目录下所有最近 20 天内更新过的文件列出:
# find . -ctime -20
查找 /var/log 目录中更改时间在 7 日以前的普通文件,并在删除之前询问它们:
# find /var/log -type f -mtime +7 -ok rm \\;
查找当前目录中文件属主具有读、写权限,并且文件所属组的用户和其他用户具有读权限的文件:
# find . -type f -perm 644 -exec ls -l \\;
查找系统中所有文件长度为 0 的普通文件,并列出它们的完整路径:
# find / -type f -size 0 -exec ls -l \\;
从 '/' 开始进入根文件系统查找文件和目录
# find / -name file1
查找属于用户 'user1' 的文件和目录
# find / -user user1
在目录 '/ home/user1' 中查找以 '.bin' 结尾的文件
# find /home/user1 -name \\*.bin
查找在过去100天内未被使用过的执行文件
# find /usr/bin -type f -atime +100
查找在10天内被创建或者修改过的文件
# find /usr/bin -type f -mtime -10
寻找以 '.ps' 结尾的文件,先运行 'updatedb' 命令
# locate \\*.ps
在当前目录及其子目录所有.c和.h文件中查找 'expr'
# find -name '*.[ch]' | xargs grep -E 'expr'
在当前目录及其子目录的常规文件中查找 'expr'
# find -type f -print0 | xargs -r0 grep -F 'expr'
在当前目录中查找 'expr'
# find -maxdepth 1 -type f | xargs grep -F 'expr'
在当前目录查找以.log结尾的文件,并显示详细信息。
find . -name "*.log" -ls
查找/root/目录下权限为600的文件
find /root/ -perm 600
查找当目录,以.log结尾的普通文件
find . -type f -name "*.log"
查找当前所有目录并排序
find . -type d | sort
4.2 locate 快速查找命令
locate 的速度比 find 快,它并不是真的查找,而是查数据库,一般文件数据库在 /var/lib/slocate/slocate.db 中,所以 locate 的查找并不是实时的,而是以数据库的更新为准,一般是系统自己维护(默认每天自动更新一次),也可以手工升级数据库 ,命令为updatedb,所以使用locate 命令查不到最新变动过的文件。为了避免这种情况,可以在使用locate之前,先使用updatedb命令,手动更新数据库。如果数据库中没有查询的数据,则会报出locate: can not stat () `/var/lib/mlocate/mlocate.db': No such file or directory该错误!updatedb即可!
- yum -y install mlocate 如果是精简版CentOS系统需要安装locate命令
- locate 与 find 不同: find 是去硬盘找,locate 只在 /var/lib/slocate 资料库中找。
1)语法
locate [-d ][--help][--version][范本样式...]
2)选项参数
- -b, --basename -- 仅匹配路径名的基本名称
- -c, --count -- 只输出找到的数量
- -d, --database DBPATH -- 使用 DBPATH 指定的数据库,而不是默认数据库 /var/lib/mlocate/mlocate.db
- -e, --existing -- 仅打印当前现有文件的条目
- -1 -- 如果 是 1.则启动安全模式。在安全模式下,使用者不会看到权限无法看到 的档案。这会始速度减慢,因为 locate 必须至实际的档案系统中取得档案的 权限资料。
- -0, --null -- 在输出上带有NUL的单独条目
- -S, --statistics -- 不搜索条目,打印有关每个数据库的统计信息
- -q -- 安静模式,不会显示任何错误讯息。
- -P, --nofollow, -H -- 检查文件存在时不要遵循尾随的符号链接
- -l, --limit, -n LIMIT -- 将输出(或计数)限制为LIMIT个条目
- -n -- 至多显示 n个输出。
- -m, --mmap -- 被忽略,为了向后兼容
- -r, --regexp REGEXP -- 使用基本正则表达式
- --regex -- 使用扩展正则表达式
- -q, --quiet -- 安静模式,不会显示任何错误讯息
- -s, --stdio -- 被忽略,为了向后兼容
- -o -- 指定资料库存的名称。
- -h, --help -- 显示帮助
- -i, --ignore-case -- 忽略大小写
- -V, --version -- 显示版本信息
3)实例
updatedb
locate /etc/sh 搜索etc目录下所有以sh开头的文件
locate pwd 查找和pwd相关的所有文件
locate passwd 查找 passwd 文件
locate -i ~/r 忽略大小写搜索当前用户目录下所有以 r 开头的文件
4.3 whereis 查找文件命令
whereis命令是定位可执行文件、源代码文件、帮助文件在文件系统中的位置。这些文件的属性应属于原始代码,二进制文件,或是帮助文件。
- 该指令只能用于查找二进制文件、源代码文件和man手册页,一般文件的定位需使用locate命令。
1)语法
whereis [-bfmsu][-B <目录>...][-M <目录>...][-S <目录>...][文件...]
2)选项参数
- -b 只查找二进制文件。
- -B<目录> 只在设置的目录下查找二进制文件。
- -f 不显示文件名前的路径名称。
- -m 只查找说明文件。
- -M<目录> 只在设置的目录下查找说明文件。
- -s 只查找原始代码文件。
- -S<目录> 只在设置的目录下查找原始代码文件。
- -u 查找不包含指定类型的文件。
3)实例
whereis ls 将和ls文件相关的文件都查找出来
使用指令"whereis"查看指令"bash"的位置,输入如下命令:
$ whereis bash
上面的指令执行后,输出信息如下所示:
bash:/bin/bash/etc/bash.bashrc/usr/share/man/man1/bash.1.gz
注意:以上输出信息从左至右分别为查询的程序名、bash路径、bash的man 手册页路径。
如果用户需要单独查询二进制文件或帮助文件,可使用如下命令:
$ whereis -b bash
$ whereis -m bash
输出信息如下:
$ whereis -b bash #显示bash 命令的二进制程序
bash: /bin/bash /etc/bash.bashrc /usr/share/bash # bash命令的二进制程序的地址
$ whereis -m bash #显示bash 命令的帮助文件
bash: /usr/share/man/man1/bash.1.gz #bash命令的帮助文件地址
4.4 which 环境变量目录里查找文件
which命令的作用是在环境变量$PATH设置的目录里查找符合条件的文件(如搜索某个系统命令的位置),并且返回第一个搜索结果。
1)语法
which [文件...]
2)选项参数
- -n<文件名长度> 指定文件名长度,指定的长度必须大于或等于所有文件中最长的文件名。
- -p<文件名长度> 与-n参数相同,但此处的<文件名长度>包括了文件的路径。
- -w 指定输出时栏位的宽度。
- -V 显示版本信息。
3)实例
which pwd 查找pwd命令所在路径
which java 查找path中java的路径
which bash 查看指令"bash"的绝对路径
上面的指令执行后,输出信息如下所示:
/bin/bash #bash可执行程序的绝对路径
5、其他命令
-- 网络通信命令
ifconfig:查看网卡信息
命令:ifconfig 或 ifconfig | more
ping:查看与某台机器的连接情况
命令:ping ip
netstat -an:查看当前系统端口
命令:netstat -an
搜索指定端口
命令:netstat -an | grep 8080
-- 系统命令
uname:可显示电脑以及操作系统的相关信息
uname -a :显示主机名、内核等系统信息
hostname:显示系统主机名
hostname -i :显示系统 IP 地址
lsb_release -a :显示操作系统信息
cal:显示本月的日历
date:显示当前时间
uptime:显示运行时间
whereis xxx :显示 xxx 程序可能的位置, 如whereis ls
which xxx:显示 xxx 命令对应执行的程序, 如which ls
查看当前谁在使用该主机用什么命令,查找自己所在的终端信息用什么命令
查找自己所在的终端信息:who am i
查看当前谁在使用该主机:who
清屏命令:ctrl + l
配置网络命令:setup
重启网络命令:service network restart
切换用户命令:su - 用户名
-- echo 向屏幕输出字符
向屏幕输出带空格的字符串:echo hello world
向屏幕输出1-100的数字,以空格分隔:echo 1..100
--硬件使用相关命令
cat /proc/cpuinfo : 显示 CPU 信息
cat /proc/meminfo: 显示内存信息
cat /proc/version: 查看当前系统运行的各种数据,version记录的版本信息gcc版本等
free :显示系统内存的使用情况,包括物理内存、交换内存(swap)和内核缓冲区内存等 =kB
free -m:-m 参数表示以 MB 为单位显示内存使用情况
man xxx :显示 xxx 命令的帮助手册信息
-- 磁盘使用情况 (disk free)
df :显示磁盘空间信息
df -h:以容易阅读的方式显示磁盘使用情况
df -i:显示文件系统上的空闲索引节点(inode)
-- 磁盘使用情况 (disk usage)
du:显示目录和文件的大小,逐级进入指定目录的每一个子目录并显示该目录占用文件系统数据块(1024 字节)的情况。若没有给出指定目录,则对当前目录进行统计。
du -sh:-s 参数是求得总大小的意思,-h 参数以容易阅读的方式显示文件的大小
fdisk -l:显示磁盘和分区信息
findmnt:显示当前挂载的文件系统列表,以树状的格式显示
mount device-path mount-point:挂载设备到目录 (光盘 iso,移动硬盘,U 盘,NFS 文件共享)
# 查看系统时间
root@xnzysq20210118001:/usr/local/bin# date
Mon Oct 18 00:38:36 UTC 2021
# 设置系统时间
root@xnzysq20210118001:/usr/local/bin# date --set "10/18/2021 08:40"
# 查看到 Linux 系统的当前时区:
ls -l /etc/localtime
# 要更改 Linux 系统时区首先得获知你所当地时区的 TZ 值,使用 tzselect 命令即可查看并选择已安装的时区文件。
# 更改每个用户的时区
export TZ='Asia/Shanghai'
# 执行完成之后需要重新登录系统或刷新 ~/.bashrc 生效。
source ~/.bashrc
# 更改Linux系统时区
要更改 Linux 系统整个系统范围的时区可以使用如下命令:
sudo rm -f /etc/localtime
sudo ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
# 使用Systemd更改Linux系统时区
如果你使用的 Linux 系统使用 Systemd,还可以使用 timedatectl 命令来更改 Linux 系统范围的时区。在 Systemd 下有一个名为 systemd-timedated 的系统服务负责调整系统时钟和时区,我们可以使用 timedatectl 命令对此系统服务进行配置。
sudo timedatectl set-timezone 'Asia/Shanghai'
# 查看本机的出口公网IP信息
curl ifconfig.me
或
curl cip.cc
du 和 df两个命令都是磁盘使用情况的命令,那么 du 和 df 有什么区别呢?
- 一个文件创建,就新生成了一个 inode 节点,且 inode 节点的引用计数为 1。当文件被一个进程打开,则在内存中缓冲建立此 inode 节点缓存,且其引用计数加 1。一个文件可以被多次打开,创建多个文件描述符,但对应的 inode 节点只有一个,对应的磁盘存储只有一个,只是引用计数每打开一次加 1。
- 当文件被 rm,目录项被删除,如果其对应的 inode 节点的引用计数为 0,则删除对应的 inode 节点,其对应磁盘可被再申请;但如果此文件被其他进程打开,则其对应的 inode 节点的引用计数不为 0,则不会删除对应的 inode 节点,其对应磁盘不能被再申请;只有当前文件被所有使用进程 close 后,系统才会删除对应的 inode 节点,其对应磁盘可被再申请。
- 一个被某进程打开的文件 被 rm 后,其目录项被删除了,在 du 命令下是不能被统计到,而其 inode 没有被删除,在 df 命令下是可以被统计到的,这就是在 du 和 df 存在差别的原因。
apt-get与apt的区别
Ubuntu 新出的apt 命令是对之前的apt-get apt-cache 等的封装,提供更加统一,更加适合终端用户使用的接口,也有更加好看的UI。因此,如果在非交互式脚本中运行apt install,就会提示没有稳定的CLI 接口。
所以如果要在脚本中安装软件,用apt-get 保险一些,如果自己手敲命令,用apt 更方便一些。
以上是关于Linux操作命令分类详解 - 进程查找其他的主要内容,如果未能解决你的问题,请参考以下文章