Linux基础入门

This is about Linux learning

Posted by PsycheLee on 2015-07-11

Linux基础命令


Chapter 1

1.root 用户 管理员 最大权限

~ 当前用户的 家目录

root用户的家目录 /root

其他用户 /home/用户名

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
[root@hadoop001 ~]# cd /
[root@hadoop001 /]# ll
total 36
lrwxrwxrwx 1 root root 7 Aug 8 2018 bin -> usr/bin
dr-xr-xr-x. 5 root root 4096 Aug 9 2018 boot
drwxr-xr-x 19 root root 2940 Oct 11 11:06 dev
drwxr-xr-x. 80 root root 8192 Nov 15 14:46 etc
drwxr-xr-x. 5 root root 43 Sep 19 15:23 home
lrwxrwxrwx 1 root root 7 Aug 8 2018 lib -> usr/lib
lrwxrwxrwx 1 root root 9 Aug 8 2018 lib64 -> usr/lib64
drwxr-xr-x. 2 root root 6 Apr 11 2018 media
-rw-r--r-- 1 root root 2 Oct 13 2017 meta.js
drwxr-xr-x. 2 root root 6 Apr 11 2018 mnt
drwxr-xr-x. 2 root root 6 Apr 11 2018 opt
dr-xr-xr-x 103 root root 0 Oct 11 11:01 proc
dr-xr-x---. 3 root root 4096 Oct 11 15:42 root
drwxr-xr-x 25 root root 760 Oct 11 11:06 run
lrwxrwxrwx 1 root root 8 Aug 8 2018 sbin -> usr/sbin
drwxr-xr-x. 2 root root 6 Apr 11 2018 srv
dr-xr-xr-x 13 root root 0 Oct 11 11:01 sys
drwxrwxrwt. 8 root root 4096 Nov 15 15:25 tmp
drwxr-xr-x. 14 root root 4096 Sep 19 09:44 usr
drwxr-xr-x. 19 root root 4096 Oct 11 11:01 var

2.pwd 查看当前光标所在的目录

3. ls 查看

​ ls -l ===> ll 查看文件夹 权限 用户用户组 时间

​ ll -a 显示隐藏文件和文件夹

​ ll -sh 仅仅查看文件的大小

​ ll -rt 按时间排序

4. mkdir 创建文件夹

mkdir 1 2 3 并联创建文件夹
mkdir -p 4/5/6 串联创建文件夹 级联

5. cd 切换目录

/根目录

cd dir 切换到指定目录
cd …/退回上一层目录
cd …/…/退回上2层目录
cd …/…/…/退回上3层目录

家目录
cd /root 家目录路径补全
cd 直接回车
cd ~
cd ~/1

cd - 回退到上一次命令

6. 目录

绝对目录 /根目录开头 路径是齐全的
相对目录 不是以/开头 路径是短的

7. 命令帮助

ls --help

Usage: ls [OPTION]…[FILE]…

[] 可选项

… 多个参数

Chapter 2

1. clear 清理屏幕

2. mv 移动 cp复制

​ mv 始终是一份 快
​ cp 两份 慢

​ 文件夹
cp -r dir1 1 非标
cp -r dir1 1/dir1 标准操作
cp -r dir2 1/dir33 修改名称的

mv dir1  1           非标
mv dir1  1/dir1    标准操作 
 mv dir3 1/dir44  修改名称的

3. 创建空文件

  • touch 1.log 【常用】
  • vi 2.log
    • 默认进入命令行模式
    • i键 进入命令行模式–》编辑模式
    • esc键 从编辑模式–》命令行模式
    • shift+: 从命令行模式–》尾行模式。输入wq保存退出
  • cat /dev/null >3.log 【清空文件内容】
    echo “” >4.log 【慎用,文件大小不为0】

4. 覆盖和追加文件内容

>将文本内容 覆盖掉 【高危命令1】

cp mysql.cnf mysql.cnf20201107 备份文件

>>将文本内容 追加

