Linux 开关机和重启

  • 开机: 开机键

  • 关机: shutdown, halt, init 0 , poweroff

  • 重启 init6 , reboot

  • Shutdown命令详解:

    1
    2
    3
    4
    5
    6
    shutdown -h now  ## 立刻关机

    shutdown -h +10  ##  10分钟以后关机

    shutdown -h 12:00:00  ##12点整的时候关机

配置sudoer权限

wheel 用户组

  • 授予一个用户 sudo 权限很简单,你只需要将用户添加到wheel用户组。

    1
    usermod -aG wheel username
  • 试 sudo 访问,运行whoami命令:

    1
    2
    3
    sudo whoami
    # 你将会被提示输入密码。如果这个用户有 sudo 访问权限,命令将会打印root:
    root

sudoers 文件

  • 可以通过直接修改 /etc/sudoers 文件或者在/etc/sudoers.d目录下创建新的配置文件来配置用户的 sudo 权限。该目录下的文件都会被包含在 sudoers 文件。

  • 想要编辑/etc/sudoers文件,使用visudo命令。这个命令在保存文件时,会检查文件是否有语法错误。如果有任何错误,这个文件不会被保存。

    1
    2
    3
    4
    [root@sss ~]# visudo
    # 如果你想允许用户在运行 sudo 命令的时候,不被提示输入密码。
    # 滚动到文件最后面,添加下面的行:
    username ALL=(ALL) NOPASSWD:ALL
  • 允许用户仅仅能运行指定命令

    1
    2
    3
    # 仅仅允许用户使用du和ping命令
    username ALL=(ALL) NOPASSWD:/usr/bin/du,/usr/bin/ping

  • 可以不编辑 sudoer 文件,而在/etc/sudoers.d文件夹下创建新文件来做同样的事情。运行下面的命令:

    1
    echo "username  ALL=(ALL) NOPASSWD:ALL" | sudo tee /etc/sudoers.d/username

ssh 免密登录

