Linux的基础知识及命令

一、Linux简介

操作系统概述

  • 是现代计算机系统中 最基本和最重要 的系统软件
  • 是配置在计算机硬件上的第一层软件,是对硬件系统的首次扩展
  • 主要作用是管理好硬件设备,并为用户和应用程序提供一个简单的接口,以便于使用
  • 而其他的诸如编译程序、数据库管理系统,以及大量的应用软件,都直接依赖于操作系统的支持

Linux简介

Unix

  • 1965年, 贝尔实验室联合麻省理工大学和通用电气, 计划建立一套多使用者(multi-user), 多任务(multi-processor), 多层次(multi-level)的MULTICS操作系统, 以便让大型主机支持更多终端
  • 1969年 贝尔实验室从项目退出, 成员Ken Thompson为了玩"星际旅行", 利用一个月时间使用汇编语言写出Unix原型
  • 1970年 Thompson以BCPL语言为基础编写出B语言, 并用B语言写出了第一个Unix系统
  • 1971年 Dennis M.Ritchie加入Thompson的队伍, 并改造B语言
  • 1972年 Dennis M.Ritche基于B语言写出C语言
  • 1973年 两人使用C语言重写Unix系统

Minix

  • 因AT&T(通用电气)的政策改变, 导致大学无法使用Unix源代码. 于是Andrew S. Tanenbaum(塔能鲍姆)为了能在课堂上演示系统操作的细节, 自行开发与Unix兼容的系统.
  • 取名小型Unix, 即Minix

Linux

  • 1991年, 林纳斯(Linus)读大学时常使用Minix, 并自己编写磁盘驱动程序与文件系统, 这些也成为Linux内核雏形
  • 后来他使用GNU的bash当做开发环境, gcc做编译工具, 编写Linux内核
  • 开始的Linux与Unix不兼容

Linux版本

Linux内核版本

  • 内核(kernal) 是系统的心脏, 它是运行程序/管理磁盘/管理打印机等硬件的核心程序, 提供了一个在裸设备与应用程序间的抽象层
  • 稳定版: 具有工业级强度,可以广泛地应用和部署。新的稳定版相对于较旧的只是修正一些 bug 或加入一些新的驱动程序
  • 开发版: 由于要试验各种解决方案,所以变化很快
  • 内核是操作系统最基本的部分。
  • 它是为众多应用程序提供对计算机硬件的安全访问的一部分软件,这种访问是有限的,并且内核决定一个程序在什么时候对某部分硬件操作多长时间。
  • 内核的分类可分为单内核和双内核以及微内核。

Linux发行版本

  • Linux 发行版(也被叫做 GNU/Linux 发行版)通常包含了包括桌面环境、办公套件、媒体播放器、数据库等应用软件
  • 这些发行版由个人,松散组织的团队,以及商业机构和志愿者组织编写。
  • 发行版为许多不同的目的而制作, 包括对不同计算机结构的支持, 对一个具体区域或语言的本地化,实时应用,和嵌入式系统,甚至许多版本故意地只加入免费软件。
  • 常见的发行版本如下:
    • Ubuntu
    • Redhat
    • Fedora
    • openSUSE
    • Linux Mint
    • Debian
    • Manjaro
    • Mageia
    • CentOS
    • Arch

二、Linux文件结构与用户

