Linux基础教程

一.Linux目录

1.目录简介

/根目录

/dev 管理设备

/etc 配置文件

/home家目录

/lib动态库

/usr 已经安装的软件

/opt 未安装的软件放置目录

/sbin 高权限指令

/selinux 安全

/tmp 临时文件

/media 识别外部设备,U盘,光驱

/var 日志文件

二.Linux实操

1.远程登录Linux系统

1)远程登录的软件

​ xshell5

2)远程上传和下载软件

​ xftp5(链接时选用SFTP协议,才能使用22端口)

2.vi和vim编辑器

vim可以认为是vi的增强版

1)vi和vim的三种常见模式

  • 正常模式

    再此模式下,可以使用快捷键,上下左右移动光标,复制和删除等。

  • 插入模式/编辑模式

    输入i即可进入此模式

  • 命令行模式

    存盘,退出vim等操作

    img
  • 快速入门案例

    开发一个hello.java程序

    public class Hello
    {

    public static void main(String []args)
    {
        System.out.prntln('Hello World!');
    }

    }

    • 快捷键的使用

    1)复制当前行 yy,复制当前行的下5行,5yy,并粘贴 p

    2)删除当前行是dd,删除当前行的下5行是 5dd

    3)在文件中查找某个单词,命令行下 /关键词 回车 就能查找

    4)设置文件的行号 命令行下 输入 [:set nu],取消行号 [:set nonu]

    5)编辑/etc/profile文件,到达文件的最末行[G]和最首行[gg],此操作是在正常模式下

    6)撤销动作,输入hello 然后撤销[正常模式下:u]

    7)编辑一个文件/etc/profile,并将光标移动到第20行[shift+g]

    ​ ①显示行号[:set nu]

    ​ ②输入20这个数[正常模式]

    ​ ③输入shift+g[正常模式]

3.开关机和重启命令
  • 基本介绍

​ shutdown

​ shutdown -h now 立即关机

​ shutdown -h 1 1分钟后关机

​ shutdown -r now 立即重启

​ halt 直接使用,等价于关机

​ reboot 重启系统

​ sync 把内存的数据保存到磁盘上(关机或重启之前使用)

  • 用户的登录和注销

    logout—–退出远程登录

4.用户管理
  • 基本介绍

    11
  • 添加用户(创建用户时,会自动为其创建组并且创建与其同名的家目录)

    useradd 【选项】用户名

    [root@localhost ~]# useradd xiaoming

    useradd -d 指定目录(未存在目录) 用户名 ——>在指定目录创建用户

  • 为用户创建密码或者修改密码

    passwd 用户名

    [root@localhost ~]# passwd xiaoming

  • 删除用户

    userdel 用户名

    ①删除用户,保留家目录

    [root@localhost home]# userdel xiaoming

    ②删除用户以及用户主目录

    [root@localhost home]# userdel -r xm

    删除用户时,一般不会删除家目录

  • 查询用户信息

    id 用户名

    [root@localhost home]# id zzy
    uid=500(zzy) gid=500(zzy) 组=500(zzy)

    用户id号 所在组id号 组名称

  • 切换用户

    su - 非root用户名

    [root@localhost home]# su - zzy

    root切换到权限低的用户不需要密码

    exit 可以回到原用户

  • 查看当前用户

    whoami

    [root@localhost home]# whoami
    root

  • 用户组

    介绍:类似于角色,系统可以对有共性的多个用户进行统一的管理

    增加组:groupadd 组名

    演示:[root@localhost /]# groupadd wd

    删除组:groupdel 组名

    演示:[root@localhost /]# groupdel wd

    增加用户时直接加上组:useradd -g 用户组 用户名

    案例:增加一个zwj用户,将其指定到wudang组

    [root@localhost /]# groupadd wudang

    [root@localhost /]# useradd -g wudang zwj

    [root@localhost /]# useradd -g wudang zwj
    [root@localhost /]# id zwj
    uid=501(zwj) gid=501(wudang) 组=501(wudang)

    修改用户组:usermod -g 用户组 用户名

    案例:创建一个shaolin组,修改zwf所在组

    [root@localhost /]# groupadd shaolin
    [root@localhost /]# usermod -g shaolin zwj
    [root@localhost /]# id zwj
    uid=501(zwj) gid=502(shaolin) 组=502(shaolin)

  • 用户和组的配置文件

    /etc/passwd 用户配置文件 vim /etc/passwd

    1570349096959

    zzy用户名:x加密后的密码:500用户id:500组id:/home/zzy 家目录 :shell

    /etc/ shadow 口令配置文件

    vim /etc/shadow

    1570349386555

    /etc/group 组配置文件

    vim /etc/group

    1570349420084
5.实用指令
  • 指定运行级别

    1570350140600

    0:关机

    1:单用户(找回丢失密码)

    2:多用户状态没有网络服务

    3:多用户状态有网络服务

    4:系统未使用保留给用户

    5:图像界面

    6:系统重启

    [root@localhost /]# vim /etc/inittab

    1570350392095

    常用的运行级别是3和5,要修改默认级别可改配置文件/etc/inittab的id:5:initdefault:这一行的数字

    切换到指定运行级别的指令:

    命令:init [0123456]

    案例:运用init切换用户级别,5-3,然后关机

    init 5

    init 3

    init 0

    找回丢失的root密码

    ​ ①进入到单用户模式(因为进入到单用户,root不需要密码就能登录)

    ​ ②修改密码

    开机->引导是输入e ->看到一个界面a输入e->看到一个新的界面b,选中第二行(编辑内核) 输入e->在此行的最后输入 1 ,回车 ->回到b界面,输入b,此时就会进入单用户模式。然后输入passwd root修改密码即可

  • 帮助指令

    对某个指令不熟悉时,通过帮助指令来了解使用方法

    man [命令或配置文件]

    案例:

    查看ls的帮助

    man ls

    help 命令

    help cd
