【若泽大数据实战第三天】Linux命令进阶

1.查看历史命令:

history查看

!255 表示执行第255行的命令

用这个  echo "" > ~/.bash_history   可以清空历史命令  清空后 当前session是不生效的 在新的session查看的时候 历史的命令是被清空了

用root用户登录系统后,可以查看xxx用户所使用的命令: /home/xxx/.bash_history

生产环境下一般是这样的:是内网,不能连外网,如果要连生产,则需要堡垒机进行连接

堡垒机 跳板机的区别

2.用户,用户组的常用命令

ll /usr/sbin/user*   *代表模糊匹配

这个可以看

[root@hadoop001 ~]# ll /usr/sbin/user*
-rwxr-x---. 1 root root 103096 Dec  8  2011 /usr/sbin/useradd
-rwxr-x---. 1 root root  69560 Dec  8  2011 /usr/sbin/userdel
-rws--x--x. 1 root root  42384 Aug 23  2010 /usr/sbin/userhelper
-rwxr-x---. 1 root root  98680 Dec  8  2011 /usr/sbin/usermod
-rwsr-xr-x. 1 root root   9000 Nov 23  2013 /usr/sbin/usernetctl
[root@hadoop001 ~]# ll /usr/sbin/group*
-rwxr-x---. 1 root root 54968 Dec  8  2011 /usr/sbin/groupadd
-rwxr-x---. 1 root root 46512 Dec  8  2011 /usr/sbin/groupdel
-rwxr-x---. 1 root root 50800 Dec  8  2011 /usr/sbin/groupmems
-rwxr-x---. 1 root root 61360 Dec  8  2011 /usr/sbin/groupmod

一个用户可以属于多个用户组 但是必须有一个主组

[root@hadoop001 ~]# useradd ruoze    自动创建一个用户组
[root@hadoop001 ~]# id jerry              可以查看用户的相关信息
uid=500(jerry) gid=500(jerry) groups=500(jerry) 

uid:user id用户id

groups:创建了一个组 组的ids 500  组的名称是jerry

gid:组的主组 主组id是500 名称是jerry

创建了jerry用户后,系统会在/home下面创建它的家目录

家目录下面会创建配置文件:

创建用户的同时,它会在/etc/passwd文件插入一行记录

cat /etc/passwd   :

用户jerry  用户id为500 主组id为500  jerry的家目录为/home/jerry  用/bin/bash来执行

创建用户jerry之前它会先创建组jerry,然后把用户jerry放到组jerry里面

创建组的时候,它会在/etc/group里面插入一条记录

cat /etc/group   :

创建的组为jerry 组的id为500

如果去删除用户jerry,去执行userdel jerry

那么:在/etc/passwd里面的jerry的那条记录也会被删除

在/etc/group里面的那条带有jerry组的记录也会被删除(如果在一个组里面就一个用户,而恰巧这个用户被删除了,那么这个组也会被删除,但是如果这个组里面有多个用户,其中某一个用户被删除了,那么这个组是不会被删除的。)

但是虽然执行了 userdel jerry 删除了用户jerry  它的家目录还在的,是没有删除的。

删除用户ruozehou 如果再重新创建:

重新创建
[root@hadoop001 home]# useradd ruoze
useradd: warning: the home directory already exists.  (提示家目录已经存在)
Not copying any file from skel directory into it.     (家目录里的隐藏文件不需要copy)
Creating mailbox file: File exists     
[root@hadoop001 home]# 
[root@hadoop001 home]# id ruoze
uid=501(ruoze) gid=501(ruoze) groups=501(ruoze)

增加一个组:bigdata的命令 :

groupadd bigdata

现在要把jerry这个用户加入到bigdata这个组里面:

usermod -a -G bigdata jerry

-a 表示追加  这个语句表示修改jerry这个用户 把用户jerry加入到bigdata这个组里面