Linux的目录及其存放文件内容

  • /:
    • 根目录,一般根目录下只存放目录,在 linux 下有且只有一个根目录,所有的东西都是从这里开始
    • 当在终端里输入 /home,其实是在告诉电脑,先从 /(根目录)开始,再进入到 home 目录
  • /bin、/usr/bin:
    • 可执行二进制文件的目录,如常用的命令 ls、tar、mv、cat 等
  • /boot:
    • 放置 linux 系统启动时用到的一些文件,如 linux 的内核文件:/boot/vmlinuz,系统引导管理器:/boot/grub
  • /dev:
    • (device)存放linux系统下的设备文件, 即设备管理器,访问该目录下某个文件,相当于访问某个设备,常用的是挂载光驱mount /dev/cdrom /mnt
  • /etc:
    • 系统配置文件存放的目录,不建议在此目录下存放可执行文件,重要的配置文件有
      • /etc/inittab
      • /etc/fstab
      • /etc/init.d
      • /etc/X11
      • /etc/sysconfig
      • /etc/xinetd.d
  • /home:
    • 系统默认的用户家目录,新增用户账号时,用户的家目录都存放在此目录下(存放登录的用户)
      • 用户对于它的家目录内的东西拥有绝对权限
      • ~ 表示当前用户的家目录
      • ~edu 表示用户 edu 的家目录
  • /lib、/usr/lib、/usr/local/lib:
    • 系统使用的函数库的目录,程序在执行过程中,需要调用一些额外的参数时需要函数库的协助
  • /lost+fount:
    • 系统异常产生错误时,会将一些遗失的片段放置于此目录下
  • /mnt: /media:
    • 光盘默认挂载点,通常光盘挂载于 /mnt/cdrom 下,也不一定,可以选择任意位置进行挂载
  • /opt:
    • 给主机额外安装软件(软件安装包)所摆放的目录
  • /proc:
    • 此目录的数据都在内存中,如系统核心,外部设备,网络状态,由于数据都存放于内存中,所以不占用磁盘空间,比较重要的文件有:/proc/cpuinfo、/proc/interrupts、/proc/dma、/proc/ioports、/proc/net/* 等
  • /root:
    • 系统管理员root的家目录
  • /sbin、/usr/sbin、/usr/local/sbin:
    • (super binary)放置系统管理员使用的可执行命令,如 fdisk、shutdown、mount 等。与 /bin 不同的是,这几个目录是给系统管理员 root 使用的命令,一般用户只能"查看"而不能设置和使用
  • /tmp:
    • 一般用户或正在执行的程序临时存放文件的目录,任何人都可以访问,重要数据不可放置在此目录下(temp)
  • /srv:
    • 服务启动之后需要访问的数据目录,如 www 服务需要访问的网页数据存放在 /srv/www 内
  • /usr:
    • 应用程序存放目录 (Unix System Resource) 系统资源
      • /usr/bin:存放应用程序
      • /usr/share:存放共享数据
      • /usr/lib:存放不能直接运行的,却是许多程序运行所必需的一些函数库文件
      • /usr/local:存放软件升级包
      • /usr/share/doc:系统说明文件存放目录
      • /usr/share/man:程序说明文件存放目录
  • /var:
    • 放置系统执行过程中经常变化的文件
      • /var/log:随时更改的日志文件
      • /var/spool/mail:邮件存放的目录
      • /var/run:程序或服务启动后,其 PID 存放在该目录下

Linux用户相关操作

添加用户

# 直接添加用户
useradd user_name

# 添加用户到某个目录
useradd -d dir user_name

# 添加用户到某个组
useradd -g group_name user_name

[options]
-c:加上备注文字,备注文字保存在passwd的备注栏中。 
-d:指定用户登入时的启始目录。
-D:变更预设值。
-e:指定账号的有效期限,缺省表示永久有效。
-f:指定在密码过期后多少天即关闭该账号。
-g:指定用户所属的起始群组。
-G:指定用户所属的附加群组。
-m:自动建立用户的登入目录。
-M:不要自动建立用户的登入目录。
-n:取消建立以用户名称为名的群组。
-r:建立系统账号。
-s:指定用户登入后所使用的shell。
-u:指定用户ID号。

查询用户信息

# 查看信息
id user_name

# 查看登录用户
who
who -q[--count]  # 只显示用户的登录账号和登录用户的数量

# 用户与组的配置文件
/etc/passwd
/etc/group

操作用户组

# 增加组
groupadd group_name

[options]
-g:指定组ID号。
-o:允许重复的组ID号。
-f:强制创建组。

# 删除组
groupdel group_name

# 修改用户所在组
usermod -g group_name user_name

三、Linux常用命令

软件安装

  • 需要注意的是,不同发行版的安装命令是不同的,我常用ubuntu系统,因此只以ubuntu系统为例
sudo apt-get update  更新源
sudo apt-get install package 安装包
sudo apt-get remove package 删除包
sudo apt-cache search package 搜索软件包
sudo apt-cache show package  获取包的相关信息,如说明、大小、版本等
sudo apt-get install package --reinstall   重新安装包
sudo apt-get -f install   修复安装
sudo apt-get remove package --purge 删除包,包括配置文件等
sudo apt-get build-dep package 安装相关的编译环境
sudo apt-get upgrade 更新已安装的包
sudo apt-get dist-upgrade 升级系统
sudo apt-cache depends package 了解使用该包依赖那些包
sudo apt-cache rdepends package 查看该包被哪些包依赖
sudo apt-get source package  下载该包的源代码
sudo apt-get clean && sudo apt-get autoclean 清理无用的包
sudo apt-get check 检查是否有损坏的依赖

# 离线安装
sudo dpkg -i xxx.deb # 安装包
sudo dpkg -r package # 删除包,删除程序

命令的帮助

# 一下三种方式都可以查看命令的说明
man [command]
help [command]
[command] --help
  • man命令打开使用手册,可用如下操作查看手册

    操作键作用
    Space下一页
    Enter下一行
    f下一页
    b上一页
    q退出
    /word搜索word内容

文件与目录的命令

查看文件信息:ls

  • Linux文件或者目录名称最长可以有265个字符,“.”代表当前目录,“…”代表上一级目录,以“.”开头的文件为隐藏文件,需要用 -a 参数才能显示。

  • 常用参数

    参数含义
    -a显示指定目录下所有子目录与文件,包括隐藏文件
    -l以列表方式显示文件的详细信息,其中文件大小的单位是字节
    -h配合-l以人性化的方式显示文件大小,单独的-h无作用
  • 文件详情列表

    drwxr-xr-x 2 python python 4.0K 5月  16  2016 Music
    
    • 第一列:
      • 第一个字符: 文件类型 d(目录) -(普通文件) l(链接文件) b(装置文件里面的可供储存的接口设备) c(装置文件里面的串行端口设备)
      • 第2个字符到第10个字符:文件权限
        • rwxr-xr-x : 分为三组 (属主用户,属主用户的组,其他用户)
        • r: 读
        • w: 写
        • x: 执行
        • -: 无权限
    • 第二列:链接数,表示有多少个文件链接到inode号码
    • 第三列:拥有者
    • 第四列:所属群组
    • 第五列:文件大小
    • 第六列:文件最后修改时间
    • 第七列:文件名,以.开头的是隐藏文档
  • 使用通配符

    通配符含义
    *代表任意多的字符,例如ls te*
    ?代表任意一个字符,例如ls ?te
    []匹配括号内任意一个字符,例如ls [abc]
    \转义,使通配符失效

操作目录

  • 切换目录:cd

    命令含义
    cd ~回到家目录
    cd …回到上层目录
    cd -回到上次所在的目录
  • 创建目录:mkdir

    • 新建目录的名称不能与当前目录中已有的目录或文件同名
    • 目录创建者必须对当前目录具有写权限
    # 创建目录
    mkdir [dir]
    
    # 递归地创建目录
    mkdir -p [dir]
    
  • 删除目录:rmdir

    # 删除空目录
    rmdir [dir]
    
    # 递归删除
    rm -r [dir]
    
    # 跑路删除法
    rm -rf [dir]
    

操作文件

  • 创建文件:touch

    touch [file1] [file2] ...
    
  • 拷贝:cp

    参数含义
    -f强制拷贝
    -i交互式拷贝,当覆盖时需要用户确认
    -r递归拷贝目录及其内部文件
    -v可视化拷贝,显示拷贝进度
    # 可以使用cp给文件改名
    cp [file_name1] [file_name2]
    
  • 删除:rm

    参数含义
    -f强制删除
    -i交互式删除
    -r递归删除目录及其内部文件
    -v可视化删除,显示删除进度
  • 移动:mv

    • mv命令对文件夹移动时, 不需要-r的对文件夹的操作选项
    参数含义
    -f强制移动
    -i交互式移动
    -v可视化移动
  • 查看文件内容:cat

    # 基本使用
    cat [file]
    
    # 显示行号
    cat -n [file]
    
    # 分页查看
    cat -n [file] | more
    
    # 合并文件
    cat [file1] [file2] > [file3]
    
  • 分屏显示:more/less

    • 使用more命令, 可以让文件一次只显示一页
    • 使用less命令, 内容一页一页加载,适用于大文件
    more [file]
    less [file]
    
    操作键作用
    Space下一页
    Enter下一行
    f下一页
    b上一页
    q退出
    h显示帮助
  • 输出重定向:>/>>

    操作键作用
    >覆盖式重定向
    >>追加式重定向
  • 输出文件部分内容: head/tail

    # 默认输出前十行内容
    head [file]
    
    # 输出5行内容
    head -n 5 [file]
    
    # 默认输出后十行内容
    tail [file]
    
    # 输后出5行内容
    tail -n 5 [file]
    
    # 输出文件内容并实时更新
    tail -f [file]
    
  • 查看指定行的内容:sed

    sed -n '19344,19844p' [file]
    
  • 修改文件所有者:chown

    chown [user]:[group] [file]
    
  • 查看历史命令: history

    # 显示全部
    history
    
    # 显示一定数量
    history number
    
    # 执行历史指令
    !number
    

搜索查找

  • 内容搜索:grep

    # 搜索时可以使用正则表达式匹配
    grep [options] content [file]
    cat [file] | grep content
    
    操作键作用
    -v取反
    -n显示行号
    -i忽略大小写
  • 查找文件:find

    # 按文件名查找
    find ./ -name [file]
    
    # 按文件大小查找
    find ./ -size +2M
    find ./ -size +4k -size -2M
    
    # 按权限查找
    find ./ -perm 777
    

修改文件权限

  • 字母法:

    chmod [u/g/o/a] [+/-/=] [rwx] [file]
    
    # u user 表示该文件的所有者
    # g group 表示与该文件的所有者属于同一组( group )者,即用户组
    # o other 表示其他以外的人
    # a all 表示这三者皆是
    
    # + 增加权限
    # - 撤销权限
    # = 设定权限
    
    # r read 表示可读取,对于一个目录,如果没有r权限,那么就意味着不能通过ls查看这个目录的内容。
    # w write 表示可写入,对于一个目录,如果没有w权限,那么就意味着不能在目录下创建新的文件。
    # x excute 表示可执行,对于一个目录,如果没有x权限,那么就意味着不能通过cd进入这个目录。
    
  • 数字法:

    chmod u=7,g=5,o=4 [file]
    chmod 754 [file]
    chmod 754 [dir] -R  # 递归地添加权限
    

打包与压缩:

  • 打包:tar

    # 参数可以不带-
    tar [options] file.tar [file]
    tar cvf 20210304.tar test/
    
    # -c 生成档案文件,创建打包文件
    # -v 列出归档解档的详细过程,显示进度
    # -f 指定档案文件名称,f后面一定是.tar文件,所以必须放选项最后
    # -t 列出档案中包含的文件
    # -x 解开档案文件
    
  • 压缩:

    # 打包并压缩
    tar -czvf file.tar.gz [file]
    
    # 打包压缩时排除部分文件
    tar -czvf file.tar.gz --exclude=file1 --exclude=file2 [file]
    
    # 解压并解包到指定路径
    tar -xzvf file.tar.gz -C [dir]
    

关机与重启

命令含义
reboot重启
shutdown -r now重启并给其他用户提示
shutdown -h now立即关机
shutdown -h 20:00定时关机
shutdown -h +1010分钟后关机

查看服务

  • 查看进程:ps
    ps命令详解

    ps -aux
    # USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
    
    ps -ef
    # UID        PID  PPID  C STIME TTY          TIME CMD
    
    ps -lA
    # F S   UID   PID  PPID  C PRI  NI ADDR SZ WCHAN  TTY          TIME CMD
    
    ps axjf
    #  PPID   PID  PGID   SID TTY      TPGID STAT   UID   TIME COMMAND
    
    # 需要说明的字段
    F 代表这个程序的旗标 (flag), 4 代表使用者为 superuser
    C CPU 使用的资源百分比
    PRI指进程的执行优先权(Priority的简写),其值越小越早被执行
    NI 这个进程的nice值,其表示进程可被执行的优先级的修正数值
    SZ 使用掉的内存大小
    WCHAN 目前这个程序是否正在运作当中,若为 - 表示正在运作
    VSZ: 占用的虚拟记忆体大小
    RSS: 占用的记忆体大小
    TTY: 终端的次要装置号码 (minor device number of tty)
    STAT(S): 该行程的状态:
        D: 无法中断的休眠状态 (通常 IO 的进程)
        R: 正在执行中
        S: 静止状态
        T: 暂停执行
        Z: 不存在但暂时无法消除
        W: 没有足够的记忆体分页可分配
        <: 高优先序的行程
        N: 低优先序的行程
        L: 有记忆体分页分配并锁在记忆体内 (实时系统或捱A I/O)
    
  • 查看网络状态:netstat
    netstat命令详解

    # 常见参数说明
    -a (all)显示所有选项,默认不显示LISTEN相关
    -t (tcp)仅显示tcp相关选项
    -u (udp)仅显示udp相关选项
    -n 拒绝显示别名,能显示数字的全部转化成数字
    -l 仅列出有在 Listen (监听) 的服務状态
    -p 显示建立相关链接的程序名
    -r 显示路由信息,路由表
    -e 显示扩展信息,例如uid等
    -s 按各个协议进行统计
    -c 每隔一个固定时间,执行该netstat命令
    
    # 列出所有端口
    netstat -a | more
    # 列出所有 tcp 端口
    netstat -at
    # 列出所有 udp 端口
    netstat -au
    
    # 只显示监听端口
    netstat -l
    # 只显示监听tcp端口
    netstat -lt
    # 只显示监听udp端口
    netstat -lu
    
    # 输出中显示 PID 和进程名称
    netstat -p
    # 输出中不显示别名
    netstat -n
    # 输出核心路由
    netstat -r
    
    # 查看端口是否被占用
    netstat -an | grep 3306
    # 查看端口对应的进程, 核心是列出的网络里有端口号及其进程号
    sudo netstat -nlp | grep 3306
    # 查看所有监听的端口
    netstat -nlp |grep LISTEN
    
  • 终止进程:kill

    # 根据对口找进程
    sudo lsof -i:port
    # 只返回进程号
    sudo lsof -t -i:port
    
    # 终止进程
    kill [pid]
    # 暴力终止
    kill -9 [pid]
    # 终止指定用户的进程
    kill -9 $(ps -ef | grep hnlinux)  # 方法一 过滤出hnlinux用户进程 
    kill -u hnlinux  # 方法二
    
    # 查看信号
    kill -l
    

使用ssh与scp

  • 基本使用
    ssh -p$port $user@$host
    scp $user@$host:/Desktop/source.txt ./
    scp source.txt $user@$host:/Desktop
    
  • 服务器之间传输文件
    # 通过ssh生成秘钥
    ssh-keygen -t rsa -C "email-address"
    
    # 在我的使用中发现一般从远程机器拷贝文件到本机能够成功,这里需要将本机的公钥复制到远程主机的authorized_keys中
    /home/ubuntu/.ssh/authorized_keys
    
    # 如果本机有多个秘钥,可以使用指定秘钥进行传输
    scp -i  ~/.ssh/scp -r $user@$host:/home/ubuntu/* /home/ubuntu/target
    

四、使用vim

基本介绍

  • vim没有格式/段落/字体等, 只是一个文本编辑器, 有着繁多的命令
  • vim有三种基本的工作模式:
    • 命令模式
    • 文本输入模式
    • 末行模式

命令行模式

  • 进入vi编辑器时的模式, 可以执行各种命令
  • 其中输入的字符是不会显示的, 一旦输错,或命令不合法, vi就会报警

文本输入模式

  • 在命令模式下输入插入命令i、附加命令a 、打开命令o、修改命令c、取代命令r或替换命令s都可以进入文本输入模式
  • 文本输入模式下, 输入的所有字符会当成文件保存起来

末行模式

  • 也称为ex转义模式, 可以在命令行模式下按":" 进入该模式
  • 多数文件管理命令都是在这个模式下去执行的

基本操作

命令模式

  • 移动光标

    n+方向: 移动n个单位
    M: 光标移动到中间行
    L: 光标移动到屏幕最后一行行首
    nG: 移动到指定行,n是数字,配合:set nu
    Ctr-d: 向下翻半屏
    Ctr-u: 向上翻半屏
    Ctr-f: 向下翻一屏
    Ctr-b: 向上翻一屏
    gg: 光标移动文件开头
    G: 光标移动到文件末尾
    0 或功能键[Home]: 移动到这一行的最前面字符处
    $ 或功能键[End]: 移动到这一行的最后面字符处
    
  • 删除与复制

    # 删除
    x: 删除光标后一个字符,相当于 Del
    X: 删除光标前一个字符,相当于 Backspace
    dd: 删除光标所在行,n dd 删除指定的行数
    D: 删除光标后本行所有内容,包含光标所在字符
    d0: 删除光标前本行所有内容,不包含光标所在字符
    dw: 删除光标开始位置的字,包含光标所在字符
    
    # 复制
    yy: 复制当前行,n yy 复制 n 行
    p: 在光标所在位置向下新开辟一行,粘贴
    
  • 撤销与重复

    u: 一步一步撤销(undo)
    Ctrl-r: 反撤销(reverse)
    .: 重复上一次操作的命令
    
  • 设置行号:

    set nu: 打开行号
    set nonu: 关闭行号
    

输入模式

```bash
i: 插入光标前一个字符
I: 插入行首
a: 插入光标后一个字符
A: 插入行未
o: 在下一行处输入新的一行
O: 在上一行处输入新的一行
```

末行模式

  • 搜索与替换

    /word: 向光标之下寻找一个名称为 word 的字符串
    ?word: 向光标之上寻找一个名称为 word 的字符串
    # 搜索出结果后
    n: 代表重复前一个搜寻的动作
    N: 与 n 刚好相反,为反向进行前一个搜寻动作
    
    # 替换
    :n1,n2s/word1/word2/g  # 在第 n1 与 n2 行之间寻找 word1 这个字符串,并将该字符串取代为 word2
    :%s/word1/word2/g  # 从第一行到最后一行寻找 word1 字符串,并将该字符串取代为 word2
    :%s/word1/word2/gc  # 取代前需要用户confirm
    
  • 退出与保存

    w: 将编辑的数据写入硬盘档案中
    q: 离开 vim
    q!:	强制离开不储存档案
    wq:	储存后离开,若为wq!则为强制储存后离开
    

五、Linux的磁盘管理

查看磁盘的挂载情况

```bash
# 查看系统分区与挂载
lsblk -f

# 查看系统的磁盘数据
sudo fdisk -l

# 查看磁盘的使用情况
df -h
```

挂载新的磁盘

```bash
# 查看系统的磁盘数据
sudo fdisk -l

# 创建目录作为挂载点
mkdir /home/new_disk

# 挂载硬盘
mount /dev/xxx /home/new_disk

设置可自动挂载
vim /etc/fstab
# 然后修改文件内容
echo "/dev/xvdb /home/data ext4 defaults 0 0" >> /etc/fstab
# 最后执行
mount -a
```

查看磁盘使用情况

```bash
# 基本使用
du [options] [dir]

# options
-s 指定目录占用大小汇总
-h 带计量单位
-a 含文件
--max-depth 子目录深度
-c 汇总

# 常用命令
du -ach --max-depth=1 /opt  # 汇总深度为1的opt下所有文件大小
sudo du -csh *  # 汇总当前路径下所有文件大小

# 一些统计的组合命令
ls -l /dir | grep "^-" | wc -l  # 统计文件数目
ls -l /dir | grep "^d" | wc -l  # 统计目录数目
ls -lR /dir | grep "^-" | wc -l  # 递归统计文件数目
ls -lR /dir | grep "^d" | wc -l  # 递归统计目录数目
```
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值