文件目录类指令
  • pwd

    显示当前工作目录的绝对路径

    [root@localhost ~]# pwd
    /root

  • ls指令

    ls [选项] [目录或文件]

    -a:显示当前目录所有文件信息(包括隐藏文件)

    -l:以列表显示文件的详细信息

  • cd命令

    cd [参数]

    cd ~(可省略)回到家目录

    cd .. 回到当前目录的上一级目录

    理解:相对路径和绝对路径

  • mkdir指令

    mkdir [选项] [创建的目录]

    [root@localhost ~]# mkdir /home/dog

    -p:创建多级目录

    [root@localhost home]# mkdir -p /home/animal/tiger

  • rmdir删除空目录

    rmdir [选项] 要删除的空目录

    [root@localhost home]# rmdir /home/dog

  • rm -rf 指令

    [root@localhost home]# rmdir animal
    rmdir: 删除 “animal” 失败: 目录非空
    [root@localhost home]# rm -rf animal

  • touch指令

    touch 文件名称 —创建一个空文件

    touch hello.txt

    创建多个文件

    touch a1.txt a2.txt

  • cp指令

    cp [选项] source(源文件) dest(目标路径)

    -r:递归复制整个文件夹

    拷贝单个文件
    [root@localhost home]# cp aaa.txt bbb/
    拷贝整个目录

    [root@localhost home]# cp -r bbb ccc

    强制覆盖不提示的方法:\cp

  • rm指令

    rm [选项] 要删除的文件或者目录

    -r:递归删除整个文件

    -f:强制删除不提示

    [root@localhost home]# rm aaa.txt
    rm:是否删除普通空文件 “aaa.txt”?y

    [root@localhost home]# rm -rf bbb

  • mv命令

    mv 移动文件与目录或者重命名

    mv oldFileName newFileName —–重命名(同一目录)

    [root@localhost home]# mv hello.txt world.txt

    mv /temp/aa /targetfolder———移动

    [root@localhost home]# mv world.txt ./zzy/

    移动的同时重命名

    [root@localhost zzy]# mv world.txt /home/hello.txt

  • cat指令

    cat [选项] 要查看的文件

    只能浏览文件信息,不能修改

    -n:显示行号

    cat -n hello.txt

    分页显示(通过管道符)

    [root@localhost home]# cat hello.txt | more

  • more指令

    more 要查看的文件

    空格:代表下一页

    Enter:下一行

    q:退出

    Ctrl+f:向下滚动一屏

    Ctrl+b:向上滚动一屏

    =:当前行号

    :f 输出文件名和当前行号

  • less指令

    less 要查看的文件

    是用于较大文件,分屏查看文件内容,分步加载文件内容。

  • (>)和>>指令

    输出重定向>(覆盖原来内容)

    追加>>(追加到文件尾部)

    ls -l >a.txt ——将列表的内容写入a.txt (覆盖写)

    ls -al >>b.txt ——将列表的内容追加写到b.txt

    cat a.txt >b.txt——a.txt的内容覆盖写到b.txt

    echo “内容” >c.txt——-覆盖写到c.txt

    echo “内容”>>c.txt ——–追加写到c.txt

  • cal

    cal 查看日历信息

  • echo指令

    作用:输出内容到控制台

    echo [选项] [输出内容]

    使用echo输出环境变量的路径

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

    使用echo输出hello world

    [root@localhost ~]# echo “hello world”
    hello world

  • head指令

    head 文件名 [查看文件的前10行内容]

    head -n 5 [查看文件的前5行内容]

    [root@localhost home]# head -n 5 hello.txt

    应用实例:查看/etc/profile的前5行代码

    [root@localhost home]# head -n 5 /etc/profile
  • tail指令

    显示文件尾部内容,用法类似head指令

    tail 文件名

    tail -n 文件名

    tail -f 文件名 [追踪该文件的所有更新]

    案例:实时监控hello.txt

    tail -f hello.txt
  • ln软链接指令

    类似于windows的快捷方式

    ln -s [源文件或目录] [软连接名]

    案例:创建一个链接到root的快捷方式

    [root@localhost home]# ln -s /root linktoroot
    
    [root@localhost home]# cd linktoroot

    当使用pwd查看当前目录时,仍然在当前目录

    删除软链接

    [root@localhost home]# rm -rf linktoroot 

    —-(注意不要带/)

  • history指令

    查看已经执行过的指令

    history

    显示所有历史指令

    [root@localhost home]# history 

    显示最近的10个指令

    [root@localhost home]# history 10

    执行历史编号为5的指令

    [root@localhost home]# !298
时间日期类指令
  • date指令

    基本语法:

    date 显示当前时间

    date +%Y 显示当前年份

    date +% m 显示当前月份

    date +%d 显示当前是哪一天

    date “+%Y-%m-%d-%H-%M-%S” 显示年月日时分秒

    [root@localhost home]# date
    2019年 10月 07日 星期一 21:02:54 CST
    [root@localhost home]# date +%Y
    2019
    [root@localhost home]# date "+%Y-%m-%d-%H-%M-%S"
    2019-10-07-21-03-49

    设置系统时间

    date -s "2018-10-10 11:20:20"
  • cal查看日历

    cal [选项] 显示本月历

    [root@localhost home]# cal

    显示2020年的整年日历

    [root@localhost home]# cal 2020
