0%

Linux notes

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 可以运行在多种硬件平台上,x86arm 及其他各种嵌入式设备。

1.2 Linux in a nutshell

1.2.1 常用发行版

  1. Debian

    老牌发行版,非常稳定,适合用于服务器。

  2. Ubuntu

    UbuntuDebian 的一款衍生版,侧重于它在这个市场的应用,在服务器、云计算、甚至一些运行 Ubuntu Linux 的移动设备上很常见。于 2004 年 9 月首次公布的。属于热门发行版之一,因其图形界面开发较完善以及良好的社区支持,很受初接触 Linux 的人群青睐。

  3. CentOS

    CentOS 是一种对 RHEL(Red Hat Enterprise Linux)源代码再编译的产物,由于 Linux 是开发源代码的操作系统,并不排斥样基于源代码的再分发,CentOS 就是将商业的 Linux 操作系统 RHEL 进行源代码再编译后分发,并在 RHEL 的基础上修正了不少已知的漏洞。

  4. Fedora

Fedora Linux(第七版以前为Fedora Core)是由 Fedora 项目社区开发、红帽公司赞助,目标是创建一套新颖、多功能并且自由(开放源代码)的操作系统。Fedora 是商业化的Red Hat Enterprise Linux发行版的上游源码。

  1. Kali

    Kali LinuxDebian 的一款衍生版。旨在渗透测试和数字取证。它预先构建了用于渗透测试的多种工具。

  2. Arch

    Arch 是一款采用滚动发行方式的操作系统,只要安装一次就够了,每当发行了某个新版本,就可以升级发行版,无需重新安装。PacmanArch 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. 检查环境变量及配置编译选项

    1
    ./configure # 检查环境变量及配置编译选项

  2. 编译源代码

    1
    make  # 源代码编译成二进制文件

  3. 安装

    1
    2
    3
    4
    make install # 将make编译出来的文件安装到指定位置(或默认位置)

    # 指定安装目录
    make install ./configure --prefix=目录名

  4. 卸载

    1
    make uninstall # 或手动删除

    由于软件可能将文件分散地安装在系统的多个目录中,往往很难把它删除干净, 最好在编译前进行配置,指定软件将要安装到目标路径:

    1
    make install ./configure --prefix=PATHNAME

    这样可以使用 rm -rf PATHNAME 命令来进行干净彻底的卸载。

1.3.2 在线安装

  1. apt 包管理

    由于操作系统中软件包存在复杂的依赖关系,为了解决软件包的依赖性问题和获取问题,APT 顺势出现了。APTUbuntu 中的命令行软件包管理工具,用于获取、安装、编译、卸载和查询 Deb 软件包,以及检查软件包的依赖关系。

    常用命令

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    sudo 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
    # 清理下载文件的存档

  2. 换源

    在线安装,如 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/ubuntu

    Note: 查看 Ubuntu 的版本信息:

    1
    lsb_release -a

    Results:

    1
    2
    3
    4
    5
    6
    LSB 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 系统用户最喜欢的编辑器。 安装步骤:

  1. 首先将vim的源码克隆下来,这里因为github可能很慢,使用码云的镜像

    1
    git clone https://gitee.com/mirrors/vim.git

  2. 安装gcc(有则不必安装)和各依赖库

    1
    2
    3
    sudo 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

  3. 配置与安装vim 目录)

    1
    2
    3
    4
    5
    6
    sudo ./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: 更多有关 LinuxVim 的相关操作,请查看本文博文 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
2
3
4
cd / pwd / ls
mkdir / rmdir
cp / rm / mv
tar / zip / unzip

