Linux常用命令2
1、进程相关
1.1、查看进程(ps命令)
Linux ps (英文全拼:process status)命令用于显示当前进程的状态,类似于 windows 的任务管理器。
ps [options]
ps命令是最基本同时也是非常强大的进程查看命令,使用该命令可以确定有哪些进程正在运行和运行的状态、进程是否结束、进程有没有僵死、哪些进程占用了过多的资源等等,总之大部分信息都是可以通过执行该命令得到的。
选项如下:
-a:显示所有终端机下执行的程序,除了阶段作业领导者之外。 a:显示现行终端机下的所有程序,包括其他用户的程序。 -A:显示所有程序。 -c:显示CLS和PRI栏位。 c:列出程序时,显示每个程序真正的指令名称,而不包含路径,选项或常驻服务的标示。 -C<指令名称>:指定执行指令的名称,并列出该指令的程序的状况。 -d:显示所有程序,但不包括阶段作业领导者的程序。 -e:此选项的效果和指定"A"选项相同。 e:列出程序时,显示每个程序所使用的环境变量。 -f:显示UID,PPIP,C与STIME栏位。 f:用ASCII字符显示树状结构,表达程序间的相互关系。 -g<群组名称>:此选项的效果和指定"-G"选项相同,当亦能使用阶段作业领导者的名称来指定。 g:显示现行终端机下的所有程序,包括群组领导者的程序。 -G<群组识别码>:列出属于该群组的程序的状况,也可使用群组名称来指定。 h:不显示标题列。 -H:显示树状结构,表示程序间的相互关系。 -j或j:采用工作控制的格式显示程序状况。 -l或l:采用详细的格式来显示程序状况。 L:列出栏位的相关信息。 -m或m:显示所有的执行绪。 n:以数字来表示USER和WCHAN栏位。 -N:显示所有的程序,除了执行ps指令终端机下的程序之外。 -p<程序识别码>:指定程序识别码,并列出该程序的状况。 p<程序识别码>:此选项的效果和指定"-p"选项相同,只在列表格式方面稍有差异。 r:只列出现行终端机正在执行中的程序。 -s<阶段作业>:指定阶段作业的程序识别码,并列出隶属该阶段作业的程序的状况。 s:采用程序信号的格式显示程序状况。 S:列出程序时,包括已中断的子程序资料。 -t<终端机编号>:指定终端机编号,并列出属于该终端机的程序的状况。 t<终端机编号>:此选项的效果和指定"-t"选项相同,只在列表格式方面稍有差异。 -T:显示现行终端机下的所有程序。 -u<用户识别码>:此选项的效果和指定"-U"选项相同。 u:以用户为主的格式来显示程序状况。 -U<用户识别码>:列出属于该用户的程序的状况,也可使用用户名称来指定。 U<用户名称>:列出属于该用户的程序的状况。 v:采用虚拟内存的格式显示程序状况。 -V或V:显示版本信息。 -w或w:采用宽阔的格式来显示程序状况。 x:显示所有程序,不以终端机来区分。 X:采用旧式的Linux i386登陆格式显示程序状况。 -y:配合选项"-l"使用时,不显示F(flag)栏位,并以RSS栏位取代ADDR栏位 。 -<程序识别码>:此选项的效果和指定"p"选项相同。 --cols<每列字符数>:设置每列的最大字符数。 --columns<每列字符数>:此选项的效果和指定"--cols"选项相同。 --cumulative:此选项的效果和指定"S"选项相同。 --deselect:此选项的效果和指定"-N"选项相同。 --forest:此选项的效果和指定"f"选项相同。 --headers:重复显示标题列。 --help:在线帮助。 --info:显示排错信息。 --lines<显示列数>:设置显示画面的列数。 --no-headers:此选项的效果和指定"h"选项相同,只在列表格式方面稍有差异。 --group<群组名称>:此选项的效果和指定"-G"选项相同。 --Group<群组识别码>:此选项的效果和指定"-G"选项相同。 --pid<程序识别码>:此选项的效果和指定"-p"选项相同。 --rows<显示列数>:此选项的效果和指定"--lines"选项相同。 --sid<阶段作业>:此选项的效果和指定"-s"选项相同。 --tty<终端机编号>:此选项的效果和指定"-t"选项相同。 --user<用户名称>:此选项的效果和指定"-U"选项相同。 --User<用户识别码>:此选项的效果和指定"-U"选项相同。 --version:此选项的效果和指定"-V"选项相同。 --widty<每列字符数>:此选项的效果和指定"-cols"选项相同。
1.1.1、ps -ef
-e:显示所有程序,-f:显示UID、PPIP、C与STIME栏位。
示例:
ps -ef 是用标准的格式来显示进程,显示的项目有:UID PID PPID C STIME TTY TIME CMD
具体的字段含义如下:
- UID:用户ID,指的是程序被该UID所拥有,但输出的是用户名,比如上述输出的是root 用户
- PID:进程的ID,该程序的ID
- PPID:父进程ID,上级父程序的ID
- C:CPU占用率
- STIME:进程启动到现在的时间
- TTY:登入者的终端机位置,该进程在哪个终端上运行,若与终端无关,则显示? 若为pts/0等,则表示由网络连接主机进程。
- TIME:此进程运行的总时间
- CMD:启动进程的命令和参数
1.1.2、ps -ef | grep 查找信息
|:管道命名,指的是 ps 命令和 grep 命令同时执行(可以把它看做是一个连接的作用)
grep:(Global Regular Expression Print)查找的意思,使用的权限是所有的用户,它是一种强大的文本搜索工具,能使用正则表达式搜索文本,并把匹配的行打印出来
通常在使用 ps命令后用管道连接查询特定进程时也会同时显示 grep进程本身,后缀一般是:grep --color=auto XXX,比如上面截图中的第三行。
有时候查询结果其实 都是没有对应这个进程。但是会显示了 grep进程的本身,有的人会认为这就是自己想要的 进程,结果用 kill -9 PID 时提示进程号不存在.......
如何判断该进程是否是 grep进程本身? 进程号一直的变的那个进程是 grep进程本身,正常进程号的PID如果没有重启是不会变的。
1.2、结束进程(kill)
当一个服务无法用命令结束时,可以用 kill 命令杀进程
# 杀死该pid的进程 kill pid # 强制杀死该进程 kill -9 pid
3、端口相关命令
3.1、查看系统的ip地址(ifconfig)
通过 ifconfig 命令可以查看 ip 地址:
3.2、查看开放的端口号
可以通过以下命令来查看 Linux 系统中已开放的端口号:
firewall-cmd --list-all
实例:
在 Linux 中安装 Nginx 后,我们可以通过 Linux 系统的 ip 来直接访问 Nginx,但有可能访问失败,此时有可能是因为 Linux 系统的 80 端口未开启。可以通过上述命令来查看 Linux 的端口号的开启情况。
3.3、对外开放指定端口
在 Linux 系统中安装 Nginx 后,如果 Linux 没有对外开放端口,则其他服务器无法访问该服务器。此时需要手动将端口号开启。
开启 80 端口:
firewall-cmd --add-port=80/tcp --permanent
重启防火墙
systemctl restart firewalld
3.4、关闭防火墙
systemctl stop firewalld
使用命令systemctl stop firewalld 可暂时关闭防火墙,系统重启后防火墙还会打开。
#永久性关闭防火墙(重启将不会恢复到原来的状态,并且需要重启后(reboot 命令)才能生效)
systemctl disable firewalld
6、Linux上目录权限
6.1、查看权限
通过 ls -l 命令可以查看目录权限,得到结果类似如下:
d 表示是否为目录,每个 rwx 分别表示不同用户的权限,如果没有该权限,则用 - 表示。
对于文件和目录来说,r,w,x有着不同的作用和含义。
针对文件:
r:读取文件内容
w:修改文件内容
x:执行权限对除二进制程序以外的文件没什么意义
针对目录:目录本质可看做是存放文件列表、节点号等内容的文件
r:查看目录下的文件列表
w:删除和创建目录下的文件
x:可以cd进入目录,能查看目录中文件的详细属性,能访问目录下文件内容(基础权限)
用户获取文件权限的顺序: 先看是否为所有者,如果是,则后面权限不看;再看是否为所属组,如果是,则后面权限不看。
参考:https://blog.csdn.net/lv8549510/article/details/85406215、https://www.linuxprobe.com/linux-properties-permissions.html
6.2、修改权限
修改某个目录下的所有文件的权限,包括子目录中的文件,例子如下:
# chmod 777 /home/user 注:仅把/home/user目录的权限设置为rwxrwxrwx # chmod -R 777 /home/user 注:表示将整个/home/user目录与其中的文件和子目录的权限都设置为rwxrwxrwx
其中,参数-R表示启动递归处理。
几种常用权限实例:
- -rw------- (600) 只有所有者才有读和写的权限
- -rw-r--r-- (644) 只有所有者才有读和写的权限,组群和其他人只有读的权限
- -rwx------ (700) 只有所有者才有读,写,执行的权限
- -rwxr-xr-x (755) 只有所有者才有读,写,执行的权限,组群和其他人只有读和执行的权限
- -rwx--x--x (711) 只有所有者才有读,写,执行的权限,组群和其他人只有执行的权限
- -rw-rw-rw- (666) 每个人都有读写的权限
- -rwxrwxrwx (777) 每个人都有读写和执行的权限
参考:http://blog.itpub.net/31397003/viewspace-2645294/
6.3、默认权限
在linux中,同一个用户在创建文件和目录时,这些文件和目录所默认的权限都是一样的,如需更改,需要chmod命令做相应的更改。权限掩码的作用就是规范初创文件和目录时候的权限设置,免去了创建后再次修改权限的问题。我们可以通过设置权限掩码来设置文件和目录初始化的默认权限。
查看用户的权限掩码:
umask //假设输出为0002。初创文件的最大权限是666,减去掩码0002,表示初创文件的权限是664。初创目录的最大权限是777,减去掩码,则为775
示例:
dyp930@ubuntu:~/work$ touch a.txt dyp930@ubuntu:~/work$ mkdir a dyp930@ubuntu:~/work$ ls -lrt -rw-rw-r-- 1 dyp930 dyp930 0 Jun 28 06:02 a.txt //权限为664 drwxrwxr-x 2 dyp930 dyp930 4096 Jun 28 06:02 a //权限为775
6.3.1、临时修改默认权限
临时修改权限掩码:
命令:umask abc
设置默认掩码为abc后,如下公式即为文件的初创权限:
备注:对于文件,掩码abc的实际值为偶数值,需要向下减1.
① 新创建的文件的权限为:(7-a)(7-b)(7-c) ,如果a/b/c中该位为0,则相减之后的该位仍要减1,即文件的权限最大只能为6
② 新创建的目录的权限为:(7-a)(7-b)(7-c)
示例:
dyp930@ubuntu:~/work$ umask 005 dyp930@ubuntu:~/work$ umask 0005 dyp930@ubuntu:~/work$ touch b.txt dyp930@ubuntu:~/work$ mkdir b dyp930@ubuntu:~/work$ ls -lrt total 8 -rw-rw--w- 1 dyp930 dyp930 0 Jun 28 06:05 b.txt //权限为662 drwxrwx-w- 2 dyp930 dyp930 4096 Jun 28 06:05 b //权限为772
6.3.2、永久修改默认权限
编辑文件/etc/bashrc,在当前的shell环境中生效
1、如果用su - user1 来切换用户,表示换了shell环境,该配置文件不会生效
2、如果用su user1 来切换用户,表示没有换shell环境,该配置文件会生效
编辑文件/etc/profile,可以在整个系统中生效。
[root@localhost tmp]# vim /etc/bashrc [root@localhost tmp]# vim /etc/profile 两个文件的内容是一样的 搜索umask,找到如下代码,不算第一位的特殊权限 if [ $UID -gt 199 ] && [ "`id -gn`" = "`id -un`" ]; then umask 002 //表示uid大于等于199的默认umask值,表示普通用户 else umask 022 //表示uid小于199的默认umask值,表示root fi 修改后需要重新读取一下/etc/bashrc或/etc/profile [root@lewis ~]# source /etc/profile [root@lewis ~]# source /etc/bashrc
7、df(查看磁盘容量和挂载情况)
df 命令可查看磁盘的使用情况以及文件系统被挂载的位置,仅以K显示),df -h 以可读的方式展示(会根据文件大小以K、M、G直观显示)
8、用户和组
8.1、查看用户和用户组
Linux系统一个组可以包含多个用户成员,反过来,一个用户也可以隶属于多个组。
whoami #查看当前登录用户名 cat /etc/passwd #可以查看所有用户的列表 cat /etc/group #查看所有用户组 groups #查看当前登录用户的组内成员 groups testuser #查看指定用户即testuser用户所在的组以及组内成员 id testuser #查看testuser用户的userid、groupid还有所隶属的所有组
每一行最前边的就是用户名,关于uid:0 表示管理员(root),1 - 500 表示系统用户,501 - 65535 表示普通用户
8.1.1、查看用户的家目录
#查看当前登录用户的家目录 cd ~ #先切换目录~ pwd #然后查看当前路径,即可看到用户主目录的位置 #或是使用下面显示环境变量命令 echo $HOME #或者是 echo $home
8.2、创建用户和用户组
添加指定gid的组:
groupadd -g 1001 upload # 添加了一个指定gid为1001的upload用户组
添加指定uid的用户,并加入到指定组
useradd -u 1001 -g upload claim # 添加了一个uid为1001的用户,并加入到upload的组中
日常运维我们使用useradd命令来创建用户,常用的命令如下:
- 不加任何参数,仅创建用户,示例:useradd myuser,此时用户的家目录是/home/myuser
- -d 目录 指定用户主(家)目录,如果此目录不存在,则同时使用-m选项,可以创建主目录。示例:useradd -d /opt/myuser -m myuser
- -g 用户组 指定用户所属的用户组。 我们创建用户的时候会默认创建一个和用户名相同的用户组,但是有时有需求需要指定用户组,可以使用-g命令来完成用户创建,前提条件是指定的用户组已存在,示例:useradd -g mygroup myuser
- -u UID:指定 UID,这个 UID 必须是大于等于500,并没有其他用户占用的 UID
- -G GROUPS:指定额外组
- -c COMMENT:指定用户的注释信息
8.3、删除用户和用户组
删除用户使用命令userdel,示例:userdel myuser,使用这个命令的话只会删除用户,用户的主目录不会被删除,如果需要删除用户的时候也将用户主目录删除则可以使用-r,示例:userdel -r myuser
删除用户组使用命令groupdel,示例:groupdel mygroup,注意,被删除的用户组不可以是任何用户的主用户组,否则删除失败。用户组删除完成后可以到/etc/group文件中去查看被删除则用户组名称已经不存在了。
8.4、修改用户的信息
Linux修改用户所在组方法:
#强行设置某个用户所在组 usermod -g 新的用户组 用户名 #把某个用户改为 group(s) usermod -G 新的用户组 用户名 #把用户添加进入某个组(s) usermod -a -G 用户组 用户名
usermod 使用说明:
功能说明:修改用户帐号。补充说明:usermod可用来修改用户帐号的各项设定。
语 法:usermod [-LU][-c <备注>][-d <登入目录>][-e <有效期限>][-f <缓冲天数>][-g <群组>][-G <群组>][-l <帐号名称>][-s <shell>][-u <uid>][用户帐号]
参 数:
- -c<备注> 修改用户帐号的备注文字。
- -d登入目录> 修改用户登入时的目录。
- -e<有效期限> 修改帐号的有效期限。
- -f<缓冲天数> 修改在密码过期后多少天即关闭该帐号。
- -g<群组> 修改用户所属的群组。
- -G<群组> 修改用户所属的附加群组。
- -l<帐号名称> 修改用户帐号名称。
- -L 锁定用户密码,使密码无效。
- -s<shell> 修改用户登入后所使用的shell。
- -u<uid> 修改用户ID。
- -U 解除密码锁定。
9、Linux系统的SSH密钥
9.1、SSH的基本介绍
什么是SSH:Secure Shell (SSH) 是一个允许两台电脑之间通过安全的连接进行数据交换的网络协议。 通过加密保证了数据的保密性和完整性。SSH采用公钥加密技术来验证远程主机,以及(必要时)允许远程主机验证用户。
SSH的好处:1)传统的FTP、Telnet是再网络中明文传送数据、用户帐号和密码,很容易受到中间人攻击。而通过使用SSH, 你可以把所有传输的数据进行加密,这样“中间人”这种攻击方式就不可能实现了, 而且也能够防止DNS和IP欺骗。 2)第二个好处是:传输的数据是经过压缩的,所以可以加快传输的速度。
如何实现SSH:SSH利用SSH Key来进行前面提到的基于密钥的安全验证。
9.2、SSH KEY的基本介绍
SSH-Key 就是一对密钥对。【一个是公钥,一个是私钥】。公钥是给别人用的,比如 GitLab服务器。私钥是给自己用的,比如本地机器。SSH-Key的密钥类型:有数字签名RSA和DSA两种认证密钥。
举个例子:本地想要使用git从gitHub/gitlab上拉取代码。先给GitHub/GitLab配置公钥,公钥就可以作为一个加密的箱子,将代码放在箱子里。 被本地拉取到后,使用私钥将加密的箱子打开。就能拿到代码了。整个过程中,都没有用户名/密码在网络中传输,所以不会给他人拦截到,破解你的数据。
所以,SSH-Key的直观作用,就是【让你方便的登录到 SSH 服务器,而无需输入密码】
9.2.1、两台机器通过 SSH 免密通信
假设 A (192.168.20.59)为客户机器,B(192.168.20.60)为目标机。要达到的目的:A机器ssh登录B机器无需输入密码。加密方式选 rsa|dsa均可以,默认dsa。
操作过程:
- 登录A机器
- 生成密钥:ssh-keygen -t [rsa|dsa]。将会生成公钥文件和私钥文件:id_rsa 和 id_rsa.pub 或者是 id_dsa 和 id_dsa.pub
- 将 .pub 公钥文件复制到 B 机器的 .ssh 目录,并将公钥文件内的内容添加至 ~/.ssh/authorized_keys 文件内,命令: cat id_dsa.pub >> ~/.ssh/authorized_keys
- 这样从A机器登录B机器的目标账户就不再需要密码了,直接运行 ssh 192.168.20.60 来访问 B 机器
9.3、查看 ssh key
ssh key默认存放在用户的家目录下的 .ssh 隐藏目录下,比如当前登录用户的家目录为 /home/testuser,则 SSH KEY 存放在 /home/testuser/.ssh 目录下
# 查看是否已经存在SSH-Key,实际上就是查看用户的家目录下是否存在隐藏目录 .ssh ls -al ~/.ssh
9.4、新建SSH KEY
如果当前已有 SSH KEY,我们可以先删除再新建,也可以不用删除直接覆盖即可。
# 删除 ssh key cd ~ rm -rf .ssh # 新生成SSH-key。-C 和后面可以不写,这里是注释 ssh-keygen -t rsa -C "demo@qq.com"
如果之前已经生成过会提示你是否覆盖,你可以回车直接覆盖掉。生成过程会让你输入密码,可以不输入,直接回车直到生成成功。
生成后,会在用户的家目录下生成一个.ssh隐藏目录,目录中会有【id_rsa】和【id_rsa.pub】两个文件,id_rsa 是私钥,id_rsa.pub 是公钥。
9.5、查看生成的密钥
#查看公钥。一般来说会把公钥提供给第三方使用 cat ~/.ssh/id_rsa.pub #查看私钥 cat ~/.ssh/id_rsa