搜索查找类
  • find指令

    find [搜索目录] [选项]

    -name 指定文件名查找

    -user 指定用户名所有文件

    -size 指定文件的大小(+20M查找>20M的文件)[+n 大于 -n 小于 n 等于] [或者20K ]

    [root@localhost home]# find /home -name hello.txt
    /home/hello.txt
    [root@localhost home]# find /home -user zzy

    查找以txt结尾的文件(尽量不在本目录使用)

    [root@localhost /]# find / -name *.txt
  • locate指令

    快速定位文件路径(基于locate的数据库实现快速定位)

    locate 搜索文件

    注意:使用locate之前,必须先使用updatedb指令创建locate数据库

    [root@localhost /]# updatedb
    [root@localhost /]# locate hello.txt
    /home/hello.txt
  • grep指令和管道符号|

    grep过滤查找

    管道符|:表示将前一个命令的处理结果输出传递给后面的命令处理。

    grep [选项] 查找内容 源文件

    -n 显示匹配行及行号

    -i 忽略字母大小写

    案例:在hello.txt查找hello所在行,并显示行号

    [root@localhost home]# grep -n hello /home hello.txt
    hello.txt:66:hello
    [root@localhost home]# cat hello.txt | grep -n hello
    66:hello
压缩和解压缩
  • gzip和gunzip指令

    gzip 文件 [压缩文件]

    gunzip 文件.gz [解压缩文件]

    [root@localhost home]# gzip hello.txt
    [root@localhost home]# ls
    a.txt  hello.txt.gz  mycal  zzy
    [root@localhost home]# gunzip hello.txt.gz
    [root@localhost home]# ls
    a.txt  hello.txt  mycal  zzy

    当使用gzip进行压缩文件后,不会保留源文件

  • zip和unzip指令

    zip [选项] xxx.zip 将要压缩的内容 [压缩文件或者命令]

    -r 递归压缩

    压缩home目录下的所有文件

    [root@localhost home]# zip -r mypack.zip /home/
    [root@localhost home]# ls
    a.txt  hello.txt  mycal  mypack.zip  zzy

    unzip [选项] xxx.zip

    将mypack.zip解压到/opt/tmp目录

    [root@localhost home]# unzip -d /opt/tmp mypack.zip
    [root@localhost tmp]# ls
    home
  • tar指令

    基本语法:tar [选项] xxx.tar.gz 打包的内容 [打包目录,压缩后的文件格式为.tar.gz]

    -c:产生.tar打包文件

    -v:显示详细信息

    -f:指定压缩后的文件名

    -z:打包同时压缩

    -x:解包.tar文件

    将/home/a1.txt,a2.txt压缩成a.tar.gz

    [root@localhost home]# tar -zcvf a.tar.gz a1.txt a2.txt
    a1.txt
    a2.txt
    [root@localhost home]# ls
    a1.txt  a2.txt  a.tar.gz  a.txt  hello.txt  mycal  zzy

    将/home的文件压缩成myhome.tar.gz

    [root@localhost home]# tar -zcvf myhome.tar.gz /home/
    
    ...
    
    [root@localhost home]# ls
    a1.txt  a2.txt  a.tar.gz  a.txt  hello.txt  mycal  myhome.tar.gz  zzy

    将a.tar.gz解压到当前目录

    [root@localhost home]# tar -zxvf a.tar.gz 
    a1.txt
    a2.txt
    [root@localhost home]# ls
    a1.txt  a2.txt  a.tar.gz  a.txt  hello.txt  mycal  myhome.tar.gz  zzy

    将myhome.tar.gz解压到/opt/tmp目录下(指定的解压缩路径必须存在)

    [root@localhost home]# tar -zxvf myhome.tar.gz -C /opt/tmp/
6.组管理和权限管理
组管理
  • linux组的基本介绍

    在Linux中的每个用户必须属于一个组,不能独立于组外。在Linux在每个文件有所有者,所在组,其他组的概念

    1)所有者

    2)所在组

    3)其他组

    4)改变用户所在组

  • 所有者

    文件的创建者

    查看文件的所有者

    1)指令:ls -ahl

    drwx------. 26 zzy  zzy  4.0K 10月  8 22:46 zzy

    zzy 所有者 zzy 所属组

    修改文件的所有者:

    chown 用户名 文件名

    使用root创建一个apple.txt,然后改变所有者为zzy

    [root@localhost home]# touch apple.txt
    [root@localhost home]# ll
    总用量 120
    -rw-r--r--.  1 root root      0 10月  8 23:02 apple.txt
    [root@localhost home]# chown zzy apple.txt
    [root@localhost home]# ll
    总用量 120
    -rw-r--r--.  1 zzy  root      0 10月  8 23:02 apple.txt
  • 组的创建

    groupadd 组名

    创建animal组,用户fox,将fox放到animal组

    [root@localhost home]# groupadd animal
    [root@localhost home]# useradd -g animal fox
    [root@localhost home]# id fox
    uid=504(fox) gid=504(animal)=504(animal)
  • 所在组

    某个用户创建了一个文件后,默认这个文件的所在组就是该用户所在组

    修改文件的所在组

    chgrp 组名 文件名

    使用root创建bb.txt文件,查看此文件的所在组,然后修改此文件的所在组到animal组

    [root@localhost home]# touch bb.txt
    [root@localhost home]# ll
    总用量 124
    -rw-r--r--.  1 root root        0 10月  8 23:12 bb.txt
    [root@localhost home]# chgrp animal bb.txt
    [root@localhost home]# ll
    总用量 124
    -rw-r--r--.  1 root animal      0 10月  8 23:12 bb.txt
  • 改变用户所在组

    添加用户时指定用户所在组:useradd -g 组名 用户名

    或者使用root用户修改:usermod -g 组名 用户名

    新建monster组,修改fox用户所在组为monster

    [root@localhost home]# groupadd monster
    [root@localhost home]# id fox
    uid=504(fox) gid=504(animal)=504(animal)
    [root@localhost home]# usermod -g monster fox
    [root@localhost home]# id fox
    uid=504(fox) gid=505(monster)=505(monster)
