1. Introduction
Linux
,全称为
GNU/Linux
,是一种免费使用和自由传播的类 UNIX
操作系统。我们常说的 Linux
,指的是 Linux
内核,一个基于 POSIX
的多用户、多任务、支持多线程和多
CPU
的操作系统。
Linux
现在已经是现代互联网体系中不可或缺的一部分了,可能你看不见它,但是它一直在你身边,各种嵌入式设备,如手表,机器人。还有广为人之的安卓。地球上大多数的服务器都是
Linux
操作系统。从航天到军事、从科研到金融、从手机到电脑,无处不在。
因其开源的特点,Linux
的发展速度以指数规模增长,无数开发者加入到 Linux
开发的行列中来。本篇博客主要简单概括一下 Linux
的特点以及常用的语法及包。
1.1 Why Linux
Linux
有以下众多特点:
开源免费
Linux
是完全免费的操作系统,并且开放源代码,任何人都可以随意修改其源代码。多用户、多任务
Linux
支持多用户,各个用户对于自己的文件设备有自己特殊的权利,保证了各用户之间互不影响。多任务则是现代电脑最主要的一个特点,Linux
可以使多个程序同时并独立地运行。安全可靠
Linux
的代码是开源的,所以每个人都可以参与进入修补漏洞。此外,Linux
的用户权限管理也使得安全风险降低稳定
Linux
服务器一直以稳定性闻名,可以持续运行很久都不易崩溃。多平台
Linux
可以运行在多种硬件平台上,x86
,arm
及其他各种嵌入式设备。
1.2 Linux in a nutshell
1.2.1 常用发行版
Debian
老牌发行版,非常稳定,适合用于服务器。
Ubuntu
Ubuntu
是Debian
的一款衍生版,侧重于它在这个市场的应用,在服务器、云计算、甚至一些运行Ubuntu Linux
的移动设备上很常见。于 2004 年 9 月首次公布的。属于热门发行版之一,因其图形界面开发较完善以及良好的社区支持,很受初接触Linux
的人群青睐。CentOS
CentOS
是一种对 RHEL(Red Hat Enterprise Linux)源代码再编译的产物,由于Linux
是开发源代码的操作系统,并不排斥样基于源代码的再分发,CentOS
就是将商业的Linux
操作系统RHEL
进行源代码再编译后分发,并在RHEL
的基础上修正了不少已知的漏洞。Fedora
Fedora Linux
(第七版以前为Fedora Core)是由
Fedora
项目社区开发、红帽公司赞助,目标是创建一套新颖、多功能并且自由(开放源代码)的操作系统。Fedora
是商业化的Red Hat Enterprise Linux发行版的上游源码。
Kali
Kali Linux
是Debian
的一款衍生版。旨在渗透测试和数字取证。它预先构建了用于渗透测试的多种工具。Arch
Arch
是一款采用滚动发行方式的操作系统,只要安装一次就够了,每当发行了某个新版本,就可以升级发行版,无需重新安装。Pacman
是Arch Linux
的软件包管理器。Arch
既支持X86
处理器架构,又支持X86_64
架构,安装程序可以从光盘或U盘来运行。
1.2.2 推荐阅读
有兴趣深入了解 Linux
以及自由软件,开源历史的,推荐阅读如下数据:
- 《只是为了好玩》
- 《大教堂与集市》
- 《自由软件,自由社会》
- 《黑客与画家》
1.3 Module installation
1.3.1 编译源码安装
使用源代码安装软件的优点:
- 可以获得最新的软件,及时修复bug;
- 根据用户的需求,灵活定制软件功能
步骤: 1. 解压
1
0. tar -xzvf soft.tar.gz # 解压一般会生成一个soft目录
检查环境变量及配置编译选项
1
./configure # 检查环境变量及配置编译选项
编译源代码
1
make # 源代码编译成二进制文件
安装
1
2
3
4make install # 将make编译出来的文件安装到指定位置(或默认位置)
# 指定安装目录
make install ./configure --prefix=目录名卸载
1
make uninstall # 或手动删除
由于软件可能将文件分散地安装在系统的多个目录中,往往很难把它删除干净, 最好在编译前进行配置,指定软件将要安装到目标路径:
1
make install ./configure --prefix=PATHNAME
这样可以使用
rm -rf PATHNAME
命令来进行干净彻底的卸载。
1.3.2 在线安装
apt
包管理由于操作系统中软件包存在复杂的依赖关系,为了解决软件包的依赖性问题和获取问题,
APT
顺势出现了。APT
是Ubuntu
中的命令行软件包管理工具,用于获取、安装、编译、卸载和查询Deb
软件包,以及检查软件包的依赖关系。常用命令:
1
2
3
4
5
6
7
8
9
10
11
12sudo apt-get update
更新本地索引,即更新/var/lib/apt/lists 里边的内容
sudo apt-get upgrade
更新所有软件包
sudo apt-get install xx
安装软件
sudo apt-get remove xx
卸载包
sudo apt-get remove --purge name
卸载并彻底清除
sudo apt-get clean
清理下载文件的存档换源
在线安装,如
apt
包管理的软件仓库地址可能在国外,国内连接速度较慢。所以可以将软件仓库地址改为国内源码库。Ubuntu
的软件源配置文件是/etc/apt/sources.list
。将系统自带的该文件做个备份,将该文件替换为下面内容,即可使用TUNA
的软件源镜像。用
vim
命令打开sources.list
文件:1
vim /etc/apt/sources.list
将内容改为如下:
1
2
3
4
5
6
7
8
9
10
11
12
13# 默认注释了源码镜像以提高 apt update 速度,如有需要可自行取消注释
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-updates main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-updates main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-backports main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-backports main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-security main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-security main restricted universe multiverse
# 预发布软件源,不建议启用
# deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-proposed main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-proposed main restricted universe multiverse以上为
ubuntu 20.04
更换清华源码的一个例子。此外还有许多其他的优秀软件仓库,可以自行尝试:1
2
3
4
5
6
7
8# 清华:
https://mirrors.tuna.tsinghua.edu.cn/help/ubuntu/
# 中科大
https://mirrors.ustc.edu.cn/help/
# 阿里
http://mirrors.cloud.aliyuncs.com/ubuntuNote: 查看
Ubuntu
的版本信息:1
lsb_release -a
Results:
1
2
3
4
5
6LSB Version: core-11.1.0ubuntu2-noarch:security-11.1.0ubuntu2-noarch
Distributor ID: Ubuntu
Description: Ubuntu 20.04.3 LTS
Release: 20.04
Codename: focal
1.4 开发工具
1.4.1 Git
Git
是一个开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目。
命令行安装:
1 | sudo apt-get install git |
1.4.2 Vim
Vim
是从 vi
发展出来的一个文本编辑器。代码补完、编译及错误跳转等方便编程的功能特别丰富,在程序员中被广泛使用。和
Emacs
并列成为类 Unix
系统用户最喜欢的编辑器。
安装步骤:
首先将vim的源码克隆下来,这里因为github可能很慢,使用码云的镜像
1
git clone https://gitee.com/mirrors/vim.git
安装gcc(有则不必安装)和各依赖库
1
2
3sudo apt-get install gcc
sudo apt-get install libncurses5-dev python-dev python3-dev libatk1.0-dev libcairo2-dev libx11-dev libxpm-dev libxt-dev配置与安装(
vim
目录)1
2
3
4
5
6sudo ./configure --with-features=huge --enable-multibyte
--enable-rubyinterp --enable-pythoninterp --enable-python3interp
--enable-luainterp --enable-cscope --enable-gui=gtk3 --enable-perlinterp
--with-python-config-dir=/usr/lib/python2.7/config-x86_64-linux-gnu/
--with-python3-config-dir=/usr/lib/python3.6/config-3.6m-x86_64-linux-gnu/
--prefix=/usr/local/vim8参数说明:
- with-features=huge:支持最大特性
- enable-rubyinterp:打开对 ruby 编写的插件的支持
- enable-pythoninterp:打开对 python 编写的插件的支持
- enable-python3interp:打开对 python3 编写的插件的支持
- enable-luainterp:打开对 lua 编写的插件的支持
- enable-perlinterp:打开对 perl 编写的插件的支持
- enable-multibyte:打开多字节支持,可以在 Vim 中输入中文
- enable-cscope:打开对cscope的支持
- enable-gui=gtk3 表示生成采用 GNOME3 风格的 gvim
- with-python-config-dir=/usr/lib/python2.7/config-x86_64-linux-gnu/ 指定 python 路径
- with-python3-config-dir=/usr/lib/python3.6/config-3.6m-x86_64-linux-gnu/ 指定 python3路径(这里可以根据自己的版本做更改)
- prefix=/usr/local/vim8:指定将要安装到的路径
Note: 更多有关
Linux
和Vim
的相关操作,请查看本文博文 Linux notes,此处不再进行赘述。
1.5 Shortcuts
1.6 常用终端快捷键
以下命令仅在 ubuntu
系统测试,其他发行版
Linux
未测试。
快捷键 | 功能 |
---|---|
Ctrl+a | 光标移动到开始位置 |
Ctrl+e | 光标移动到最末尾 |
Ctrl+k | 删除此处至末尾的所有内容 |
Ctrl+u | 删除此处至开始的所有内容 |
Ctrl+d | 删除当前字符 |
Ctrl+h | 删除当前字符前一个字符 |
Ctrl+w | 删除此处到左边的单词 |
Ctrl+y | 粘贴由Ctrl+u, Ctrl+d, Ctrl+w删除的单词 |
Ctrl+l | 相当于clear,即清屏 |
Ctrl+r | 查找历史命令 |
Ctrl+b | 向回移动光标 |
Ctrl+f | 向前移动光标 |
Ctrl+Left-Arrow | 光标移动到上一个单词的词首 |
Ctrl+Right-Arrow | 光标移动到下一个单词的词尾 |
Ctrl+d | 退出终端 |
Ctrl+Alt+T | 打开终端 |
2. Command
This chapter introduce some commonly used Linux
command,
including cd
, pwd
, ls
,
mkdir
, rmdir
, cp
,
rm
, mv
, tar
, zip
,
unzip
.
2.1 Derectory management
1 | cd / pwd / ls |
2.1.1 Directory
cd
:即 current directory,切换目录1
2
3
4cd /home/YangSu/Desktop #按TAB键可以自动补全
cd ~/Desktop #其中~特指用户的主目录
cd.. # 回到上一个目录
cd #回到用户目录位置目录有两种形式:
- 绝对路径
1
/home/YangSu/Desktop
- 相对路径
1
2
3. 当前目录
.. 上级目录
../Videos 上级目录下的Videos子目录pwd
:print working directory, 显示当前工作目录1
2
3pwd
/home/YangSu/Desktopls
: 即 list,列出文件和目录1
2
3ls
ls ~/Desktop
ls -l ~/Desktop #其中,-l参数表示详细模式mkdir
: 即 make directory,创建目录1
2
3mkdir abc
mkdir -p abc/123/test
#使用-p参数,可以将路径的层次目录全部创建touch
: 新建一个文件1
2
3
4
5touch index.js
# 在当前目录下新建一个 index.js 文件
# windows terminal中
new-item index.jsrm
: 即 remove 删除文件或目录1
2rm -rf abc #删除abc目录,和子项一并删除
#其中,r:recursive, f:forcermdir
: 即 remove directory,删除空目录1
rmdir abc #删除空目录,如果目录非空,则会删除失败
cp
: copy, copy files and directories.1
2
3cp [OPTION]... [-T] SOURCE DEST # Copy SOURCE to DEST, or multiple SOURCE(s) to DIRECTORY.
cp -rf Test Test1mv
: 即 move,移动文件或目录(重命名)1
2
3mv [OPTION]... [-T] SOURCE DEST # Rename SOURCE to DEST, or move SOURCE(s) to DIRECTORY.
mv Test1 HelloWorld
2.1.2 Archive
tar
tar
: an archiving utility, 即 tape archive档案打包
- 创建档案包
1 | tar -cvf example.tar example |
- 还原档案包
1 | tar -xvf example.tar |
- 归档并压缩
上述的tar格式并没有对文件进行压缩,体积较大
1 | # 并档并压缩 |
gz
gz文件是一种压缩文件,以 .gz
或者
.tar.gz
(.tgz
) 为扩展名,在 Linux、UNIX 和 OSX
下常见,Linux 和 OSX 都可以直接解压使用这种压缩文件。
gunzip
命令:作用是解压文件,使用权限是所有用户。例:1
gunzip FileName.gz
gzip
命令:在 Linux 系统中常用的一个对文件进行压缩和解压缩的命令,既方便又好用。gzip
不仅可以用来压缩大的、较少使用的文件以节省磁盘空间,还可以和tar
命令一起构成 Linux 操作系统中比较流行的压缩文件格式。解压的基本句式:1
gzip -d FileName.gz
1 | 补:可以使用gzip命令来创建.gz文件,基本句式: |
tar
:如果是以 .tar.gz
(.tgz
)
扩展名结尾的 gz
文件,可以使用 tar
命令来解压,执行以下命令就可解压 .tar.gz
文件:
1 | ```shell |
2.1.3 Other command
man
: 即 manual,手册1
man tar
ln
: 软链接,即Windows中的 “快捷方式”1
2
3
4ln -s source link
s: soft
ls -l # 查看软链接,显示为:test -> Test/
ls -l / #详细列出根目录
other:
reset
:重新初始化终端,即清屏clear
:清屏history
:查看命令历史help
:帮助exit
:退出#
:表示注释
2.2 UserManagement
2.2.1 Switch user
- su
即 switch user,切换用户。用户管理需要以管理员身份执行,所以,要先切换账户到 root
1 | su root |
2.2.2 User operation
- useradd
1 | useradd username |
- passwd
1 | passwd username |
- userdel
即 user delete
1 | userdel username |
2.2.3 Group operation
- groupadd
1 | groupadd boys # 创建用户组 |
- groupdel
1 | groupdel boys # 删除用户组 |
- useradd
1 | useradd -g boys ming # -g表示添加用户,同时添加到boys中 |
- usermod
1 | usermod -g boys YangSu # 修改用户信息 |
- cat
1 | cat /etc/group # 查看用户组,每一行表示一个group的信息 |
1.2.4 File permission
- View Permission
1 | ls -l test.txt |
- chmod
即 Change file mode,修改文件的访问权限
1 | chmod o+w test.txt |
- chown
即 Change owner,修改文件的属主,一般每个用户只操作自己用户目录
1 | su |
2.2.5 Script
- Shell 脚本: *.sh
- Perl 脚本: *.pl
- Python 脚本:*.py
脚本程序本质上是一个文本文件,具有可执行权限
1 | Shell 脚本解释器:/bin/sh |
- Shell 脚本
1 | # 编辑一个文本文件 |
- Perl 脚本
- Py 脚本
1 | #!/usr/bin/python3 |
2.2.6 Shell
1 | 定义变量,NAME=value |
2.3 Environment
2.3.1 Environmental Variables
1 | export JAVA_HOME=/opt/jdk1.8 # 定义临时的环境变量 |
使用环境变量:
- 在当前命令行中使用
- 在 Shell 脚本中使用
2.3.2 User Variables
用户环境变量定义在:~/.bash_profile 中(注:在 Linux 下,以 . 开头的文件为 隐藏文件 )
1 | ls -la # a 表示 all,显示所有文件 |
2.3.3 System Variables
系统环境变量定义在:/etc/profile 中,其中的环境变量对 所有用户 有效
1 | 以 root 登录或执行 |
2.3.4 PATH Variables
PATH,最常见的环境变量,用来描述可执行程序的搜索路径
1 | echo $PATH |
2.3.5 Network
1 | ifconfig # 检查IP地址,Windows 为ipconfig |
3 CentOS8 图形界面和命令行切换
1 | 查看目前默认的启动默认 |