5. 查看文件内容

  • cat 文件内容一下子全部显示 ctrl+z中断

  • more 文件内容一页页 往下翻,按空格往下翻,ctrl+b回退 q退出

  • less 文件内容 按键盘的上下键 按行为单位 q退出

  • tail 实时查看文件内容

    • -f 假如文件被移除 然后重命名 就无法再监控到文件

    • -F 假如文件被移除 然后重命名 会不断的retry尝试 去监控文件,直到监控到位

      -f, --follow[={name|descriptor}]
      output appended data as the file grows;
      an absent option argument means ‘descriptor’
      -F same as --follow=name --retry

  • 想要查看文件内容倒数100行,且实时监控

    • tail -100f 1.log
  • 文件内容特别多 如何快速定位到ERROR、关键词信息
    cat CloudAgent.log | grep ERROR

    cat CloudAgent.log | grep -A 10 ERROR 后10行
    cat CloudAgent.log | grep -B 10 ERROR 前10行
    cat CloudAgent.log | grep -C 10 ERROR 前后各10行 20行 【常用】

    | 管道符
    grep过滤

  • 需要查看的内容过多,

    • cat CloudAgent.log | grep -C 20 ERROR > 20201107error.log
    • more 20201107error.log
    • 通过编辑去搜索

​ vi xxx.log
shift+:
/ERROR 回车
n键寻找

  • 将日志文件 下载到window电脑,进行搜索 定位 分析 【推荐】
  • 坑: 假如CloudAgent.log 原文件很大,那么从生产下载到公司网络 是不是要走外网带宽10M的,
  • 想问 会不会影响 公司服务?
  • 建议: 假如下载大文件,业务高峰或者工作日白天 尽量不要做,非要做,那就【限速】(FTP)

6. 上传下载

​ yum install -y lrzsz
​ sz xxx.log 下载 Linux -->> windows
​ rz 直接回车 上传windows -->> linux

7. 别名 alias

​ 常用的命令 或 复杂的命令 一串,可以使用别名 来简化

​ ls -l ==> ll

8. 环境变量

  • 全局: /etc/profile

    ​ source /etc/profile

    ​ 当前会话生效

    ​ 已经开启的会话不会跟着自动生效,需要重新执行生效命令

    ​ 新开的会话是自动的生效

  • 个人:~/.bash_profile

    ​ ~/.bashrc 【推荐】

  • 场景:

    ​ ssh 远程执行B机器 启动服务命令会抛错, java command not found
    ​ 直接登录B机器 命令是找到的 which java找到

    ​ 配置环境变量文件在 .bash_profile 是不正确的,
    应该配置在 .bashrc文件里。

    https://blog.csdn.net/whitehack/article/details/51705889

9. 创建用户和设置密码

1
2
3
4
5
6
7
8
9
[root@hadoop001 ~]# useradd tom
[root@hadoop001 ~]# id tom
uid=1003(tom) gid=1003(tom) groups=1003(tom)
[root@hadoop001 ~]# passwd tom
Changing password for user tom.
New password:
BAD PASSWORD: The password fails the dictionary check - it is too simplistic/systematic
Retype new password:
passwd: all authentication tokens updated successfully.

10.历史命令 history

​ # !99 执行 历史命令的第99个

​ history -c 清空

Chapter 3

1. rm 删除【高危命令2】

​ rm -rf /

​ rm -r yyydir

​ -f 不提示,直接删除

​ 脚本场景:
​ 业务逻辑判断 赋值的 LOG_PATH=/xxx/yyy
​ 漏了一种没有赋值