2.1.1 Directory

  • cd :即 current directory,切换目录

    1
    2
    3
    4
    cd /home/YangSu/Desktop #按TAB键可以自动补全
    cd ~/Desktop #其中~特指用户的主目录
    cd.. # 回到上一个目录
    cd #回到用户目录位置

  • 目录有两种形式:

    • 绝对路径

    1
    /home/YangSu/Desktop

    • 相对路径

    1
    2
    3
    . 当前目录
    .. 上级目录
    ../Videos 上级目录下的Videos子目录

  • pwd:print working directory, 显示当前工作目录

    1
    2
    3
    > pwd

    /home/YangSu/Desktop

  • ls: 即 list,列出文件和目录

    1
    2
    3
    ls
    ls ~/Desktop
    ls -l ~/Desktop #其中,-l参数表示详细模式

  • mkdir: 即 make directory,创建目录

    1
    2
    3
    mkdir abc
    mkdir -p abc/123/test
    #使用-p参数,可以将路径的层次目录全部创建

  • touch: 新建一个文件

    1
    2
    3
    4
    5
    touch index.js
    # 在当前目录下新建一个 index.js 文件

    # windows terminal中
    new-item index.js

  • rm: 即 remove 删除文件或目录

    1
    2
    rm -rf abc #删除abc目录,和子项一并删除
    #其中,r:recursive, f:force

  • rmdir: 即 remove directory,删除空目录

    1
    rmdir abc #删除空目录,如果目录非空,则会删除失败

  • cp: copy, copy files and directories.

    1
    2
    3
    cp [OPTION]... [-T] SOURCE DEST # Copy SOURCE to DEST, or multiple SOURCE(s) to DIRECTORY.

    cp -rf Test Test1

  • mv: 即 move,移动文件或目录(重命名)

    1
    2
    3
    mv [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
2
3
4
5
6
7
8
tar -cvf example.tar example
'''
c: create
v: verbose,显示详情
f: file
'''
# 也可以多个目录打包
tar -cvd xxx.tar file1 file2 file3
  • 还原档案包
1
2
tar -xvf example.tar
tar -xvf example.tar -C outdir
  • 归档并压缩

上述的tar格式并没有对文件进行压缩,体积较大

1
2
3
4
# 并档并压缩
tar -czvf example.tar.gz example
# 解压缩
tar -xzvf example.tar.gz -C outdir

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
2
3
4
5
补:可以使用gzip命令来创建.gz文件,基本句式:

```shell
gzip FileName
```

tar:如果是以 .tar.gz(.tgz) 扩展名结尾的 gz 文件,可以使用 tar 命令来解压,执行以下命令就可解压 .tar.gz 文件:

1
2
3
```shell
tar zxvf FileName.tar.gz
```

2.1.3 Other command

  • man: 即 manual,手册

    1
    man tar

  • ln: 软链接,即Windows中的 “快捷方式”

    1
    2
    3
    4
    ln -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
2
su root
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
2
3
4
5
6
7
8
cat /etc/group # 查看用户组,每一行表示一个group的信息
'''
输出为:名称 + ID
YangSu:x:1000:
boys:x:1001:
'''

cat /etc/passwd # 查看用户列表,每一行表示一个user信息

1.2.4 File permission

  • View Permission
1
2
3
4
5
6
7
ls -l test.txt
'''
-rw-------
第一个字母,如果是文件夹,则为d,文件则为-
后面九个字符分为三部分:自己 | 同组 | 别人
rwx------ # 自己可读可写可执行
'''
  • chmod

即 Change file mode,修改文件的访问权限

1
2
3
4
5
6
7
8
9
chmod o+w test.txt
'''
o: other
a: all
u: user # 省略怎默认修改自己和本组的权限

+w: add write permission
-w: delete write permission
'''
  • chown

即 Change owner,修改文件的属主,一般每个用户只操作自己用户目录

1
2
3
4
su
mkdir /opt/source # 在/opt目录下创建一个文件夹source
chown -R YangSu /opt/source # 将source目录分配给YangSu
ls -ld /opt/source

2.2.5 Script

  • Shell 脚本: *.sh
  • Perl 脚本: *.pl
  • Python 脚本:*.py

脚本程序本质上是一个文本文件,具有可执行权限

1
2
3
4
5
6
7
Shell 脚本解释器:/bin/sh
Perl 脚本解释器:/bin/perl
Python 脚本解释器:/usr/bin/python3

# 执行一个脚本时,以下两种方式等效
./hello.py
/usr/bin/python3 hello.py
  • Shell 脚本
1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 编辑一个文本文件
#!/bin/sh # 申明解释器
echo "Hello World!"

# 保存为Hello.sh
# 添加可执行权限,必须要有x权限,才能够执行
chmod +x Hello.sh

# 执行程序
./Hello.sh # 执行程序时,必须加上路径
'''
./表示当前路径
/home/YangSu/Test/Hello.sh
'''
  • Perl 脚本
  • Py 脚本
1
#!/usr/bin/python3

2.2.6 Shell

1
2
3
4
5
6
7
8
9
# 定义变量,NAME=value
JAVA_HOME=/opt/java #中间不能有空格

# 调用命令
echo ${JAVA_HOME}/bin
ls ${JAVA_HOME} #使用变量

# 逻辑控制
if ... while ...

2.3 Environment

2.3.1 Environmental Variables

1
2
3
export JAVA_HOME=/opt/jdk1.8 # 定义临时的环境变量
echo $JAVA_HOME # 显示环境变量
printenv #查看所有环境变量

使用环境变量:

  • 在当前命令行中使用
  • 在 Shell 脚本中使用

2.3.2 User Variables

用户环境变量定义在:~/.bash_profile 中(注:在 Linux 下,以 . 开头的文件为 隐藏文件

1
2
3
4
5
6
7
8
9
ls -la # a 表示 all,显示所有文件

# 用户环境变量,g 表示 GNU
gedit ~/.bash_profile
# 添加
export JAVA_HOME=/opt/jdk1.8

# 注销当前用户,再次登陆时生效
echo ${JAVA_HOME}

2.3.3 System Variables

系统环境变量定义在:/etc/profile 中,其中的环境变量对 所有用户 有效

1
2
3
4
5
6
7
8
9
10
11
# 以 root 登录或执行
gedit /etc/profile

:'
#在 CentOS 中,一般不可以直接修改 /etc/profile,而是在 /etc/profile.d 创建一个自定义的脚本
'
# 用 gedit 创建一个脚本
gedit /etc/profile.d/myprofile.sh
# 定义环境变量
export TOMCAT=/opt/tomcat
# 注销并重新登录

2.3.4 PATH Variables

PATH,最常见的环境变量,用来描述可执行程序的搜索路径

1
2
3
echo $PATH 
# OUTPUT:/home/YangSu/.local/bin:/home/YangSu/bin:/home/YangSu/.local/bin:/home/YangSu/bin:/home/YangSu/.local/bin:/home/YangSu/bin:/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin
# 多个路径之间用冒号分隔

2.3.5 Network

1
2
3
4
5
6
7
8
ifconfig # 检查IP地址,Windows 为ipconfig
ping www.baidu.com # 测试外网

'''
虚拟机和宿主机时互相连通的
虚拟机:192.168.11.128
宿主机:192.168.11.1
'''

3 CentOS8 图形界面和命令行切换

1
2
3
4
5
6
7
8
9
10
# 查看目前默认的启动默认
systemctl get-default
# 命令行模式:multi-user.target
# 图形界面模式:graphical.target

# 设置为图形界面模式
systemctl set-default graphical.target

# 设置为命令行模式
systemctl set-default multi-user.target
-------------This blog is over! Thanks for your reading-------------