权限管理
  • 权限的基本介绍

    -rw-r--r--.  1 root root      263 10月  6 20:56 a.txt

    rw-表示文件所有者的权限–读写

    r–表示文件所在组的用户的权限 –只读

    r–文件的其他组的权限 –只读

    1 –如果是文件,表示硬链接,如果是目录,表示字母的个数

    root –所有者

    root–所属组

    263–文件大小,如果是目录则显示4096

    10月 6 20:56–文件最后的修改时间

    0-9位说明:

    1)第0位确定文件夹类型[- (普通文件) ,d(目录),l(软链接文件),c(字符设备),b(块文件,硬盘)]

    2)第1-3位确定所有者—user

    3)第4-6位确定所属组—-group

    4)第7-9位确定其他用户用于该文件的权限–other

  • chmod

    修改文件或者目录的权限

    第一种方式:+,=,-

    u:所有者,g:所有组,o:其他人,a:所有人

    1)chmod u=rwx,g=rx,o=x 文件目录名

    2)chmod o+w 文件目录名

    3)chmod a-x 文件目录名

    案例:

    给abc文件的所有者读写执行的权限,给所在组读执行的权限,给其他组读执行的权限

    [root@localhost home]# ll
    总用量 124
    -rw-r--r--.  1 root root        0 10月  9 14:40 abc
    [root@localhost home]# chmod u=rwx,g=rw,o=rx abc
    [root@localhost home]# ll
    总用量 124
    -rwxrw-r-x.  1 root root        0 10月  9 14:40 abc

    给abc文件的所有者除去执行的权限,增加组执行的权限

    [root@localhost home]# chmod u-x,g+x abc
    [root@localhost home]# ll
    总用量 124
    -rw-rwxr-x.  1 root root        0 10月  9 14:40 abc

    给abc文件的所有用户添加执行的权限

    [root@localhost home]# chmod a+x abc
    [root@localhost home]# ll
    总用量 124
    -rwxrwxr-x.  1 root root        0 10月  9 14:40 abc

    第二种方式:通过数字变更权限

    r=4 w=2 x=1 rwx=4+2+1=7

    chmod u=rwx,g=rx,o=x 文件目录名

    相当于 chmod 751 文件目录名

    案例:将abc.txt文件的权限修改成rwxr-xr-x ,使用数字方式实现

    [root@localhost home]# ll
    总用量 12
    -rw-r--r--.  1 root root      0 10月  9 19:06 abc.txt
    [root@localhost home]# chmod 755 abc.txt
    [root@localhost home]# ll
    总用量 12
    -rwxr-xr-x.  1 root root      0 10月  9 19:06 abc.txt
  • 修改文件所有者

    chown newowner file 改变文件的所有者

    chown newownergroup file 改变用户的所有者和所有组

    -R 如果是目录,则使其下的所有子文件或目录递归生效

    案例:将abc.txt文件的所有者修改位fox

    [root@localhost home]# chown fox abc.txt
    [root@localhost home]# ll
    总用量 12
    -rwxr-xr-x.  1 fox  root      0 10月  9 19:06 abc.txt

    将kkk目录所有文件或目录的所有者改为fox

    [root@localhost home]# chown -R fox kkk
    [root@localhost home]# ll
    总用量 16
    drwxr-xr-x.  2 fox  root   4096 10月  9 19:15 kkk
  • 改变文件的所在组

    charp newgroup file 改变文件的所有组

    将abc.txt所属组改为animal

    [root@localhost home]# chgrp animal abc.txt
    [root@localhost home]# ll
    总用量 16
    -rwxr-xr-x.  1 fox  animal    0 10月  9 19:06 abc.txt

    将kkk下所有文件和目录的所属组改为fox

    [root@localhost home]# chgrp -R animal kkk
    [root@localhost home]# ll
    总用量 16
    drwxr-xr-x.  2 fox  animal 4096 10月  9 19:15 kkk
最佳实践—警察和土匪游戏

​ 两个组:ploice(警察),bankit(土匪)

​ 警察用户:jack,jerry

​ 土匪用户:xh,xq

​ 要求:

​ 创建组

root@localhost home]# groupadd ploice
[root@localhost home]# groupadd bankit

​ 创建用户并分组

[root@localhost home]# useradd -g police jack
[root@localhost home]# useradd jerry
[root@localhost home]# chgrp -R police jerry
[root@localhost home]# ll
总用量 24
drwx------.  4 jack  police 4096 10月  9 19:49 jack
drwx------.  4 jerry police 4096 10月  9 19:49 jerry
[root@localhost home]# useradd -g bankit xh
[root@localhost home]# useradd -g bankit xq
[root@localhost home]# ll
总用量 32
drwx------.  4 xh    bankit 4096 10月  9 19:55 xh
drwx------.  4 xq    bankit 4096 10月  9 19:55 xq

​ jack创建一个文件,自己可以读写,本组人可以读,其他组没有任何权限

[jack@localhost ~]$ touch jackfile
[jack@localhost ~]$ ll
总用量 0
-rw-r--r--. 1 jack police 0 10月  9 19:56 jackfile
[jack@localhost ~]$ chmod 740 jackfile
[jack@localhost ~]$ ll
总用量 0
-rwxr-----. 1 jack police 0 10月  9 19:56 jackfile

​ jack修改该文件,让其他组可以读,本组人可以读写

[jack@localhost ~]$ chmod 764 jackfile
[jack@localhost ~]$ ll
总用量 0
-rwxrw-r--. 1 jack police 0 10月  9 19:56 jackfile

xh投靠警察,看看是否可以读写