从上图可以看到,用户jerry,属于两个组,jerry和bigdata,主组为jerry

如果想修改用户jerry的主组为bigdata,命令为:

usermod -g bigdata jerry

3.设置密码 命令:
passwd jerry  为jerry用户设置密码

4.切用户

切换到jerry用户  su - jerry

- 代表切用户后,进该用户的家目录且执行 环境变量文件

切换用户后,先进入家目录,然后执行当前用户的环境变量(面试题)

如果不加横杠,直接这样:su jerry  的话:

像上图一样,只是切换了用户目录还停留在/root这个目录

而且没有执行jerry的环境变量,比如说,如果你之前在jerry用户下设置了一个环境变量,alias rzcd=' cd /root/ruozedata/',那么它没有执行环境变量,就没有rzcd这个命令了。

5.普通用户临时获取root最大权限

普通用户一般没有权限去执行root用户下特定的权限的。

比如:在jerry用户下,访问/root/目录  是没有权限的。

这个时候需要先回到root用户,编辑一下/etc/sudoers这个文件,

找到这一行:root    ALL=(ALL)       ALL

然后在下面添加一行:jerry  ALL=(root)      NOPASSWD:ALL

如下图:

然后保存,但是保存的时候,不让保存,因为是只读文件,这个时候需要加个!,也就是:wq!即可。

然后再切换到,jerry用户,用sudo命令即可:

su - jerry

sudo ls /root/

6.管道符

如果查看某个东西,比如cat /etc/passwd 发现里面有很多东西,几千行,但是你只想找带有jerry的那些行,你可以这样:

cat /etc/passwd | grep jerry

| 为管道符  grep表示过滤

前面查询的结果作为后面的输入,用grep进行过滤

7.从当前用户推出到上一个用户,用exit就可以了。

[root@hadoop001 ~]# su - jepson
[jepson@hadoop001 ~]$ exit
logout
[root@hadoop001 ~]# 

8.进程 + 端口号
ps -ef | grep xxx
[root@hadoop001 ~]# ps -ef | grep tail
root      2425  1779  0 20:39 pts/0    00:00:00 tail -f install.log.syslog
root      2433  2267  0 20:40 pts/1    00:00:00 grep tail
[root@hadoop001 ~]# ps -ef | grep tail |grep -v grep
root      2425  1779  0 20:39 pts/0    00:00:00 tail -f install.log.syslog
[root@hadoop001 ~]# 

ps -ef 显示所有的进程,加上管道符,可以筛选出你想查询的进程,如果想查询的条件中有空格,那么可以加上单引号,然后再进行过滤。

ps -ef | grep tail |grep -v grep :   -v可以去掉含有grep的进程

查询进程的PID,然后杀掉它:

[root@hadoop001 ~]# ps -ef | grep tail |grep -v grep
root      2425  1779  0 20:39 pts/0    00:00:00 tail -f install.log.syslog
[root@hadoop001 ~]# 
用户      pid   ppid

生产上一般情况是: 某个服务或进程夯住了 +或者因为需要主动杀死某个服务或者进程 --》杀死

从上面查出来pid之后,用 kill -9 pid  就可以了
kill -9 2425 
提醒: kill前确认清楚该进程是否该杀 不要杀错

查看端口号:

netstat -nlp|grep pid
有些pid查询不出来相应的端口号,说明:不是所有的进程有端口号

对外提供服务肯定是要有端口号的 光有ip是不行的  比如你用crt xshell putty去链接Linux服务器肯定要有端口号的

如果不通过pid,直接通过名称来搜索端口号,也是可以的。比如:

netstat -nlp|grep ssh 可以搜索出带有ssh的记录,但是正常流程是通过pid来搜索端口号的,一般通过名称是搜索不到的

