记录一下用命令操控计算机的用法

历史

在 UNIX (或 Linux) 系统下,程序基本是没啥外观的,东西要做某件事情,需要输入东西的名称和输入的数据,然后东西会把功能操作的结果以某种形式展示出来。

为什么东西如此的不直观,不想我们人类一样,要求做某件事客客气气的,回馈也很热情,或者像图形界面那样,有友好的菜单与直观的输入输出环境。我觉得是跟以前图形显示器的文字显示形式和程序员的稀少有关。 好吧,我们就学习这些简陋的东西吧,这些东西难的是写法的怪异和个别参数很多,但搞清楚功能后记忆还是不太难的。

Linux 系统

我们日常用的手机,一般买回家之后就有一个 系统 了,然后如果我们想使用手机的其它功能,可以安装 应用软件

所以,我们一般把计算机软件分为 操作系统和应用软件两部分,应用软件需要操作系统提供的功能。

简单来说,系统这个东西就是做一些管理方面的事情,统筹规划,提供服务什么的,方便 人类 友好的用好电脑这个机器。

命令

人们用机器来干什么,就要知道机器里有什么东西,能用这个东西来做什么。

  • 文件的概念,简单说,机器里的东西,也叫做文件 ,是按照目录树的结构放置起来的。有些东西像书本一样作为资料,有些东西像电饭锅一样作为工具。

  • 文件这东西占用一定的空间,我们叫它文件大小,文件还有创建时间,文件名字等几个属性。

  • 当作为工具的东西运行起来后,就变成了进程,有时我们想让工具停止运行,就要关掉东西,我们一般用发送消息的方式来关掉东西。

  • 用户登录的概念是为了多个用户使用同一个机器,或者远程操作机器而创造出来的。

  • 计算机里的东西很多都是已有东西的一个电子化抽象(比如文本编辑器对应现实中的练习本,图像编辑器对应现实中的画画本),所以没有趁手的工具时,可以上网搜

  • 很多基础的命令都是 GNU 组织提供。

    用户管理

    • 登录 login (我们用某个机器,一般用自己的账号来使用机器,这样就避免干涉到别人的隐私)

    • 登出 logout

    • 新建用户 useradd (新建一个能够使用机器的人)

    • 设置密码 passwd

    • 设置用户属性 usermod

    东西管理

    • 列出文件 ls (list)

    • 删除文件 rm(remove)

    • 编辑文件 一般用 vim 或者 emacs

    • 改变文件所有者 chown (设置东西的归属人)

    • 改变文件读写属性 chmod (设置东西的权限)

    系统信息

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    
      cat /etc/lsb-release # 查看软件( 系统 )信息
      uname -a                # 查看内核/操作系统/CPU 信息
      cat /proc/cpuinfo       # 查看 CPU 信息
      hostname                # 查看计算机名
      lspci -tv               # 列出所有 PCI 设备
      lsusb -tv               # 列出所有 USB 设备
      lsmod                   # 列出加载的内核模块
      free -m                # 查看内存使用量和交换区使用量
      uptime                 # 查看系统运行时间、用户数、负载
      cat /proc/loadavg      # 查看系统负载

    进程管理

    • ps(process) 显示进程信息

    • kill 给进程发信号

    • pgrep 通过 进程名 查找进程

    • pkill 通过 进程名 给进程发信号

    进程状态

    • R (TASK_RUNNING),可执行状态。

    • S (TASK_INTERRUPTIBLE),可中断的睡眠状态

    • D (TASK_UNINTERRUPTIBLE),不可中断的睡眠状态

    磁盘管理

    磁盘这个东西,分区以后,可以一个东西当两个或三个东西用(按照分区数量)。这样能更好的使用磁盘。分区后的磁盘要挂载下才能使用磁盘的存储功能。

    • 显示分区信息 df

    • 查看挂接的分区状态 mount | column -t

    • 查看所有分区 fdisk -l

    • 查看所有交换分区 swapon -s

    • 创建文件系统 mkfs -V -t msdos -c /dev/hda5

    • 更新分区表信息 partprobe

    • 加载分区 mount

    • 加载 smb sudo mount -t smbfs -o username=user,password='' //10.0.1.1/windowsshare /mnt 浏览 windows 共享文件夹

    • 自动加载配置文件 fstab

    • 卸载分区 umount

    交换分区

    内存缓存用的,早期内存小的产物,现在不需要了吧

    • 创建 Linux 交换分区 mkswap

    • 启用交换分区 swapon -s

    • 禁用交换分区 swapoff /dev/sda7

    • 用新 UUID 重新创建交换分区: mkswap -U random /dev/sda7

    • 激活交换分区 swapon /dev/sda7

    模块管理

    • rmmod 从运行的内核中移除指定的内核模块

    • insmod 将给定的模块加载到内核中

    • lsmod 显示已载入系统的模块

    网络管理

    网,就像我们的家门一样,有些东西,家里没有,就可以找到别的机器,问别人家借。所以入网的机器,有一个网名(IP 地址) 入网的机器,还能看到我们跟谁家在联系。

    • netstat 显示网络连接,路由表,接口状态,伪装连接,网络链路信息和组播成员组。

      • netstat -lntp 查看所有监听端口

      • netstat -antp 查看所有已建立的连接

    • route - 显示 / 操作 IP 选路表

      • rounte -n 查看本机路由表

    • ifconfig - 配置网络接口

    • iptables - IP 包过滤器管理

    • ip

      • address (机器在网中的网名)

      • addrlabel

      • link (入网的设备)

      • route (路由表,不同的机器,分配不同的出口)

    • 查公网 IP

      • curl cip.cc

      • curl icanhazip.com

      • curl ident.me

    计划任务

    给东西的行为设置一个计时器,或一个后台状态

    • 任务放在前、后台 fg bg jobs

    • 周期任务 crontab

      1
      2
      3
      4
      5
      
        * * * * *                  # 每隔一分钟执行一次任务  
        0 * * * *                  # 每小时的 0 点执行一次任务,比如 6:00,10:00  
        6,10 * 2 * *               # 每个月 2 号,每小时的 6 分和 10 分执行一次任务  
        0 * * * *                  # 每小时的 0 点执行一次任务,比如 6:00,10:00  
        6,10 * 2 * *               # 每个月 2 号,每小时的 6 分和 10 分执行一次任务

    帮助文档

    • man [manual] 命令手册

    • manpages-zh 中文命令手册

    • info 详细文档

    工具软件

    压缩解压

    unar

    解压缩,中文不会乱码

    pdf

    合并 pdf
    1
    
    pdfunite *.pdf all.pdf

    查找

    查找文件
    1
    
      find . -type f -exec ls -l {} \;

    图片处理

    压缩转换 convert

    录制视频短片 peek

    1
    2
    3
    
      sudo add-apt-repository ppa:peek-developers/stable
      sudo apt update
      sudo apt install peek

    像素识别

    1
    
      sudo snap install pick-colour-picker