[root@localhost home]# chgrp -R police xh
[root@localhost home]# ll
总用量 32
drwx------.  4 xh    police 4096 10月  9 19:55 xh
[xh@localhost home]$ cd jack
bash: cd: jack: 权限不够
[jack@localhost home]$ chmod g=rx jack
[jack@localhost home]$ ll
总用量 32
drwxr-x---.  4 jack  police 4096 10月  9 20:04 jack
[root@localhost ~]# usermod -g police xh
[root@localhost ~]# id xh
uid=507(xh) gid=501(police)=501(police)
[xh@localhost home]$ cd jack
[xh@localhost jack]$ ll
总用量 0
-rwxrw-r--. 1 jack police 0 10月  9 19:56 jackfile
[xh@localhost jack]$ vim jackfile

注意文件所在组的修改和用户所在组的修改所用命令不同

注意修改jack文件的权限管理后,重新登录xh账号

练习:

1570624373363
7.crond定时调度
  • crontab任务调度

    是指系统在某个时间执行的特定的命令或程序

    crontab [选项]

    -e 编辑crond任务调度

    -l 查询crontab任务

    -r 删除当前用户的所有crontab任务

    案例:

    每分钟执行 [root@localhost home]# ls -l /home>>/home/to.txt指令

    简单的任务不用写脚本,可以在crontab中加入任务即可,对于比较复杂的任务,需要写脚本(shell编程)来完成

    crontab -e

    */1 * * * * ls -l /home >> /home/to.txt

    wq退出

    参数说明:

    第一个* 一小时的第几分钟,范围 0-59

    第二个* 一天的第几小时,范围 0-23

    第三个* 一月的第几天,范围 1-31

    第四个* 一年的第几月,范围 1-12

    第五个* 一周的星期几,范围 0-7(0和7都代表星期日)

    特殊符号的说明:

    *代表任何时间,比如第一个 * 就代表一小时每分钟都执行一次

    ,代表不连续的时间,比如 0 8,12,16 * * * 命令,就代表在每天的8点0分,12点0分,16点0分都执行一次命令

    -代表连续的时间范围。比如 0 5 * * 1-6 命令,带在周一到周六的凌晨5点0分执行命令

    */n 代表每隔多久执行一次,比如: */10 * * * * 命令,代表每隔10分钟执行一次命令

    练习:

    1)每隔1分钟,就将当前日期信息,追加到/tmp/mydate文件中

    ​ 编写一个文件/home/mytask1.sh

    ​ vim mytask1.sh

    ​ date >> /tmp/date

    ​ 给mytask1.sh一个可执行权限 chmod 744 mytask1.sh

    ​ crontab -e

    ​ */1 * * * * /home/mytask1.sh

    2)每隔一分钟,将当前日期和日历都追加到/home/mycal文件中

    类似1)修改 date >> /home/mycal 为 date >>/home/mycal

    cal >> /home/mycal

8.磁盘分区,挂载
  • 分区的基础知识

    分区的方式:

    1)mbr分区

    最多支持四个分区

    系统只能安装在主分区

    扩展分区要占一个主分区

    MBR最大只支持2TB,但拥有好的兼容性

    2)gtp分区

    支持无限多的分区(windows下做多支持128个分区)

    最大支持18EB的大容量(EB=1204PB,PB=1024TB)

    windows7 64位以后支持gtp

  • 分区基础知识

    Windows下的磁盘分区:

    1570691965777
  • Linux分区

    原理介绍:

    Linux来说无论有几个分区,分给哪一个目录使用,它归根结底就只有一个目录,一个独立且唯一的文件结构,Linux中每个分区都是用来组成整个文件系统的一部分

    Linux采用了一种叫做载入的处理方法,它的整个文件系统包含了一整套的文件和目录,且将一个分区和一个目录联系起来,这时载入的一个分区使它的存储空间在一个目录下获得

    示意图:

    1570692250711
  • 查看分区和挂载命令:lsblk -f

    1570692929383
  • 挂载的经典案例

    新增一块硬盘,挂载到/home/newdisk目录

    1)虚拟机添加硬盘

    2)分区 fdisk/dev/sdb

    3)格式化 mkfs -t ext4 /dev/sdb1

    4)挂载 创建目录/home/newdisk 挂载 mount /dev/sdb1 /home/newdisk

    5)设置可以自动挂载(已经挂载,重启机器后仍然可以挂载到 /home/newdisk)

    vim /etc/fstab

    /dev/sdb1 /home/newdisk ext4 defaults 0 0

    mount -a

    reboot

  • 具体步骤

    ①在虚拟机菜单中,选择设置,设别列表添加硬盘,下一步,修改磁盘大小,完成后重启系统才能识别

    ②分区命令:fdisk /dev/sdb

    开始对/sdb分区

    m–显示命令列表

    p–显示磁盘分区 同 fdisk -l

    n –新增分区

    d –删除分区

    w –写入并退出

    说明:开始分区后,输入n,新增分区,然后选择p,分区类型位主分区,两次回车默认剩余全部空间。最后输入w写入分区并退出,若不保存退出输入q

    ③格式化磁盘

    分区命令:mkfs -t ext4 /dev/sdb1

    其中ext4是分区类型

    ④挂载:将一个分区与一个目录联系起来

    mount 设备名称 挂载目录

    mount /dev/sdb1 /home/newdisk

    umount 设备名称或挂载目录

    umount /dev/sdb1 或者 umount /home/newdisk

    ⑤永久挂载

    通过修改/etc/fstab实现挂载

    编辑完成后

    [root@localhost home]# vim /etc/fstab
    [root@localhost home]# mount -a

    添加完成后,执行mount -a 即可生效