[root@hadoop001 ~]# ps -ef | grep ssh
root      1434     1  0 19:49 ?        00:00:00 /usr/sbin/sshd
root      1775  1434  0 19:52 ?        00:00:00 sshd: root@pts/0,pts/1
root      2477  2267  0 20:51 pts/1    00:00:00 grep ssh
[root@hadoop001 ~]# netstat -nlp|grep  1434 
tcp        0      0 0.0.0.0:22                  0.0.0.0:*                   LISTEN      1434/sshd           
tcp        0      0 :::22                       :::*                        LISTEN      1434/sshd           
[root@hadoop001 ~]# 
[root@hadoop001 ~]# netstat -nlp|grep  ssh
tcp        0      0 0.0.0.0:22                  0.0.0.0:*                   LISTEN      1434/sshd           
tcp        0      0 :::22                       :::*                        LISTEN      1434/sshd           
[root@hadoop001 ~]# 

正常流程: pid-->port
这样也可以,但是一般搜不到:         netstat -nlp|grep  ssh

服务的概念:

一个服务首先要有一个:IP,然后要有一个端口号:port

IP:端口号

     0.0.0.0:22   
    :::22

如果你去连接一个服务,发生链接拒绝错误:

链接拒绝错误 Connection refused:

这个时候,如果你是在Windows上面做开发,打开cmd,先ping ip,再看看端口号: telnet ip 端口号(没有冒号)
 window  : 控制面板 卸载程序 打开或关闭windows功能 选中Telnet客户端 部署 (不然的话,telnet命令用不了)
                cmd
            ping ip
            telnet ip port

  linux : yum install telnet.x86_64 

如果是Linux,想去telnet,(Linux本身,没有telnet这个命令)

可以用 which telnet 搜索这个命令存不存在

结果发现不存在。

这个时候可以用:yum search telnet   这个命令去yum上搜索telnet是否存在,yum上是否有安装包

(安装软件一般通过rpm包,rmp包一般通过yum安装)

搜索完成之后,因为只需要客户端,去用telnet就行了,所以看上面截图说明,只需要telnet.x86_64就行了。

然后用yum install telnet.x86_64  安装一下这个软件就可以了。

安装完之后,再which一下,看看就有了:

再用telnet ip port 连一下:

这个时候说明连通了。尝试连接、已经连接、遵循SSH...什么什么协议,(crt软件,putty软件也是遵循SSH这个协议)。

面试题: 老板说去A服务器 (你是有权限去login的),打开xxx软件的web界面?  如何操作? 

打开软件的web界面一般就是 ip加端口号。ip:port

现在A服务器的IP,你是知道的,就缺一个端口号了。现在只要获取这个软件服务的端口号就行了。

ps -ef|grep xxx   通过这个获取pid进程id
netstat -nlp|grep pid   通过这个获取端口号

看看这个端口号对外可访问的地址是什么,是不是能够对外提供访问,如果是这样的就可以提供访问:

     0.0.0.0:22     
    :::22

如果是这样:

127.0.0.1::22

localhost:22

就不能对外提供访问。

安装一个httpd服务:

命令:yum install httpd

安装后 启动它:

启动命令:service httpd start

然后找到httpd服务的端口号:这两种方式都可以:

从上面可以看到,httpd的端口号是80端口,说明如果我们Windows想访问httpd这个服务,可以这样访问:

http://10.9.140.90:80/  在浏览器里就可以直接访问了。