Secure Shell 安全外壳的协议((一种网络协议),服务器端进行交互的协议

  • ssh 就是专为远程登录会话和其他网络服务提供安全性的协议,默认端口22
  • ssh是由客户端和服务器的软件组成

组成

  • 服务器端是: sshd的守护程序,在后台运行并相应来自客户端的连接请求

    包含:ssh程序以及scp(远程拷贝),slogin(远程登录),sftp(安全文件传输)等其他应用程序

ssh认证机制

  • 从客户端来看,ssh提供二种认证机制

  • 基于口令;知道账户和口令,就可以登录到远程主机

  • 基于密钥的安全验证

    1. 生成私钥和公钥
    2. 将公钥放到目标主机的授权池中
    3. 请求访问
    4. 主机通过公钥加密一段数据后响应
    5. 透过私钥解密后登陆目标主机

使用

  • ssh ip/ 域名 : 远程访问某台机器

  • scp -r 文件 用户@ip/域名:目录:远程拷贝

    scp -r /root/a.txt root@hdp02:~/

网络管理

  • centos 6: ifconfig

  • centos 7  :ip addr

    • lo: 回环地址
    • -a 显示所有的网络接口(默认活动的)
  • ifconfig 网卡名 up/down   开启/关闭网络接口

  • ping: 发送ECHO_REQUEST包到你指定的地址。这样你可以很方便确认你的电脑和Internet或是一个指定的IP地址是不是通的。

  • 使用 -c 开关,可以指定发送ECHO_REQUEST包的个数。

    • ping -c 4 baidu.com

使用密钥验证

  1. ssg-keygen,一路回车,得到公钥和私钥

  2. 发送公钥到授权池中~/.ssh/

    1
    2
    3
    4
    # ssh-copy-id把公钥复制到远程主机上:
    ssh-copy-id user[@host ](/host )
    # ssh-copy-id -i .ssh/id_rsa.pub 用户名字[@192.168.x.xxx ](/192.168.x.xxx )
    [root@hadoop ~]# ssh-copy-id root@hdp02
  3. 注意:ssh-copy-id将key.pub写到远程机器的 ~/.ssh/authorized_key文件中

时间和时区

时间

  • 查看系统时间的命令:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    [root@sun ~]# date
    Thu Jun 18 07:45:49 CST 2020

    [root@sss ~]# date '+%Y-%m-%d %H:%M:%S'
    2022-09-13 22:52:01

    #查看硬件时间的命令
    [root@sun ~]# hwclock
    Thu 18 Jun 2020 07:47:37 AM CST -0.866761 seconds
  • 设置系统时间的命令:

    1
    2
    3
    4
    [root@sun ~]# date -s 12/25/2016
    [root@sun ~]# date -s 19:57:30
    [root@sun ~]# date -s "2019-06-25 20:13:00"
    Tue Jun 25 20:13:00 CST 2019
  • 修改硬件时间

    1
    2
    3
    4
    5
    6
    7
    8
    #将系统时间写入到系统硬件当中
    [root@sun ~]# hwclock -w

    # 将系统时间写入硬件时间
    [root@sun ~]# hwclock --systohc

    # 本地时间写入硬件时间
    [root@sun ~]# timedatectl set-local-rtc 1

时区

  • 查看当前时区

    1
    2
    3
    4
    5
    6
    7
    8
    9
    [root@sun ~]# timedatectl status
    Local time: Thu 2020-06-18 07:50:03 CST
    Universal time: Wed 2020-06-17 23:50:03 UTC
    RTC time: Wed 2020-06-17 23:50:03
    Time zone: Asia/Shanghai (CST, +0800)
    NTP enabled: n/a
    NTP synchronized: no
    RTC in local TZ: no
    DST active: n/a
  • 修改时区

    1
    [root@sun ~]# timedatectl set-timezone Asia/Shanghai

ntpdate工具

  • 安装依赖

    1
    [root@sun ~]# yum -y install ntp ntpdate
  • 同步网络时间

    • 上海交通大学网络中心NTP服务器地址:202.120.2.101(ntp.sjtu.edu.cn)
    • 中国国家授时中心服务器地址:cn.pool.ntp.org
    1
    2
    3
    [root@sun ~]# ntpdate cn.pool.ntp.org
    17 Jun 23:52:36 ntpdate[1759]: step time server 84.16.73.33 offset -28799.545748 secntpdate cn.pool.ntp.org
    [root@sun ~]# hwclock --systohc
  • 配合计划任务

    1
    2
    # 每隔一个小时同步一下internet时间。
    * */1 * * * root ntpdate cn.pool.ntp.org;hwclock -w

chrony

  • centos8之后:不在支持ntpd软件包,使用chrony配置ntp服务器用于同步时间, 默认centos8安装系统后已经存在chrony的软件包了

    • 可以通过rpm -q chrony确认是否存在
    • 如果不存在使用yum安装即可: yum install -y chrony
  • 他有二个程序chrony(命令行界面程序)和 chronyd(守护进程)

    • chrony本身既可以作为客户端向其他时间服务器同步时间又可以提供时间同步的服务, 配置文件统一都是:/etc/chrony.conf
  • Centos8默认将chrony集成的系统中,并且自动启动. 只要设置好时区就能自动通过互联网修正你服务器的时间。

    1
    2
    3
    4
    5
    6
    7
    systemctl start chronyd.service
    systemctl status chronyd.service
    systemctl enable –now chronyd
    #设置时区
    timedatectl set-timezone "Asia/Shanghai"
    #重启chronyd
    systemctl restart chronyd
  • 其他操作:修改时间同步服务vim /etc/chrony.conf

    • 注释掉 #pool 2.centos.pool.ntp.org iburst

    • 加入新的时间服务器

      1
      2
      server 210.72.145.44 iburst
      server ntp.aliyun.com iburst

后台运行

nohup

  • 将程序以忽略挂起信号的方式运行起来,被运行的程序的输出信息将不会显示到终端。

  • 无论是否将 nohup 命令的输出重定向到终端,输出都将附加到当前目录的 nohup.out 文件中。

  • 如果当前目录的 nohup.out 文件不可写,输出重定向到$HOME/nohup.out文件中。如果没有文件能创建或打开以用于追加,那么 command 参数指定的命令不可调用。

  • 如果标准错误是一个终端,那么把指定的命令写给标准错误的所有输出作为标准输出重定向到相同的文件描述符。

  • nohup(选项)(参数)

    1
    2
    --help:在线帮助;
    --version:显示版本信息。
  • 实例

    1
    2
    3
    4
    5
    6
    # 缺省情况下该作业的所有输出都被重定向到一个名为nohup.out
    # 输出被重定向到myout.file文件中。
    nohup command > myout.file 2>&1 &

    #不做挂断操作,后台下载
    nohup wget site.com/file.zip

2>&1

  • 在Linux系统中0 1 2是一个文件描述符

    名称 代码 操作符 Java中表示 Linux 下文件描述符(Debian 为例)
    标准输入(stdin 键盘) 0 < 或 << System.in /dev/stdin -> /proc/self/fd/0 -> /dev/pts/0
    标准输出(stdout 屏幕) 1 >, >>, 1> 或 1>> System.out /dev/stdout -> /proc/self/fd/1 -> /dev/pts/0
    标准错误输出(stderr 错误) 2 2> 或 2>> System.err /dev/stderr -> /proc/self/fd/2 -> /dev/pts/0
  • 我们平时使用的

    1
    2
    3
    4
    5
    6
    echo "hello" > t.log
    echo "hello" 1> t.log
    # 将输出文件 m 和 n 合并。
    n >& m
    # 将输入文件 m 和 n 合并。
    n <& m
  • 2>&1的含义

    • 将标准错误输出重定向到标准输出
    • 符号>&是一个整体,不可分开,分开后就不是上述含义了。
  • nohup java -jar app.jar > /dev/null 2>&1 &

    • 最后一个&, 是让该命令在后台执行
    • 把标准出错重定向到标准输出,然后扔到/DEV/NULL下面去,就是把所有标准输出和标准出错都扔到垃圾桶里面。
  • 简写

    1
    2
    3
    4
    nohup java -jar app.jar >log 2>&1
    # 简写
    # &>log / >&log
    nohup java -jar app.jar &>log &

计划任务

  • 计划任务在linux的体现主要分为atcrontab

    • at: 通过 at命令安排任务在某一时刻执行一次

    • crontab: 通过crontab命令,可以在固定的间隔时间执行指定的系统指令或shell script脚本,时间间隔的单位可以是分钟,小时,日,月,周及以上的任意组合,适合周期性的日志分析和数据备份等工作.

at

  • 安装at命令,必须开启atd服务

    1
    2
    3
    4
    [root@hadoop ~]# yum install -y at
    #查看atd服务状态
    [root@hadoop ~]# systemctl enable atd
    [root@hadoop ~]# systemctl start atd
  • 设置任务

    1
    2
    3
    4
    5
    6
    # 创建at计划任务  +  时间
    # 在08:20 创建文件夹 haha
    [root@hadoop ~]# at 08:20
    at> mkdir ./haha
    at> <EOT> # Ctrl+D 结束
    job 1 at Fri Aug 14 08:20:00 2020
  • 查看计划任务

    1
    2
    3
    [root@hadoop ~]# at -l
    任务编号 执行时间 执行者
    1 Fri Aug 14 08:20:00 2020 a root
  • 指定其他时间

    1
    2
    3
    4
    5
    6
    7
    8
    # 指定某天
    [root@hadoop ~]# at 20:00 2020-08-15
    at> mkdir test3
    at> <EOT>
    job 4 at Sat Aug 15 20:00:00 2020

    # 在5分钟后
    [root@hadoop ~]# at now +5min
  • 删除计划任务

    1
    2
    3
    4
    5
    6
    [root@hadoop ~]# at -l
    2 Sat Aug 15 08:14:00 2020 a root
    4 Sat Aug 15 20:00:00 2020 a root
    [root@hadoop ~]# atrm 2
    [root@hadoop ~]# at -l
    4 Sat Aug 15 20:00:00 2020 a root
  • 计划任务创建成功后都会在/var/spool/at/目录创建脚本文件

    1
    2
    [root@hadoop ~]# ls /var/spool/at/*
    /var/spool/at/a0000301a6f68e

crontab

  • 安装

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    # 安装crontab:
    yum install crontabs
    # 开机自启
    systemctl enable crond
    # 启动服务
    service crond start
    # 关闭服务
    service crond stop
    # 重启服务
    service crond restart
    # 服务的状态
    ervice crod status
    # 重新载入配置
    service crond reload
  • 用户级别计划任务使用 , 从/var/spool/cron目录中删除

    1
    2
    3
    4
    5
    6
    7
    8
    # 将file做为crontab的任务列表文件并载入crontab。
    crontab [-u user ] file
    file:file是命令文件的名字
    crontab [ -u user ][-e -l -r]
    -u:指定用户
    -e:编辑用户的crontab文件。
    -l:查看用户的crontab
    -r:删除用户的crontab;
  • 利用crontab -e 来添加定时任务

    • 日志文件: ll /var/log/cron*

    • 用户任务调度: crontab 文件都被保存在/var/spool/cron目录中。其文件名与用户名一致

      1
      2
      [root@sss ~]# cat /var/spool/cron/root
      */1 * * * * date >> /root/date.txt

crontab格式

  • 基本格式

    1
    2
    3
    4
    5
    6
    7
    8
    *  *  *  *  * user-name  command
    分  时  日  月  周  命令
    第1列表示分钟1~59 每分钟用*或者 */1表示; */10表示10分钟
    第2列表示小时0~23(0表示0点) 7-9表示:7点到9点之间 多个时间段用逗号隔开7-9,11 */1每小时
    第3列表示日期1~31
    第4列表示月份1~12
    第5列标识号星期0~6(0表示星期天)
    第6列要运行的命令
  • 配置示例

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    # 每分钟执行一次date命令
    */1 * * * * date >> /root/date.txt

    # 每一小时重启apache
    * */1 * * * /usr/local/etc/rc.d/httpd restart

    # 晚上11点到早上7点之间,每隔一小时重启apache
    * 23-7/1 * * * /usr/local/etc/rc.d/httpd restart

    # 每晚的21:30重启apache
    30 21 * * * /usr/local/etc/rc.d/httpd restart

    # 每月1、10、22日的4 : 45重启apache
    45 4 1,10,22 * * /usr/local/etc/rc.d/httpd restart

    # 每周六、周日的1 : 10重启apache
    10 1 * * 6,0 /usr/local/etc/rc.d/httpd restart

    # 每天18 : 00至23 : 00之间每隔30分钟重启apache
    0,30 18-23 * * * /usr/local/etc/rc.d/httpd restart

    # 每星期六的11 : 00 pm重启apache
    0 23 * * 6 /usr/local/etc/rc.d/httpd restart

    # 每月的4号与每周一到周三的11点重启apache
    0 11 4 * /usr/local/etc/rc.d/httpd restart

    # 一月一号的4点重启apache
    0 4 1 jan * /usr/local/etc/rc.d/httpd restart

系统定时任务

  • 例如清理系统日志,清理系统缓存

  • 路径1:

    1
    2
    3
    # 可以写定时任务
    cd /etc/logrotate.d/
    cat syslog
  • 路径2:

    1
    2
    # 不推荐使用,但是可以看格式
    cat /etc/crontab
  • 路径3

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    [root@sss logrotate.d]# ls /etc/ | grep cron*
    anacrontab
    cron.d # -->同路径2 ,可以写定时任务
    cron.daily
    cron.deny # -->控制普通用户使用定时任务crontab
    cron.hourly
    cron.monthly
    crontab
    cron.weekly
    microcode_ctl

强行踢掉某登录用户

查看用户

  • 在系统中我们可以用w或者who来查看用户:

    • 当登陆系统用户很多的时候,可以在W后面加上某个用户名,则会查看该用户执行任务的情况。

      1
      2
      3
      4
      5
      6
      7
      8
      [sun@sun ~]$ who
      sun tty1 2020-06-18 07:13
      sun pts/2 2020-06-18 07:28 (192.168.61.1)
      [sun@sun ~]$ w sun
      07:32:41 up 19 min, 2 users, load average: 0.00, 0.01, 0.05
      USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
      sun tty1 07:13 18:01 0.01s 0.01s -bash
      sun pts/2 192.168.61.1 07:28 1.00s 0.11s 0.00s w
    • 第一行显示系统的汇总信息,字段分别表示系统当前时间、系统运行时间、登陆用户总数及系统平均负载信息。

      1
      2
      3
      4
      5
      6
      7
      8
      9
      对于上述中的几个显示数据意义为:   

      07:32:41 表示执行W的时间。   

      up 19 min 表示系统运行时间。   

      2 USERS 表示当前系统登陆用户总数。   

      LOAD AVERAGE 与后面的数字一起表示系统在过去1,5,10分钟内的负载程度,数值越小,系统负载越轻。  
    • 从第二行开始构成一个表格,共有8个栏目,分别显示各个用户正在做的事情及该用户所占用的系统资料。

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      USER:显示登陆用户帐号名。用户重复登陆,该帐号也会重复出现。   

      TTY:用户登陆所用的终端。   

      FROM:显示用户在何处登陆系统。   

      LOGIN@:是LOGIN AT的意思,表示登陆进入系统的时间。   

      IDLE:用户空闲时间,从用户上一次任务结束后,开会记时。   

      JCPU:一终端代号来区分,表示在某段时间内,所有与该终端相关的进程任务所耗费的CPU时间。   

      PCPU:指WHAT域的任务执行后耗费的CPU时间。   

      WHAT:表示当前执行的任务。   

踢掉用户

  • 查自己登录的用户

    1
    2
    [sun@sun ~]$ who am i
    sun pts/2 2020-06-18 07:28 (192.168.61.1)
  • 接下来使用 pkill 踢掉用户

    1
    [sun@sun ~]$ pkill -kill -t tty1

查看登陆用户历史

  • 系统管理员若想知道系统中用户登陆的历史行为,还可以察看用户曾经登陆到系统。

  • 使用LAST命令可以查询曾经登陆用户的信息: 执行last命令其实是显示/var/log/目录下的wtmp文件内容。

  • Wtmp文件是以二进制格式进行存储的,如果直接使用文本编辑器查看,查看的会是一堆乱码。

  • 使用LAST 命令时,列出的文件内容会非常多,根本看不清楚。此时可以使用前面介绍的管理方式来观看,例如/more/ LESS,则可以查看前后内容。同查看用户情况一样,

  • 查看那某个用户的登陆情况,也可以在LAST命令后加上用户名,则系统只会显示该用户登陆系统情况。

    1
    2
    3
    4
    5
    6
    7
    8
    [root@sun ~]# last sun
    sun pts/0 192.168.61.1 Thu Jun 18 07:39 still logged in
    sun pts/2 192.168.61.1 Thu Jun 18 07:28 still logged in
    sun pts/1 192.168.61.1 Thu Jun 18 07:26 - 07:28 (00:01)
    sun pts/0 192.168.61.1 Thu Jun 18 07:15 - 07:29 (00:13)
    sun tty1 Thu Jun 18 07:13 - 07:34 (00:20)
    sun tty1 Thu Jun 18 06:59 - 07:12 (00:13)
    sun tty1 Thu Jun 18 05:15 - crash (01:43)

软件安装

  • 二进制发布包: 软件已经针对具体平台编译打包发布,只要解压,修改配置即可

  • 软件以源码工程的形式发布,需要获取到源码工程后用相应开发工具进行编译打包部署,如redis,nginx

RPM发布包

  • 软件已经按照RedHat(Redhat Package Manager)的包管理工具规范RPM进行打包发布,需要获取到相应的软件RPM发布包,然后用rpm命令进行安装(如:mysql)

  • 安装

    1
    2
    3
    4
    5
    6
    7
    8
    rpm -ivh filename
    参数:
    -i :安装的意思
    -v :可视化
    -h :显示安装进度
    另外在安装一个rpm包时常用的附带参数有:
    --force 强制安装,即使覆盖属于其他包的文件也要安装
    --nodeps 当要安装的rpm包依赖其他包时,即使其他包没有安装,也要安装这个包
  • 升级包:

    1
    2
    rpm -Uvh filename
    -U 升级
  • 查询当前安装的所有rpm包

    1
    2
    3
    4
    5
    6
    7
    rpm -qa
    # 查询当前安装的和sql相关的包:
    rpm -qa | grep 'sql'
    # 查询sqlite安装路径
    rpm -ql sqlite
    # 查询一个包是否安装:包名是不带有平台信息以及后缀名
    rpm -q 包名
  • 卸载包

    1
    2
    # filename是通过rpm -aq 的查询功能所查询到的
    rpm -e filename (--nodpes)

Yum在线安装

  • Yum(Yellow dog Updater, Modified)是一个在CentOS和RedHat以及SUSE中的Shell前端软件包管理器

  • 比如软件已经以RPM规范打包,但发布在了网络上的一些服务器上,可用yum在线安装服务器上存在的rpm软件,并且会自动解决软件安装过程中的库依赖问题(注:类似于maven)

  • yum提供了查找、安装、删除某一个、一组甚至全部软件包的命令,而且命令简洁而又好记

  • yum仓库服务器本质上就是一台http服务器,服务器的目录中放置了rpm包,及rpm包的索引信息文件,即可为yum客户端提供rpm文件下载

    1
    2
    3
    4
    yum update 升级系统
    yum install ~ 安装指定软件包~
    yum update ~ 升级指定软件包
    yum remove ~ 卸载指定软件~

最后

Linux命令参考:https://www.ityww.cn/linux/linux-command