​ rm -rf ${LOG_PATH}/* ==> rm -rf /*

​ 如何避免:
​ 每次删除之前,都判断${LOG_PATH}目录是否存在
​ set -u参数 在脚本的 第一行#!/bin/bash ,在第二行写

2.用户用户组

1
2
3
4
5
[root@hadoop001 ~]# ll /usr/sbin/user*
-rwxr-x--- 1 root root 118192 Nov 6 2016 /usr/sbin/useradd
-rwxr-x--- 1 root root 80360 Nov 6 2016 /usr/sbin/userdel
-rwxr-x--- 1 root root 113840 Nov 6 2016 /usr/sbin/usermod
-rwsr-xr-x 1 root root 11296 Apr 13 2017 /usr/sbin/usernetctl
1
2
3
4
5
[root@hadoop001 ~]# ll /usr/sbin/group*
-rwxr-x--- 1 root root 65480 Nov 6 2016 /usr/sbin/groupadd
-rwxr-x--- 1 root root 57016 Nov 6 2016 /usr/sbin/groupdel
-rwxr-x--- 1 root root 57064 Nov 6 2016 /usr/sbin/groupmems
-rwxr-x--- 1 root root 76424 Nov 6 2016 /usr/sbin/groupmod
  • 创建用户同时创建用户组
1
2
3
[root@hadoop001 ~]# useradd test1
[root@hadoop001 ~]# id test1
uid=1004(test1) gid=1004(test1) groups=1004(test1)
1
2
[root@hadoop001 ~]# cat /etc/passwd
test1:x:1004:1004::/home/test1:/bin/bash
1
2
[root@hadoop001 ~]# cat /etc/group
test1:x:1004:
  • 切换用户 su -tom

  • 删除用户 userdel tom

    如果用户所属的用户组没有其他用户, 则一起删除,否则用户组删除不了
    
  • 样式丢失

    [root@hadoop001 ~]# rm -f /home/tom/.bash*  先删除样式
    
    当前用户的所属家目录的 个人环境变量文件不存在
    
1
2
3
4
5
[root@hadoop001 ~]# su - tom
-bash-4.1$
-bash-4.1$ pwd
/home/tom
-bash-4.1$

​ 拷贝skel下面的文件, 恢复样式, .bash文件存在

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
-bash-4.1$ cp /etc/skel/.* /home/tom/
cp: 略过目录"/etc/skel/."
cp: 略过目录"/etc/skel/.."
cp: 略过目录"/etc/skel/.gnome2"
cp: 略过目录"/etc/skel/.mozilla"
-bash-4.1$ exit
logout
[root@hadoop001 ~]# su - tom
[tom@hadoop001 ~]$ ll -a
总用量 32
drwx------. 4 tom tom 4096 3月 10 17:00 .
drwxr-xr-x. 6 root root 4096 3月 10 16:53 ..
-rw-------. 1 tom tom 36 3月 10 17:00 .bash_history
-rw-r--r--. 1 tom tom 18 3月 10 17:00 .bash_logout
-rw-r--r--. 1 tom tom 176 3月 10 17:00 .bash_profile
-rw-r--r--. 1 tom tom 124 3月 10 17:00 .bashrc
drwxr-xr-x. 2 tom tom 4096 11月 12 2010 .gnome2
drwxr-xr-x. 4 tom tom 4096 3月 8 19:28 .mozilla
  • 添加用户到新的用户组

    • 添加附加组

      1
      2
      3
      [root@hadoop001 ~]# usermod -a -G hadoop tom
      [root@hadoop001 ~]# id tom
      uid=504(tom) gid=504(tom) 组=504(tom),502(hadoop)
    • 修改主组

      1
      2
      3
      4
      5
      6
      7
      8
      9
      [root@hadoop001 ~]# usermod -a -G hadoop tom
      [root@hadoop001 ~]# id tom
      uid=504(tom) gid=504(tom) 组=504(tom),502(hadoop)
      [root@hadoop001 ~]# usermod -g hadoop tom
      [root@hadoop001 ~]# id tom
      uid=504(tom) gid=502(hadoop) 组=502(hadoop)
      [root@hadoop001 ~]# usermod -a -G tom tom
      [root@hadoop001 ~]# id tom
      uid=504(tom) gid=502(hadoop) 组=502(hadoop),504(tom)
    • 查看组下面的用户

    1
    2
    [root@hadoop001 ~]# groupmems -g tom -l
    tom

    3. passwd文件

    • 登录不了
    1
    2
    3
    tom:x:504:502::/home/tom:/sbin/nologin
    [root@hadoop001 ~]# su - tom
    This account is currently not available.
    • 切换不了

      1
      tom:x:504:502::/home/tom:/bin/false

      场景: hdfs hbase等用户切换不了, 原因/bin/false

      ​ jps命令不可用

      ​ su - hdfs之前, 将bin/false改为/bin/bash

3. su sudo

  • su xx 切换用户

  • su - xx 切换用户 进入家目录 且执行该用户环境变量文件 .bashrc

  • sudo 普通用户临时使用root的最大权限

    1
    2
    3
    [root@hadoop001 ~]# su - tom
    [tom@hadoop001 ~]$ cat /root/1.py
    cat: /root/1.py: 权限不够 【错误2】【Permission denied】
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    [root@hadoop001 ~]# vi /etc/sudoers
    tom ALL=(root) NOPASSWD:ALL
    [root@hadoop001 ~]# su - tom
    [tom@hadoop001 ~]$ cat /root/1.py
    cat: /root/1.py: 权限不够
    [tom@hadoop001 ~]$ sudo cat /root/1.py
    for i in range(1,10):
    for k in range(1,10-i):
    print(end=" ")
    for j in range(1,i+1):
    product=i*j
    print("%d*%d=%2d" % (i,j,product),end=" ")
    print (" ")


    [tom@hadoop001 ~]$

    生产场景:用户的权限不满足需求,需要更高的,假如IT 和公司管理制度都还好,就要求加sudo权限。
    否则碰见这种权限错误的操作,只能让对应的IT人员操作。

4. 权限

1
2
3
4
5
[root@hadoop001 ~]# ll
总用量 1166480
-rw-r--r--. 1 root root 174 3月 8 18:44 1.py
drwxr-xr-x. 2 root root 4096 3月 8 14:40 22
-rw-r--r--. 1 root root 33 3月 8 16:51 2.py
  • 第一个字符 d 代表文件夹 -文件

  • 三个字母 分别是代表 读r 4 、写w 2 、执x 1、-没有任何权限 0

    第一组:  文件或者文件夹的所属用户
    

    第二组: 文件或者文件夹的所属用户组的成员
    第三组:其他用户组的成员对这个文件或文件夹的权限

  • 数字与权限对应

    777 rwxrwxrwx
    755 rwxr-xr-x
    640 rw-r-----
    600 rw-------

5.权限命令

​ chmod -R 777 文件或者文件夹
​ chown -R 用户:用户组 文件或者文件夹

1
2
3
4
5
6
7
8
[root@hadoop001 ~]# ll
总用量 1166480
-rw-r--r--. 1 root root 174 3月 8 18:44 1.py
[root@hadoop001 ~]# chown -R tom:tom 1.py
[root@hadoop001 ~]# chmod -R 777 1.py
[root@hadoop001 ~]# ll
总用量 1166480
-rwxrwxrwx. 1 tom tom 174 3月 8 18:44 1.py

6. 大小

​ 文件大小: ll -h
​ 文件或文件夹大小 : du -sh

1
2
[root@hadoop001 ~]# du -sh /usr/local
774M /usr/local

7. 搜索find

1
2
[root@hadoop001 ~]# find / -name '*hadoop*'
[root@hadoop001 ~]# find /home/ -name '*hadoop*'

​ history 查看历史命令
​ find 搜索
​ ps -ef 查看进程

8.vi编辑

  • 【良好习惯】:

    vi 编辑生产配置文件
    先 cp conf conf20201116
    vi 敲完 wq

  • 进入提示是 swap文件,只需ll -a查看,进行删除即可

    E325: ATTENTION
    Found a swap file by the name ".rz.txt.swp"
    owned by: root dated: Sun Nov 8 22:17:56 2020
    file name: ~root/rz.txt

  • 粘贴的坑:

    必须进入编辑模式 ,否则第一行内容丢失 不完整 【生产特别注意】

  • 在命令行模式,常用的快捷方式:

    dd 删除当前行 【常用】
    dG 删除当前行及以下所有行 【常用】
    ndd 删除当前行及以下n-1行
    gg 跳转到第一行的第一个字母
    G 跳转到最后一行的第一个字母
    shift+$ 行尾

  • 如何通过vi命令进行清空文件内容:
    gg dG

  • 生产场景:window电脑的服务的配置文件内容修改过 最新的,想要覆盖生产的文件
    gg dG
    i
    从window电脑拷贝全局内容
    到Linux的会话编辑模式中,按鼠标的右键 粘贴
    esc
    shfit+: wq

  • 行号

    尾行模式 set nu
    set nonu

9.awk切割文件

源文件

1
2
3
a b c dd
12 3 4
ex ii oo
  • 取某一列

    1
    2
    3
    4
    [bigdata@hadoop001 data]$ cat 1.log |awk '{print $1}'
    a
    12
    ex
  • 取某几列[中间有空格]

    1
    2
    3
    4
    [bigdata@hadoop001 data]$ cat 1.log |awk '{print $1,$2}'
    a b
    12 3
    ex ii
  • 取某几列,合在一起的

    1
    2
    3
    4
    [bigdata@hadoop001 data]$ cat 1.log |awk '{print $1$2}' 
    ab
    123
    exii
  • 取某一行

    1
    2
    [bigdata@hadoop001 data]$ cat 1.log |awk 'NR==1{print}'     
    a b c dd
  • 取前两行

    1
    2
    3
    [bigdata@hadoop001 data]$ cat 1.log |awk 'NR>=2{print}'
    12 3 4
    ex ii oo
  • 取第二行第三列

    1
    2
    [bigdata@hadoop001 data]$ cat 1.log |awk 'NR==2{print $3}'
    4

10.sed替换指定内容

原数据

1
2
3
4
tom b c dd
12 3 4 cindy
jerry ii day
mom dad shell
  • 将a全局替换成aa

    1
    2
    3
    4
    5
    6
    [bigdata@hadoop001 data]$ sed -i 's/a/aa/g' 2.log
    [bigdata@hadoop001 data]$ cat 2.log
    tom b c dd
    12 3 4 cindy
    jerry ii daay
    mom daad shell
  • 将"/“替换成"d”,使用"\"转义

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    [bigdata@hadoop001 data]$ cat 2.log             
    tom b c dd
    /a
    12 3 4 cindy
    /a
    jerry ii day
    /a
    mom dad shell
    /a
    [bigdata@hadoop001 data]$ sed -i 's/\//d/g' 2.log
    [bigdata@hadoop001 data]$ cat 2.log
    tom b c dd
    da
    12 3 4 cindy
    da
    jerry ii day
    da
    mom dad shell
    da

Chapter 4

1. 磁盘

1
2
3
4
5
6
[root@hadoop001 ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/vg_psychelee-lv_root
18G 8.0G 8.4G 49% /
tmpfs 503M 228K 503M 1% /dev/shm
/dev/sda1 477M 33M 419M 8% /boot

/ 系统盘 100G
/data01 数据盘 2T
/data02 数据盘 2T
/data03 数据盘 2T

2. 内存

1
2
3
4
5
[root@hadoop001 ~]# free -m
total used free shared buffers cached
Mem: 1005 922 83 5 36 111
-/+ buffers/cache: 774 231
Swap: 2015 82 1933

预留内存最好在15%

swap 因为内存不够,使用部分磁盘空间来充当内存使用,虽然可以解决内存紧缺的问题,但是效率不高。
尤其大数据,swap哪怕设置了大小 ,也尽量设置惰性使用。
参数=0

3.机器负载top

load average: 0.07, 0.05, 0.05
1m 5m 15m

经验值: 10 生产上尽量控制在10,否则服务器就认为卡
a.计算程序 hive sql、spark 、flink 密集计算 是不是要调优
b.是不是被挖矿了

​ yarn 软件、redis软件 等默认端口号 会被扫描 进行注入 挖矿

									cpu%

27448 root 20 0 446720 14848 3560 S 100% 0.2 853:09.28 ifrit-agent

​ c.硬件问题 ,内存条损坏,最后一招 万能重启 检测是不是硬件问题

4.安装

​ yum search 包名称
​ httpd.x86_64 : Apache HTTP Server

​ yum install -y httpd
​ yum remove telnet

1
2
3
4
5
6
7
[root@hadoop001 ~]# rpm -qa | grep httpd 查看httpd相关的包
httpd-tools-2.2.15-59.el6.centos.x86_64
httpd-2.2.15-59.el6.centos.x86_64
[root@ruozedata001 ~]#

[root@hadoop001 ~]# rpm -e httpd-tools-2.2.15- 删除59.el6.centos.x86_64
--nodeps do not verify package dependencies

6.端口号

1
2
3
4
5
6
[root@hadoop001 ~]# netstat -nlp| grep 27198
tcp 0 0 :::8030 :::* LISTEN 27198/java
tcp 0 0 :::8031 :::* LISTEN 27198/java
tcp 0 0 ::ffff:192.168.137.133:7776 :::* LISTEN 27198/java
tcp 0 0 :::8032 :::* LISTEN 27198/java
tcp 0 0 :::8033 :::* LISTEN 27198/java
  • 有进程PID不一定有端口号
  • 服务的通信交流, 要IP+PORT
  • 打开一个服务的web界面
    • ps -ef|grep xxx 找到pid
    • netstat -nlp| grep pid 找到对应端口号
  • 检测服务是否OK
    • linux 安装telnet
      • yum install -y telnet
    • ping ip
    • telnet ip port

7.结束进程

  • ps -ef|grep 名称

    可能匹配多个, 确认自己想要结束的进程
    
    kill -9 pid 【高危命令】
    
    kill -9 101 102 103 三个进程一起结束
    
  • 全局结束

    kill -9 $(pgrep -f 匹配字符)

    kill -9 101 102 103

  • 访问权限查看

  • 1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    [root@hadoop001 ~]# netstat -nlp|grep http
    tcp6 0 0 :::80 :::* LISTEN 3478/httpd
    tcp6 0 0 0.0.0.0:80 :::* LISTEN 3478/httpd
    tcp6 0 0 192.168.1.101:80 :::* LISTEN 3478/httpd

    80端口号服务可以对外
    window或者其他服务器 可以ip+80 进行访问的

    tcp6 0 0 localhost:80 :::* LISTEN 3478/httpd
    tcp6 0 0 127.0.0.1:80 :::* LISTEN 3478/httpd
    localhost 、127.0.0.1 代表本机
    80端口仅限本机的其他服务可以访问,window或者其他服务器无法访问

8.下载wget命令

9.解压

​ zip -r xxx.zip xxx/*
​ unzip xxx.zip

​ tar -czvf xxx.tar.gz xxx/*
​ tar -xzvf xxx.tar.gz

10.command not found

​ 没有安装
​ 没有配置环境变量

1
2
3
[root@hadoop001 ~]# which java1
/usr/bin/which: no java1 in (/usr/local/jdk/bin:/usr/local/python/bin:/usr/lib/qt-3.3/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin)
[root@hadoop001 ~]#

export JAVA_HOME=/usr/java/jdk1.8.0_181
export PATH=$JAVA_HOME/bin:$PATH 前 【推荐】

[root@hadoop001 ~]# echo $PATH
/usr/local/jdk/bin:/usr/local/python/bin:/usr/lib/qt-3.3/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin

11.定时

  • crontab -l 查看

  • crontab -e 编辑 就是编辑一个定时器文件内容

    *****sleep 10s; date >> /root/1.log


    小时


    *标识 每

面试题:
每隔10s 打印一次
*/6 * * * * 每隔6min打印

1
2
3
4
5
6
7
8
9
10
11
12
13
14
[root@hadoop001 ~]# vi test.sh

#!/bin/bash

set -u

for((i=1;i<=6;i++));

do
date
sleep 10s
done

exit 0

12.后台执行脚本

nohup … &

nohup /root/test.sh >> /root/1.log 2>&1 &