磁盘情况查询
  • 查询系统整体磁盘的使用情况

    [root@localhost ~]# df -h
    Filesystem                    Size  Used Avail Use% Mounted on
    /dev/mapper/VolGroup-lv_root   18G  5.3G   12G  32% /
    tmpfs                         764M   76K  764M   1% /dev/shm
    /dev/sda1                     485M   33M  427M   8% /boot
    /dev/sdb1                     2.0G   35M  1.9G   2% /home/newdisk
    [root@localhost ~]# df -lh
  • 查询指定目录的磁盘占用情况

    du -h /目录

    默认为当前目录

    -s 指定目录占用大小汇总

    -h 带计量单位

    -a 含文件

    –max-depth=1 子目录深度

    -c 列出明细的同时,增加汇总值

    应用实例:

    查询/opt目录的磁盘占用情况,深度为1

    [root@localhost ~]# du -ach --max-depth=1 /opt
    86M    /opt/gcc-4.9.2.tar.bz2
    1.5M    /opt/tmp
    4.0K    /opt/rh
    743M    /opt/gcc-4.9.2
    830M    /opt
    830M    总用量
  • 实用指令查询

    统计/home文件夹下文件的个数

    [root@localhost ~]# ls -l /home | grep "^-" | wc -l
    3

    统计/home文件夹下目录的个数

    [root@localhost ~]# ll /home | grep "^d" | wc -l
    8

    统计/home文件夹下文件的个数,包括子文件里的

    [root@localhost ~]# ls -lR /home | grep "^-" | wc -l
    5

    统计/home文件夹下目录的个数,包括子文件夹里的

    [root@localhost ~]# ls -lR /home | grep "^d" | wc -l
    17

    以树形显示目录结构(可能需要安装)

    [root@localhost ~]# yum install tree
9.网络配置
  • 自动获取

    网络连接—>自动连接—>应用,此方式获取的IP地址可能会变化,所以不适合做服务器

  • 指定特定的IP

    说明:直接修改配置文件来指定ip,并可以连接到外网,编辑 vi /etc/sysconfig/network-scripts/ifcfg-eth0

    配置IP地址为静态的,IP地址为192.168.145.133

    没有则新增

    ...
    ONBOOT=yes
    BOOTPROTO=static//设置静态ip
    
    IPADDR=192.168.145.133 //IP地址
    GATEWAY=192.168.145.2 //网关,虚拟网卡的地址
    DNS1=192.168.145.2 //dns地址和网关相同就行
    ...

    保存退出重启服务(或系统)

    [root@localhost ~]# service network restart

    若为拷贝的系统,可能会出现错误,这是因为网卡地址不同

    [root@localhost ~]# service network restart
    关闭环回接口:                                             [确定]
    弹出环回接口:                                             [确定]
    弹出界面 eth0: 错误:没有找到合适的设备:没有找到可用于连接 'System eth0' 的设备。

    解决方法:

    首先查看现在使用的网卡信息(就是eth?),例如我的就是eth3

    [root@localhost ~]# ifconfig
    eth3      Link encap:Ethernet  HWaddr 00:0C:29:4C:5C:7B  
              inet addr:192.168.145.133  Bcast:192.168.145.255  Mask:255.255.255.0
              inet6 addr: fe80::20c:29ff:fe4c:5c7b/64 Scope:Link
    ...

    接着,修改MAC地址

    [root@localhost ~]# vi /etc/udev/rules.d/70-persistent-net.rules
    # PCI device 0x1022:0x2000 (vmxnet)
    SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:0c:29:4c:5c:7b", ATTR{type}=="1", KERNEL=="eth*", NAME="eth3"

    将eth3直接改为eth0,并且复制00:0c:29:4c:5c:7b网卡地址

    然后配置静态IP

    [root@localhost ~]# vim /etc/sysconfig/network-scripts/ifcfg-eth0
    ...
    HWADDR=00:0c:29:4c:5c:7b  //改为刚才复制的网卡地址
    ...

    退出保存,重启服务(或系统)即可。

    [root@localhost ~]# service network restart
10.进程管理
进程简介

linux中,每个进程分配一个ID号

每个进程有两种存在方式,前台与后台,所谓前台就是用户目前的屏幕上可以进行操作的。后台则是在屏幕上无法看到,通常使用后台方式执行

系统服务一般在后台运行,直到关机结束。

  • 显示系统执行的进程

    ps 命令用来查看目前系统中,有哪些正在执行,以及他们的执行情况

    ps -aux

    ps -a 显示当前终端的所有进程信息

    ps -u 以用户的格式显示进程信息

    ps -x显示后台进程运行的参数

    [root@localhost ~]# ps -aux | more
    USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
    root         1  0.0  0.0   2900  1424 ?        Ss   19:27   0:01 /sbin/init
    root         2  0.0  0.0      0     0 ?        S    19:27   0:00 [kthreadd]
    root         3  0.0  0.0      0     0 ?        S    19:27   0:00 [migration/0]

    分别为:用户-进程id-占用内存-占用虚拟内存- 使用物理内存 -使用终端 -运行状态(s:休眠,r:运行) - 启动时间 -占用cpu总时间 -进程执行时的命令行

    和管道符一起使用,进行过滤

    [root@localhost ~]# ps -aux | grep sshd
    Warning: bad syntax, perhaps a bogus '-'? See /usr/share/doc/procps-3.2.8/FAQ
    root      2006  0.0  0.0   9836  1012 ?        Ss   19:27   0:00 /usr/sbin/sshd
    root      3881  0.0  0.2  12780  3428 ?        Ss   19:52   0:00 sshd: root@pts/1 
    root      4094  0.0  0.0   5984   732 pts/1    S+   20:18   0:00 grep sshd

    查看父进程

    [root@localhost ~]# ps -ef 
    UID        PID  PPID  C STIME TTY          TIME CMD
    root         1     0  0 19:27 ?        00:00:01 /sbin/init 
    root         2     0  0 19:27 ?        00:00:00 [kthreadd]
    root         3     2  0 19:27 ?        00:00:00 [migration/0]

    PPID为PID的父进程

    比如:查看sshd的父进程

    [root@localhost ~]# ps -ef | grep sshd
    root      2006     1  0 19:27 ?        00:00:00 /usr/sbin/sshd
