计算机的能力是由软件决定的。有一种软件设计的哲学叫 UNIX 哲学,提倡的是设计软件 要注重 KISS (keep it simple, stupid)原则 。

Gnu/LinuxUNIX 的免费实现,开启了开源时代。

Gnu/Linux

基本概念

  • 文件: 日常术语"东西",一般有静止的东西和会动的东西。

  • 进程: "会动" 的东西,工具。

  • 设备 : 特殊东西,一般指硬件。

  • 基本输入输出 : 基本输入就是 键盘, 基本输出是 显示屏 ,特指这俩东西。

登录

登录是对电脑使用的一种权限保护,就像家里的门一样,要使用电脑,首先面对的就是这个东西。

  • 登录 login

  • 登出 logout

  • 新建用户 useradd

  • 设置密码 passwd

  • 设置用户属性 usermod

机器软硬信息

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
  cat /etc/lsb-release # 查看软件( 系统 )信息
  uname -a                # 查看内核/操作系统/CPU 信息
  cat /proc/cpuinfo       # 查看 CPU 信息
  nproc #打印可用处理器的数量
  hostname                # 查看计算机名
  lspci -tv               # 列出所有 PCI 设备
  lsusb -tv               # 列出所有 USB 设备
  lsmod                   # 列出加载的内核模块
  free -m                # 查看内存使用量和交换区使用量
  df -h                  # 查看各分区使用情况
  du -sh         # 查看指定目录的大小
  uptime                 # 查看系统运行时间、用户数、负载
  cat /proc/loadavg      # 查看系统负载

进程管理和调度

  • ps 显示进程列表

  • kill 通过 PID 给进程发信号

  • kill -l 显示 信号 列表

  • pgrep 通过 进程名 查找进程

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

进程属性

UID 用户 ID
PID 进程 ID
PPID 父进程 ID
C CPU 占用率
STIME 开始时间
TTY 开始此进程的 TTY—-终端设备
TIME 此进程运行的总时间
CMD 命令名
%CPU 进程占用 CPU 百分比
%MEM 进程占用内存百分比
VSZ 虚拟内存占用大小 单位:kb(killobytes)
RSS 实际内存占用大小 单位:kb(killobytes)
STAT 进程状态
START 进程启动时刻

进程状态

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

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

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

进程间通信和同步

  • 信号 [signals,SIGxxxx]

  • pipes

  • sockets

  • file locking

  • message queues

  • semaphores

  • shared memory

内存管理

进程要用到内存,资源也要用到内存,如何处理?硬件提供了分段分页的支持。

磁盘和分区

1
2
3
4
  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
列出文件 ls
编辑文件 vim

交换分区文件系统

  • 创建 Linux 交换分区 mkswap

  • 启用交换分区: # swapon -s

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

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

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

模块

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

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

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

设备

  • 计算机使用的设备大体归于三类 : 块设备,字符设备 ,网络设备 ,还有一些目录设备,链接

  • 块设备和字符设备因为其区别,操作应该是不一样的,操作系统抽象成同样的使用方法了 open()、close()、read()、write()

  • 网络设备面向数据包的接收和发送而设计,它并不对应于文件系统的节点,内核与网络设备的通信和内核与字符设备、块设备的通行方式完全不同

字符设备

  • /dev/zero

  • /dev/random 随机数,慢,精确

  • /dev/urandom 系统随机,块,随机少

块设备

网络设备

网络管理

路由,相当于你对外联络的快递公司,有些公司不到某个地方的

  • rounte -n 查看本机路由表

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

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

  • ifconfig 查看所有网络接口的属性

  • iptables -L 查看 iptables 防火墙

系统调用

数据同步

任务

这是 shell 里的概念,因为前端一次只能操作一个程序

任务放在前、后台 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 分执行一次任务

压缩解压

unar

解压缩,中文不会乱码

帮助文档

  • man [manual] 简单文档

  • info 详细文档

pdf

合并 pdf

1
pdfunite *.pdf all.pdf

查找

查找文件

1
  find . -type f -exec ls -l {} \;

发行版

字体

安装

1
2
3
4
5
6
sudo mv Monaco.ttf /usr/share/fonts/custom
sudo chmod 744 /usr/share/fonts/custom/Monaco.ttf

sudo mkfontscale  #生成核心字体信息
sudo mkfontdir
sudo fc-cache -fv

显示已安装的字体

1
  fc-list

用户目录配置

~/.config/user-dirs.dirs