(在浏览器输入上面地址的时候,回车之后,80就不见了,浏览器会自动把80给去掉,变成了http://10.9.140.90/,后面不带端口号的,一般都是80端口号)

vi httpd.conf 编辑这个文件

shift+冒号 进入尾行模式,然后  /0.0.0.0    再按回车键  可以在文件中搜索带有0.0.0.0的记录。

最后一句Listen 80  表示:监听本机ip 端口号80     (其实中间省略了本机ip)

如果修改成,Listen 127.0.0.1 80    表示:当前ip只对本机服务  不对外提供访问 

重点:

    0.0.0.0:22   
    :::22

    :::80
    代表当前ip对外提供访问
 XXX.XXX.XXX.XXX

不管是  0.0.0.0还是 ::  都表示当前ip对外提供访问(无论你机器怎么变,它都是取当前机器的ip)

    127.0.0.1:80 只针当前本机ip对内部当前机器访问
    localhost:80(和上面一样,127.0.0.1就是localhost)

cat /etc/hosts 文件可以看出来

127.0.0.1代表了自己的本身

如果生产上,你去链接一个服务,结果被拒绝了,有可能它的服务只针对于它自己,只有它自己才能访问。

如果想测试,在本机上去链接web界面,可以这样:

curl http://127.0.0.1:80/   或者curl http://localhost:80/

9.杀进程
kill -9 pid
kill -9 2470 2661  并行杀
我只想杀死包含log字符的所有进程
kill -9 $(pgrep -f log)
kill -9 1187 1307 1758 2470

echo $(pgrep -f httpd)  显示了横行

 pgrep -f httpd   显示出来为竖行

linux操作: 遇到rm kill高危命令 需确认再确认

10.搜索
生产上: 你要搜索   xxx软件 或者 xxx目录   但是不知道在什么地方  这时你可以:
history | grep xxx    看看历史命令里面有没有被操作过  可以找到
ps -ef|grep  xxx       看看这个xxx是不是在运行,如果在运行可以看到显示的是有目录的
find  / -name '*log*'    全局 根目录 但耗时
find ./ -name              当前目录开始


* 代表 模糊匹配
abc123drf
*123*

隐藏文件也可以搜索到

Linux系统的命令和文件查找:which、whereis、locate、find的特点和区别可以看这篇博客:https://blog.csdn.net/qq_33826564/article/details/82906115

11.linux 安装软件 rpm          安装的软件一般是rpm包,rpm包一般通过yum进行安装

yum search httpd    搜索
yum install -y  httpd   安装  提示是否的时候 选择y

yum remove httpd-tools-2.2.15-69.el6.centos.x86_64    删除卸载

yum  --help 可以查看yum如何使用

比如:

①yum list  可以列举出系统所有的安装包

②但是这些包太多了,这个你回车之后会一直运行,这时候你按键:ctrl + z   虽然把它给stop了, 看不到它在运行了,但是它还是在后台运行着的。它只是显性退出,实际还在运行。它是个僵尸进程。

③你再使用yum命令,比如 yum list | grep httpd ,它会告诉你yum被锁住了,被另一个app使用着

④这个时候就需要查出yum的pid ,然后将它kill掉,然后才能重新使用了。

rpm -qa | grep httpd      这样可以看到安装了httpd呐写rmp包

rmp -e  xxxx      删除(卸载)(xxxx名字写全):

但是删除的时候,有时候删除不掉,因为它会被其它软件所需要,所依赖,这个时候如果你确定这个包要删掉,呐可以加上

--nodeps  这个参数,删除时 不验证依赖。

可以rpm --help查看帮助

12.which
命令都是从$PATH找
[root@hadoop001 ~]# echo $PATH
/usr/lib64/qt-3.3/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
[root@hadoop001 ~]# which ls
alias ls='ls --color=auto'
        /bin/ls
[root@hadoop001 ~]#

which 命令是从$PATH 中找,先在/usr/lib64/qt-3.3/bin这里面找,没有,再去/usr/local/sbin这里面找,没有,直到在/bin这里面找到了,就返回,就算后面有了也不会继续往下找。

[root@hadoop001 ~]# whereis ls      更全  但是不常用
ls: /bin/ls /usr/share/man/man1p/ls.1p.gz /usr/share/man/man1/ls.1.gz
[root@hadoop001 ~]# 

13.man 命令帮助
 yum --help
 man yum 

猜你喜欢

转载自blog.csdn.net/liweihope/article/details/87190028