终止进程

kill [选项] 进程号 //通过进程号杀死进程

killall 进程名称 //通过进程名杀死进程 ,支持通配符

常用选项

-9 :表示强迫进程立即停止

实践:

①剔除非法用户登录

查看当前远程登录的用户

[root@localhost home]# ps -aux | grep sshd 
Warning: bad syntax, perhaps a bogus '-'? See /usr/share/doc/procps-3.2.8/FAQ
root      2006  0.0  0.0   9836  1012 ?        Ss   19:27   0:00 /usr/sbin/sshd
root      3881  0.0  0.2  12780  3428 ?        Ss   19:52   0:00 sshd: root@pts/1 
root      4213  0.1  0.2  11888  3316 ?        Ss   20:31   0:00 sshd: zzy [priv] 
...
[root@localhost home]# kill 4217
You have new mail in /var/spool/mail/root

②终止远程登录服务sshd,在适当的时候再启用

[root@localhost home]# ps -aux | grep sshd 
Warning: bad syntax, perhaps a bogus '-'? See /usr/share/doc/procps-3.2.8/FAQ
root      2006  0.0  0.0   9836  1012 ?        Ss   19:27   0:00 /usr/sbin/sshd
[root@localhost home]# kill 2006

启动sshd服务

[root@localhost home]# /etc/init.d/sshd start

③终止多个gedit编辑器,killall (通过进程名来 终止进程)

[root@localhost home]# killall gedit

④强制杀掉一个终端(/bin/bash 代表一个终端)

[root@localhost 桌面]# ps -aux |grep bash
Warning: bad syntax, perhaps a bogus '-'? See /usr/share/doc/procps-3.2.8/FAQ
root      3886  0.0  0.1   6876  1684 pts/1    Ss+  19:52   0:00 -bash
root      7959  0.0  0.1   6876  1648 pts/0    Ss   20:44   0:00 /bin/bash
root      7971  0.0  0.1   6876  1696 pts/2    Ss+  20:44   0:00 /bin/bash
...
[root@localhost 桌面]# kill -9 7959
  • pstree 查看进程树

    pstree [选项]

    pstree -p :显示进程的PID

    pstree -u :显示进程的所属用户

    [root@localhost home]# pstree -u
服务管理

基本介绍:service的本质就是进程,但是运行在后台,通常都会监听某个端口,等待其他程序的请求,像 mysql,sshd,防火墙等,又称为守护进程。

service 管理指令:

service 服务名 start | stop | restart | reload | status

在redhat7.0后,不再使用service,而是systemctl

使用案例:

查看当前防火墙的状况,关闭和重启防火墙

[root@localhost home]# service iptables status
表格:filter
...          
4    ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           state NEW tcp dpt:22 

关闭防火墙:

[root@localhost home]# service iptables stop
iptables:将链设置为政策 ACCEPT:filter                    [确定]
iptables:清除防火墙规则:                                 [确定]
iptables:正在卸载模块:                                   [确定]

windows dos下 的telnet ip地址 端口号 来查看端口是否打开

telnet 192.168.145.133 22

注意:service 命令使用后立即生效,但只是临时生效,当重启系统后,回归到以前的服务设置

使用chkconfig才能设置某个服务自启动或关闭永久生效。

查看服务名:

setup 查看

/etc/init.d/服务名称

  • 服务的运行级别

    vi /etc/inittab

    0—6

  • chkconfig命令(重启后生效)

    通过chkconfig命令可以给每个服务的各个运行级别设置自启动/关闭

    基本语法:

    chkconfig -list|grep xxx 查看服务

    [root@localhost home]# chkconfig --list | grep sshd
    sshd               0:关闭    1:关闭    2:启用    3:启用    4:启用    5:启用    6:关闭

    chkconfig 服务名 –list

    [root@localhost home]# chkconfig iptables --list
    iptables           0:关闭    1:关闭    2:启用    3:启用    4:启用    5:启用    6:关闭

    chkconfig –level 5 服务名 on/off

    将sshd服务再运行级别为5情况下,不自启动

    [root@localhost home]# chkconfig --level 5 sshd off
动态监控
  • 查看系统的网络情况 netstat

    基本语法:

    netstat [选项]

    -an :按照一定的顺序排列输出

    -p:显示那个进程在调用

    netstat -anp

    案例:

    查看系统所有的网络服务

    [root@localhost home]# netstat -anp | more
    Active Internet connections (servers and established)
    Proto Recv-Q Send-Q Local Address               Foreign Address             State       PID/Program name   
    tcp        0      0 0.0.0.0:43904               0.0.0.0:*                   LISTEN      1783/rpc.statd   

    查看服务名为sshd的服务信息

    [root@localhost home]# netstat -anp | grep sshd
    tcp        0      0 0.0.0.0:22                  0.0.0.0:*                   LISTEN      2006/sshd           
    tcp        0      0 127.0.0.1:6011              0.0.0.0:*                   LISTEN      3881/sshd           
    tcp        0     64 192.168.145.133:22          192.168.145.1:52686         ESTABLISHED 3881/sshd           
    tcp        0      0 :::22                       :::*                        LISTEN      2006/sshd           
    tcp        0      0 ::1:6011                    :::*                        LISTEN      3881/sshd    
  • top命令

    top与ps命令类似,都用来显示正在执行的进程。不同之处,top在执行一段时间可以更新正在运行的进程

    基本语法:

    top [选项]

    -d 秒数 指定top命令隔几秒更新,默认3秒

    -i 使top不显示任何闲置或者僵死进程

    -p 通过指定监控进程id来仅仅监控某个进程的状态

    交互操作说明

    P 以cpu使用率排序,默认

    M 以内存的使用率排序

    N 以PID排序

    q 退出top

    案例:

    [root@localhost home]# top
    top - 21:41:35 up  2:14,  3 users,  load average: 0.04, 0.02, 0.00
    Tasks: 181 total,   1 running, 180 sleeping,   0 stopped,   0 zombie
    Cpu(s):  0.0%us,  0.0%sy,  0.0%ni,100.0%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
    Mem:   1562944k total,   693188k used,   869756k free,    42252k buffers
    Swap:  2064376k total,        0k used,  2064376k free,   423176k cached 

    top - 21:41:35(当前时间) up 2:14(系统运行时间), 3 users(当前系统用户数量), load average: 0.04, 0.02, 0.00(负载均衡 三个树的和<0.7 运行正常)

    按q退出

    ①监视特定的用户

    输入 top 回车,输入 u 回车,再输入用户名 ,即可。

    ②终止指定的进程

    输入 top 回车,输入 k回车,再输入要结束的进程id号 ,即可。

    ③指定系统状态更新时间(每隔10s 自动更新,默认3s)

    [root@localhost home]# top -d 5
