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/85406215https://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。

操作过程:

  1. 登录A机器 
  2. 生成密钥:ssh-keygen -t [rsa|dsa]。将会生成公钥文件和私钥文件:id_rsa 和 id_rsa.pub 或者是 id_dsa 和 id_dsa.pub
  3. 将 .pub 公钥文件复制到 B 机器的 .ssh 目录,并将公钥文件内的内容添加至 ~/.ssh/authorized_keys 文件内,命令: cat id_dsa.pub >> ~/.ssh/authorized_keys
  4. 这样从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

 

posted @ 2021-08-15 23:56  wenxuehai  阅读(1001)  评论(0编辑  收藏  举报
//右下角添加目录