Professional Documents
Culture Documents
Linux基础update
Linux基础update
Linux 基础
开源软件&共享精神
简单来说,开源软件的特点就是把软件程序与源代码⽂件⼀起打包提供给⽤⼾,让⽤⼾ 在不受限制地使⽤某个软件
功能的基础上还可以按需进⾏修改,或编制成衍⽣产品再发布出 去。⽤⼾具有使⽤⾃由、修改⾃由、重新发布⾃由
以及创建衍⽣品的⾃由。这也正好符合了⿊ 客和极客对⾃由的追求,因此国内外开源社区的根基都很庞⼤,⼈⽓也
相当⾼。 坦⽩来讲,每位投⾝于 Linux ⾏业的技术⼈或者程序员只要听到开源项⽬就会由衷地感到⾃豪,这是⼀
种从⻣⼦⾥带有的独特情怀。开源的企业不单纯是为了利益,而是互相扶持, 努⼒服务好更多的⽤⼾。开源软件最
重要的特性有下⾯这些。
:
Linux Linux is not Unix
(/ˈlɪnəks/ lin-əks)是由 Linus Torvalds 开发的⼀款类 Unix 操作系统内核。
Linux
操作系统的故事
上世纪六⼗年代,为了研发⼀个多⽤⼾,多⽤途的操作系统 AT&T 、G.E 、MIT联⼿打造MULTICS
过于庞⼤,对前途产⽣了迷茫 Bell实验室退出开发团队
Ken Thompson正在开发⼀款游戏,⽤汇编编写了Unics
Dennis Ritchie为了解决平台问题开发出C语⾔,重构Unix
Unix
由AT&T Bell实验室开发,当时式计算机界的主流操作系统。
操作系统⽼⼤哥
20 世纪 60 年代,UNIX系统是开源而且免费的,供⼤学教学使⽤
但是在 1979 年时,AT&T 公司宣布了对 UNIX 系统的商业化计划
衍⽣出两⼤派别:BSD的 Unix 和AT&T 的Unix
类Unix
各种版本的 UNIX 系统,⽬前常⻅的有 Sun Solaris、FreeBSD、IBM AIX、HP-UX OS X基于FreBSD Berkeley
Software Distribution,伯克利软件发布版
系统
Linux 系统包括 Linux Kernel, GNU Software, X Window System, Package Manager 等。
Linux Kernel
Linux 系统内核指的是⼀个由 Linus Torvalds 负责维护,提供硬件抽象层、硬盘及⽂件 系统控制及多任务功能的系
统核⼼程序。
Linux 发⾏套件系统是我们常说的 Linux 操作系统,也即是由 Linux 内核与各种常⽤软件的集合产品。
GNU/Linux 命名争议
GNU 开发者们主张以 GNU/Linux 来称呼各种 Linux 操作系统。 Linus Torvalds 认为 GNU/Linux 这个称呼
是合理的,但⽤ GNU/Linux 来称呼所有的 Linux 发⾏版 (Debian, Red Hat Linux, SuSE Linux 等) 是不合理
的。
Linux Kernel 是操作系统的核⼼,功能包括
进程管理 (fork, exec)
内存管理 (malloc, free)
⽂件系统 (ext4, btrfs, xfs, vfat)
服务管理 (systemctl)
⽹络协议 (tcp/ip stack)
硬件驱动 (linux 是⽀持硬件驱动最多的操作系统)
GNU Software
coreutils (chmod, ls, cp, mv, mkdir) 所有⽤⼾都会⽤到且离不开的命令集
grub
Hurd
binutils (as, ld, objdump)
gcc, glibc, gdb
autoconf, automake
gtk+
gnome
bash
emacs
RPM/YUM 系
业界⽼⼤)
Red Hat Enterprise Linux (RHEL
Fedora (社区维护,⽤于测试新特性)
CentOS (社区维护,主打稳定、免费,已被红帽收编)
PACMAN 系
Arch Linux ( 滚动更新, Wiki 完善,软件多到哭)
Manjaro ( 不滚了、稳定、美观、有桌⾯)
其它
Slackware最早的发⾏版
SUSE 商业发⾏版,zapper 包管理
gentoo 所有软件需⾃⾏编译
openSUSE 源⾃德国的⼀款著名的 Linux 系统,在全球范围内 有着不错的声誉及市场占有率。
oreos 容器化发⾏版,只能安装 Docker 容器
Apline 主打轻量和安全的发⾏版,使⽤ apk 包管理
X Window System
的计算处理 返回Request给server
Events
X Protocol
提供client 和server间的通信
流程
(1)⽤⼾通过⿏标键盘对X server下达操作命令 (2)X server利⽤Event传递⽤⼾操作信息给X client (3)X
client进⾏程序运算 (4)X client利⽤Request传回所要显⽰的结果 (5)X server将结果显⽰在屏幕上
X SESSION MANAGER
⼀个 session 表⽰⼀系列窗口程序的状态,SM ⽤于保存和恢复这些程序的状态。
DISPLAY MANAGER
WINDOW MANAGER
WM ⽤于处理窗口的焦点、位置、移动、缩放和样式。 ⾼玩可以不⽤DE,只⽤WM。
DESKTOP ENVIRONMENT
Linux 的应⽤
1. 服务器领域
4. 桌⾯领域
简直少得可怜,主要原因还是软件⽣态不够强⼤,学习⻔槛⾼等。
现代 Linux 上
/dev/console控制台终端,与显⽰器连接
/dev/tty*虚拟控制台终端设备,与 /dev/console 相关联,通过 ctrl+alt+fn 来切换,tty0 表⽰当前激活的
tty,tty0 和 console 是同⼀个概念
/dev/pty 伪终端 (xterm, gnome-terminal)
/dev/ptmx 伪终端的 master 部分
/dev/pts/* 伪终端的 slave 部分(每打开⼀个终端模拟器的⻚⾯就会创建⼀个 pts 设备)
shell 命令⾏解释器 (sh, bash, csh, zsh, fish)
常⽤命令
命令 作⽤
ls 列出当前⽬录内容
pwd 打印当前⽬录
cd <dir> 切换⽬录
rm [-rf] <filename> 删除⽂件
cp [-rf] <filename> 复制⽂件
mv <src> <dst> 移动⽂件
cat [file] ... 合并⽂件内容打印到标准输出
tail -n filename 查看⽂件最后 n ⾏内容
less <filename> 分⻚显⽰⽂件内容,按 n 下⼀⻚,按 b 上⼀⻚
grep <pattern> [FILE] 在给定的⽂件中搜索指定的字符串
find [path...] [expression] 查找路径中满⾜匹配条件的⽂件
tar zvxf filename.tar.gz 解压提取 .tar.gz 格式的⽂件
unzip filename.zip -d dir 解压 filename.zip 到 dir ⽬录
man command 查看帮助
ping <destination> 向远程主机发送 ICMP 数据包
who 列出当前登录的⽤⼾名
sudo command 以 root ⾝份执⾏命令
su [user] 切换⽤⼾
uname -a 查看系统内核、架构、主机信息
screenfetch 显⽰系统发⾏版信息
df -h 查看磁盘使⽤情况
ps -aux 查看进程信息
top 和 htop 命令⾏版的 “任务管理器”
shutdown -h now 关机
管道和重定向
Linux 中,每个进程启动时会打开三个⽂件描述符,分别为 stdin, stdout, stderr.
重定向的作⽤是,改变这⼏个⽂件描述符关联的⽂件,从而改变输⼊输出的位置。
管道的作⽤是,将前⼀个命令的标准输出作为后⼀个命令的标准输⼊。
重定向符号 n> 和 n>> ,前者表⽰写⼊,后者表⽰追加。n 表⽰⽂件描述符,stdin = 0, stdout = 1, stderr = 2, n
默认为 1.
# 向 hello.txt 中写⼊ hello
echo "hello" > hello.txt
# 查看⽂件内容
cat hello.txt
# 向 hello.txt 中写⼊ world
echo "world" > hello.txt
# 查看⽂件内容
cat hello.txt
# 向 hello.txt 中追加 hello
echo "hello" >> hello.txt
# 查看⽂件内容
cat hello.txt
管道符号 | 。
# 查看所有已安装的名字含有 xserver 的包
sudo apt list | grep xserver | grep installed
xargs 将标准输⼊的内容作为⼀条命令的命令⾏参数。
# 删除所有 .pyc ⽂件
find . -name "*.pyc" | xargs rm -rf
# 统计 .py ⽂件的代码⾏数
find . -name "*.py" | xargs wc -l
⽬录结构
根⽬录
/
├── bin # 所有⽤⼾可执⾏的⽂件
├── boot # 引导器和内核
├── dev # 设备⽂件
├── etc # 配置⽂件
├── home # ⽤⼾主⽬录
├── libxx # 动态库 .so
├── media # 可移出设备的挂载点
├── mnt # 临时挂载点
├── opt # ⾃带依赖的软件
├── proc # 包含内核和进程信息的虚拟⽂件系统
├── root # root ⽤⼾的主⽬录
├── run # 运⾏时⽂件⽬录,如进程 pid ⽂件,套接字⽂件
├── sbin # 只有 root ⽤⼾可执⾏的⽂件
├── sys # 包含内核和系统信息的虚拟⽂件系统
├── tmp # 临时⽂件系统
├── usr # Unix System Resources 的缩写,存放软件
└── var # 存放经常变化的⽂件,如⽇志
⼀切皆⽂件(重要的Linux哲学)
/proc ⽂件系统,是⼀个虚拟⽂件系统,包含进程运⾏的所有信息。⼦⽬录全以进程 pid 命
名, /proc/<pid>/cmdline ⾥可以看到进程的命令⾏。
/sys ⽂件系统,是⼀个虚拟⽂件系统,包含内核中⾮进程信息的所有信息。
/dev ⽬录,包含所有设备⽂件。
存放软件的⽬录
/bin , /sbin , libxx 系统启动所必须的命令。
/usr/bin , /usr/sbin , /usr/libxx 系统⾃带的⾮必需命令。
/usr/local/bin/ , /usr/local/sbin , /usr/local/libxx ⽤⼾安装的命令。
/opt 存放那些⾃带所有依赖,不需要安装到上⾯那些⽬录的软件,如 Pycharm IDE, JDK 等。
s socket ⽂件
d ⽬录
l 符号链接
⽂件系统
Linux 是⽀持⽂件系统最多的操作系统
⽂件系统 描述
ext4 扩展⽂件系统,具有⽇志功能
btrfs ⽀持写时复制、压缩、⼦卷的现代⽂件系统
vfat FAT ⽂件系统
exfat 微软开发的适合闪存设备的⽂件系统
FAT32 micro SD
hfs 苹果的⽂件系统
iso9660 光盘和镜像⽂件系统
tmpfs 内存⽂件系统, /dev/shm
squashfs 只读压缩⽂件系统,⽤于 initramfs
overlayfs ⽀持联合挂载的⽂件系统,⽤于 Docker 容器
Linux 中使⽤ mkfs.xxfs 来创建⽂件系统(这个概念等同于 Windows 上的格式化磁盘分区)。
创建好的⽂件系统需要 mount 挂载到⼀个⽬录下才能访问,此时访问挂载的⽬录即访问该⽂件系统的根⽬录。
Linux 开机启动的时候会读取 /etc/fstab ⽂件,该⽂件包含分区挂载的信息,⽤于启动时⾃动挂载分区。
⽤⼾管理
Linux 是⼀个多⽤⼾的操作系统,同⼀时刻可以有多个⽤⼾同时登陆。
/etc/passwd 保存账⼾和密码信息
/etc/shadow 保存加密过的⽤⼾密码
/etc/group 保存⽤⼾组信息
/etc/gshadow 保存加密过的⽤⼾组密码
创建⼀个⽤⼾并登录
# 添加⽤⼾组 test
sudo groupadd test
# 添加⽤⼾ test,创建主⽬录 /home/test
sudo useradd -m -d /home/test test -g test
# 修改⽤⼾默认 shell 为 bash
sudo usermod -s /bin/bash test
# 为⽤⼾设置密码
sudo passwd test
# 按 ctrl+alt+f2 切换 tty,登录⽤⼾
# 登录后查看当前⽬录
pwd
ls -al
# 启动桌⾯环境,按 ctrl+alt+fx 在两个桌⾯环境间切换
startx
删除刚刚创建的⽤⼾
# 先注销刚刚登录的⽤⼾
# 删除⽤⼾和其主⽬录,和同名的⽤⼾组
sudo userdel -r test
⽂件系统权限
执⾏ ls -al 命令时,第 1, 3, 4 列显⽰了⽂件的权限信息,⽰例如下。
-rw-r--r-- 1 zyh zyh ⽉
4867 6 19 13:34 .bashrc
第三列 zyh 表⽰这个⽂件的所有者 (owner) 是 zyh。 第四列 zyh 表⽰这个⽂件所属的⽤⼾组 (group) 是 zyh。
第⼀列 -rw-r--r-- 共有10个字符
第⼀个字符表⽰⽂件类型,其值可为 d ⽬录, - 普通⽂件, l 链接⽂件, b 块设备⽂件, c 字符设备
⽂件
后9个字符,每三个⼀组,每组分别表⽰,所有者权限,⽤⼾组权限,其它⽤⼾权限,⼀组的三个字符为 r
可读权限, w 可写权限, x 可执⾏权限。
权限还可以使⽤⼋进制编码来表⽰
类型 读 写 执⾏
- r w x
0 4 2 1
0644 -rw-r--r--
0755 -rwxr-xr-x
0666 -rw-rw-rw-
服务管理
服务 (service) 是⼀个(在后台)⻓期运⾏的程序。例如 Web 服务,数据库服务,shadowsocks 等。
以 ssh 为例
systemctl status [service] # 查看服务状态
systemctl start <service> # 启动服务
systemctl stop <service> # 停⽌服务
systemctl enable <service> # 开机启动服务
systemctl disable <service> # 开机不启动服务
信号/软中断
中断是由硬件产⽣中断信号,CPU暂停当前进程,执⾏中断处理程序的过程。中断的存在为操作系统提供了抢占式
进程调度的⽀持。
信号是在软件层⾯上对中断的⼀种模拟,所以也叫软中断。信号可视为进程间进⾏异步通信的⼀种⽅式。信号由硬
件(键盘)和软件(kill, raise 命令) 产⽣,内核将信号加⼊信号队列,在接收信号的进程执⾏时将执⾏信号处理函
数。
信号名称 值 默认动作 触发
终⽌进程 ⽤⼾退出Shell时,由该shell启动的所有
SIGHUP 1
进程都会收到这个信号。
SIGINT 2 终⽌进程 ctrl+c
终⽌进程,可以被阻塞或终⽌,以
SIGTERM 15
便在退出时回收资源 kill -s SIGTERM
使⽤ kill -l 查看所有⽀持的所有信号
➜ ~ kill -l
1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP
6) SIGABRT 7) SIGBUS 8) SIGFPE 9) SIGKILL 10) SIGUSR1
11) SIGSEGV 12) SIGUSR2 13) SIGPIPE 14) SIGALRM 15) SIGTERM
16) SIGSTKFLT 17) SIGCHLD 18) SIGCONT 19) SIGSTOP 20) SIGTSTP
21) SIGTTIN 22) SIGTTOU 23) SIGURG 24) SIGXCPU 25) SIGXFSZ
26) SIGVTALRM 27) SIGPROF 28) SIGWINCH 29) SIGIO 30) SIGPWR
31) SIGSYS 34) SIGRTMIN 35) SIGRTMIN+1 36) SIGRTMIN+2 37) SIGRTMIN+3
38) SIGRTMIN+4 39) SIGRTMIN+5 40) SIGRTMIN+6 41) SIGRTMIN+7 42) SIGRTMIN+8
43) SIGRTMIN+9 44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12 47) SIGRTMIN+13
48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14 51) SIGRTMAX-13 52) SIGRTMAX-12
53) SIGRTMAX-11 54) SIGRTMAX-10 55) SIGRTMAX-9 56) SIGRTMAX-8 57) SIGRTMAX-7
58) SIGRTMAX-6 59) SIGRTMAX-5 60) SIGRTMAX-4 61) SIGRTMAX-3 62) SIGRTMAX-2
63) SIGRTMAX-1 64) SIGRTMAX
使⽤ stty -a 查看信号快捷键
wqy@wqy-PC:~$ stty -a
speed 38400 baud; rows 34; columns 91; line = 0;
intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol = <undef>; eol2 = <undef>;
swtch = <undef>; start = ^Q; stop = ^S; susp = ^Z; rprnt = ^R; werase = ^W; lnext = ^V;
discard = ^O; min = 1; time = 0;
-parenb -parodd -cmspar cs8 -hupcl -cstopb cread -clocal -crtscts
-ignbrk -brkint -ignpar -parmrk -inpck -istrip -inlcr -igncr icrnl ixon -ixoff -iuclc -
ixany
-imaxbel iutf8
opost -olcuc -ocrnl onlcr -onocr -onlret -ofill -ofdel nl0 cr0 tab0 bs0 vt0 ff0
isig icanon iexten echo echoe echok -echonl -noflsh -xcase -tostop -echoprt echoctl
echoke
-flusho -extproc
Linux 的安装和启动
Linux 安装程序做了什么?
1. 复制根⽂件系统到⽬的分区
2. 设置语⾔、时区
3. 创建⽤⼾
4. 安装内核和 initramfs
5. 安装引导器 GRUB / syslinux
Linux 的启动过程
1. BIOS/UEFI 启动引导器
2. 引导器装载内核和 initramfs
3. 内核将 initramfs 挂载为根⽬录
4. 内核执⾏ /sbin/init 来初始化系统、设置硬件驱动
5. /sbin/init 在加载完驱动后,挂载真正的根⽬录,切换根⽂件系统
6. 执⾏根⽂件系统中的 /sbin/init
7. 移除 initramfs , 系统启动完成
有趣的命令
打印⼀条随机的有正能量的谚语。
fortune
它俩组合起来可以产⽣奇妙的化学反应。
➜ ~ fortune| cowsay
_________________________________________
/ You are deeply attached to your friends \
\ and acquaintances. /
-----------------------------------------
\ ^__^
\ (oo)\_______
(__)\ )\/\
||----w |
|| ||
作业
安装Arch Linux,包括图形界⾯
Markdown 记录安装过程 -图⽚- 命令
发送到 1786077116@qq.com