11.RPM包管理
  • RPM 介绍

    红帽包管理器(linux系统通用),类似于Windows 的setup.exe

  • rpm包的查询指令

    查询已安装的rpm列表 rpm -qa | grep xx(软件名)

    查询是否安装了firefox

    [root@localhost ~]# rpm -qa | grep firefox
    firefox-17.0.10-1.el6_4.i686

    rpm -qa 查询所安装的所有rpm软件包

    rpm -qa | more 分页显示

    rpm -qa | grep X

    rpm -q 软件包名 查询软件包是否安装

    rpm -qi 软件包名 查询软件包信息

    [root@localhost ~]# rpm -qi firefox
    Name        : firefox                      Relocations: (not relocatable)
    Version     : 17.0.10                           Vendor: Red Hat, Inc.
    Release     : 1.el6_4                       Build Date: 2013年10月23日 星期三 21时15分16秒

    rpm -qi file

    rpm -ql 软件包名 查询软件包中的文件

    [root@localhost ~]# rpm -ql firefox
    /usr/bin/firefox
    /usr/lib/firefox
    /usr/lib/firefox/LICENSE
    /usr/lib/firefox/application.ini

    rpm -qf 文件全路径名 查询文件所属的软件包

    [root@localhost ~]# rpm -qf /etc/passwd 
    setup-2.8.14-20.el6_4.1.noarch
    [root@localhost ~]# rpm -qf /root/install.log
    file /root/install.log is not owned by any package
  • 卸载rpm包

    rpm -e rpm包的名称

    例:

    删除firefox 软件包

    [root@localhost ~]# rpm -e firefox

    强制删除

    [root@localhost ~]# rpm -e --nodeps foo
  • 安装rpm包

    rpm -ivh rpm包的全路径

    i install 安装

    v verbose 提示

    h hash 进度条

    安装firefox

    找到firefox的安装包。先挂载到Linux系统iso文件,然后到/media/下去找rpm.

    记住要连接镜像文件,然后redhat6桌面会多一个光驱。

    切换到Packages目录,可查看到Centos系统的所有rpm包,找到firefox,复制到/opt/目录

    [root@localhost Packages]# cd /media
    [root@localhost Packages]# cd CentOS_6.5_Final/
    [root@localhost Packages]# cd Packages/
    [root@localhost Packages]# cp firefox-17.0.10-1.el6.centos.i686.rpm /opt/
    [root@localhost Packages]# cd /opt/
    [root@localhost opt]# ls
    firefox-17.0.10-1.el6.centos.i686.rpm  gcc-4.9.2  gcc-4.9.2.tar.bz2  rh  tmp
    [root@localhost opt]# rpm -ivh firefox-17.0.10-1.el6.centos.i686.rpm 
    Preparing...                ########################################### [100%]
12.yum
  • 介绍

    yum是一个shell前端软件包管理器。基于RPM包管理,能够从指定的服务器自动下载RPM包并且进行安装,可以自动处理依赖性关系,并且一次安装所有依赖的软件包。使用yum的前提是要联网

  • 基本指令

    查询yum服务器是否有需要安装的软件

    yum list | grep xx 软件列表

    安装指定的yum包

    yum install xxx 下载安装

    使用yum安装firefox

    先查看yum服务器是否有firefox的rpm包

    [root@localhost ~]# yum list | grep firefox
    firefox.i686                                17.0.10-1.el6.centos        installed
    firefox.i686                                68.2.0-4.el6.centos         updates 

    安装(安装前先卸载)默认安装最新版本

    [root@localhost ~]# rpm -e firefox
    [root@localhost ~]# yum install firefox
    已加载插件:fastestmirror
    设置安装进程
    Loading mirror speeds from cached hostfile
     * rpmforge: ftp.riken.jp
    解决依赖关系
    ...
    作为依赖被升级:
      nspr.i686 0:4.21.0-1.el6_10                     nss.i686 0:3.44.0-7.el6_10               nss-softokn.i686 0:3.44.0-5.el6_10      
      nss-softokn-freebl.i686 0:3.44.0-5.el6_10       nss-sysinit.i686 0:3.44.0-7.el6_10       nss-tools.i686 0:3.44.0-7.el6_10        
      nss-util.i686 0:3.44.0-1.el6_10                
    
    完毕!
  • 5

  • 55

  • 55

  • 55

  • 5

  • 55

  • 5

  • 55

  • 5

  • 5

  • 55


   转载规则


《Linux基础教程》 White Spider 采用 知识共享署名 4.0 国际许可协议 进行许可。
  目录