Linux 必知必会

文章目录

  • 一、Linux 简介
    • 1.1 Unix 与 Linux 和 Mac OS 的关系
    • 1.2 Linux 操作系统
    • 1.3 Linux 发行版
  • 二、Shell 的使用
    • 2.1 什么是 Bash Shell
    • 2.2 shell 提示符
    • 2.3 shell 命令基础
    • 2.4 配置环境变量
    • 2.5 命令别名
    • 2.6 快捷键
  • 三、Linux 系统目录结构
  • 四、管道与重定向
    • 4.1 管道
    • 4.2 重定向
  • 五、目录和文件
    • 5.1 绝对路径和相对路径
    • 5.2 目录和文件操作
    • 5.3 文件的属性
  • 六、硬链接和软链接
    • 6.1 硬链接(Hard Link)
    • 6.2 软连接(符号链接,Symbolic Link)
  • 七、用户和用户组
    • 7.1 用户
      • 7.1.1 用户相关文件
      • 7.1.2 用户相关的命令
    • 7.2 用户组
      • 7.2.1 用户组相关的文件
      • 7.2.2 用户组相关的命令
    • 7.3 切换当前用户和提升权限
  • 八、文件权限
    • 8.1 修改权限
    • 8.2 文件特殊属性
  • 九、软件管理
    • 9.1 更换软件源
    • 9.2 通过 deb 文件安装
    • 9.3 通过 apt 包管理器管理软件
    • 9.4 通过源码安装
  • 十、压缩和解压
  • 十一、下载和上传文件
    • 11.1 下载文件
    • 11.2 上传文件

一、Linux 简介

Linux 必知必会_第1张图片

Linux 与 Windows 和 Mac OS 等系统一样,它也是一个操作系统,并且是一个开源的类 unix 操作系统。凭借着其免费、安全、高稳定性等特点,被广泛应用于服务器、嵌入式开发等领域,并且在服务器领域一枝独秀!我们熟知的安卓操作系也是基于 Linux 操作系统开发出来的。

1.1 Unix 与 Linux 和 Mac OS 的关系

Uinx 是20世纪70年代初出现的一个操作系统,现如今用的很少了,但却是上面三个操作系统的“老大哥”。三者身上都或多或少地拥有 Unix 的影子。windows系统借鉴过 unix 的一些理念,而 Linux 和 Mac OS更是在 unix 的基础之上开发而来,所以它们二者被称为“类 Unix 操作系统”,在很多方面都是相似的。

1.2 Linux 操作系统

1991年,荷兰在校大学生 Linus Torvalds(林纳斯·托瓦兹,被称为 linux 之父)从 Minix(mini-nuix)得到灵感,开发出了一个操作系统内核,取名为 Linux (linus‘s unix 的简写),并将源代码公开到了网上。

我们注意到,linus 只是完成了一个内核,相对于一个真正的操作系统,它还缺少很多东西。而真正使 Linux 系统走向一个完整操作系统的,是另一帮人——GNU的成员。

GNU 是一个操作系统项目,该项目主要是为了建立免费的开源的类 UNIX 系统,Emacs 编辑器、GCC 编译器都是由该计划开发出的。虽然 GNU 致力于开发一个操作系统,开发出了很多应用,但始终没有一个让他们满意的内核,于是就看上了 Linux 内核,两家“喜结连理”。从此,Linux 内核便有了 GNU 计划中各种软件的加持,成为了一个真正意义上的操作系统。因此,现在的 linux 操作系统,全称为 GNU/Linux 操作系统。

1.3 Linux 发行版

因为 linux 是一个开源的操作系统,所以有很多公司、开发者在 Linux 内核基础上开发出了自己的操作系统,这些操作系统被统称为 linux 发行版。它们主要是在桌面环境和包管理器上做了大刀阔斧的修改,其他方面修改的不多,所以使用起来是大同小异的。

目前主流的 Linux 发行版有:

Linux 必知必会_第2张图片

  • Debian及其派生版本:Ubuntu、Linux Mint。
  • Fedora及其相关版本:Red Hat Enterprise Linux、CentOS。
  • openSUSE
  • 其他不太流行的版本……

其中,Ubuntu 是大部分人入门 linux 系统的选择,我们这里也选择 Ubuntu 。到 Ubuntu 官网下载安装镜像,使用 Vmware Workstation 等虚拟机软件安装即可。安装教程十分简单,网上也有大量的教程,大家自行搜索。

Ubuntu 的桌面:

Linux 必知必会_第3张图片

二、Shell 的使用

2.1 什么是 Bash Shell

shell 是一个命令解释器,用来执行各种命令。它有点类似于 python 的解释器,也可以编写程序,所以也被称为 shell 语言。但shell 存在的意义并不是为了像 python 那样开发各种各样的软件,而是在于执行用户的命令。

shell 的意思是外壳,我们可以把它看作是操作系统的“外壳”,我们要想和操作系统打交道,就借助于这层“外壳”。

shell 的版本有很多,如 sh、zsh、bash,而 Ubuntu 自带的是 bash,这些 shell 都是差不多的,我们就用默认的 bash shell 就好。

在 Ubuntu 中 找到一个名字叫做“终端”的应用程序,打开后就直接进入了 bash 的操作界面:除了一些字母外,没有任何东西,一切操作都是通过键盘输入命令来完成。

退出 sehll 可以点击右上角的关闭按钮,但更符合规范的做法是输入exit然后回车,这是我们学到的第一条 shell 命令。

2.2 shell 提示符

进入 bash 后,会显示一个 shell 提示符,就是类似下面的一些字母:

hugh@hugh-vm:~$ 

它的含义是用户名@主机名称:当前所在的路径和用户类型

  • 用户名称和主机名称:安装时,输入的是什么就显示什么。

  • 当前所在路径:它可以是一个形如/xxx/xxx的路径,也可以是一个~

    ~:代表用户家目录,即/home/用户名/,我的用户名是“hugh”,那么家目录就是/home/hugh~是 shell 启动时的默认目录。

  • 用户类型默认是普通用户,用$指示。还有一种超级用户,用#指示。它们二者的区别就是权限的不同,会在后面讲解。

2.3 shell 命令基础

linux 的命令很多,我们会在后面分类学习,在此先通过几个命令来了解一下 shell 的使用:

shell 命令由三部分组成:命令、选项和参数。同一个命令搭配不同的选项会有不同的效果,而参数通常是被执行命令的对象。

另外,选项通常都是以--开头,但大多数时候用简写形式-,比如--all可以简写为-a。在命令的帮助信息中,可以获取到各种选项及其简写形式。

  • 获取帮助:

    任何命令 --help
    
  • 获取命令的完整说明:

    man 任何命令
    
  • 立刻关机、重启:

    poweroff  # 关机
    reboot    # 重启
    
  • 查看网卡信息(主要是IP地址):

    ip addr
    
  • 列出当前目录下的内容:

    ls
    

    选项:

    • -a:显示隐藏文件和目录(.开头的文件和目录)。
    • -l:列出文件类型、大小等更加详细的内容。
    • -F:在列出的文件名称后加一个标识符;例如可执行档则加 “*”, 目录则加 “/”。

    命令ls -alF使用很频繁,为了方便,linux 提前为其起了个别名:ll,使用llls -alF是一样的。

  • 显示执行命令的历史记录:

    history
    

    要执行某一条历史记录,就执行:! 数字,这个数字就是历史记录中,命令前面的数字。

    选项:

    • -c:清空历史记录。
  • 查找命令(可执行文件及别名 )的所在位置:

    which 命令
    
  • 打印指定内容:

    echo "阿巴阿巴"
    # 输出:阿巴阿巴
    

    该命令通常配合重定向一起使用,单独使用的话,没什么用。

2.4 配置环境变量

在 linux 中,有一些文件和目录是.开头的,这表示它们是隐藏的。不过,这种隐藏只是显示的时候默认不显示,其他方面和普通文件没有区别。

在用户加目录下,有一个隐藏文件.bashrc。它是 bash 的配置文件,主要保存用户对 bash 的一些设置,比如命令别名,环境变量。这里说一下环境变量的配置:

通过文件管理器,双击打开~/.bashrc文件,在最后一行写入以下内容:

export PATH=这里写路径:$PATH

配置完成后,还需要加载一下:

source ~/.bashrc

注意:每次修改完.bashrc文件,都需要重启 shell ,或者执行上面的加载命令。

2.5 命令别名

别名是指给一个复杂的命令起一个简单的名称,然后用别名代替原来复杂的命令。比如,之前提到过的ll命令,就是命令ls -alF的一个别名。

  • 查看所有别名:alias

  • 设置别名:

    • 仅当前会话有效:

      alias 别名='命令'
      
    • 永久有效:将上述命令写入~/.bashrc文件中,或者执行:

      echo "alias 别名='命令'" >> ~/.bashrc  # 注意引号
      
  • 取消别名:

    • 暂时取消:

      unalias 别名
      
    • 永久取消:从~/.bashrc文件中,删除设置别名的那一行命令。

2.6 快捷键

快捷键 说明
上下键 快速输入最近执行过的命令
tab 输入不完整的命令,按tab键,系统会提示可能的命令。
ctrl + a 将光标移至行首
ctrl + e 将光标移至行末
ctrl + c 终止正在执行的程序
ctrl + z 暂停正在执行的程序,并挂到后台。jobs命令列出当前任务,fg 任务号恢复到前台。bg 任务号挂到后台。
ctrl + d 等同于exit,退出当前 shell 会话
ctrl + l 等同于clear,清屏
ctrl + k 删除从光标到行末的所有字符
ctrl + u 删除从光标到行首的所有字符
ctrl + r 搜索命令历史记录,tab键选中
ctrl + w 按照单词或空格向前删除
ctrl + 左右键 按照单词或空格左右移动光标

三、Linux 系统目录结构

Linux 必知必会_第4张图片

Linux 的文件系统是树结构,没有 C、D 盘一说,所有的目录都是放在根目录/下:

  • /bin:存放着普通用户使用的命令。

    在 linux 系统中,不管什么软件,只要看到 bin 目录,那么里面存放着的就是一些可执行文件。

  • /boot:存放的是启动 Linux 时使用的一些核心文件。

  • /dev:存放的是 Linux 的外部设备,在 Linux 中访问设备的方式和访问文件的方式是相同的。

  • /etc:存放系统管理所需要的配置文件和子目录。

  • /home:存放普通用户的主目录(或者叫家目录)。

    在 Linux 中,每个用户都有一个自己的目录,一般该目录名是以用户的账号命名的,如上图中的 alice、bob 和 eve,并用~表示当前用户的家目录。

  • /lib:存放着系统最基本的动态连接共享库,其作用类似于 Windows 里的 DLL 文件。几乎所有的应用程序都需要用到这些共享库。

  • /lost+found:这个目录一般情况下是空的,当系统非法关机后,这里就存放了一些文件。

  • /media:linux 系统会自动识别一些设备,例如U盘、光驱等等挂载到这个目录下。

  • /mnt:该目录是为了让用户临时挂载别的文件系统的,我们可以将光驱挂载在 /mnt/ 上,然后进入该目录就可以查看光驱里的内容了。

  • /opt:给主机额外安装软件所摆放的目录。比如你安装一个ORACLE数据库则就可以放到这个目录下。默认是空的。

  • /proc:存储的是当前内核运行状态的一系列特殊文件,这个目录是一个虚拟的目录,它是系统内核的映射,我们可以通过直接访问这个目录来获取系统信息。

  • /root:存放超级用户的家目录。

  • /sbin:存放的是超级用户使用的命令。

  • /srv:该目录存放一些服务启动之后需要提取的数据。

  • /sys:跟/proc非常类似,也是一个虚拟的目录,存放着进程信息、设备信息等的映射。

  • /tmp:存放一些临时文件的。

  • /usr:用户的很多应用程序和文件都放在这个目录下,类似于 windows 下的 program files 目录。

  • /usr/bin:普通用户使用的应用程序。

  • /usr/sbin:超级用户使用的比较高级的管理程序和系统守护程序。

    上面两个目录在根目录下都有同名的目录,根下的两个目录是上面两个目录的软链接,软链接类似于 windows 中的快捷方式。所以图片中才会画了两个箭头。

  • /usr/src:内核源代码默认的放置目录。

  • /var:这个目录中存放着在不断扩充着的东西,我们习惯将那些经常被修改的目录放在这个目录下。包括各种日志文件。

  • /run:是一个临时文件系统,存储系统启动以来的信息。当系统重启时,这个目录下的文件应该被删掉或清除。

四、管道与重定向

4.1 管道

管道是将一个命令的输出作为另一个命令的输入,它的格式为命令1 | 命令2 | ……,其中|叫做管道符,是我们的主角。

比如,我们可以通过管道将 列出所有进程的命令 和 过滤命令 结合起来,这样就能找到想要的进程(以 python 进程为例):

ps aux | grep "python"  # ps aux 会列出所有进程,grep 从列出的所有进程中过滤出 python 进程

4.2 重定向

重定向是指:将一个命令的输出或输入目标(文件或设备)改为另一个(文件或设备)。最常见的用法,就是将默认输出到屏幕上的信息改为输出到某个文件中。

比如,下面的命令,会将本该被输出到屏幕上的“hello,world”,改为输出到到 a.txt 文件中:

echo "hello,world" > a.txt  # hello,world 会被保存在 a.txt 中

重定向符号:

  • >:输出重定向到一个文件或设备,覆盖原来的文件;
  • >! :输出重定向到一个文件或设备,强制覆盖原来的文件;
  • >>:输出重定向到一个文件或设备,追加原来的文件;
  • <输入重定向到一个程序,它和输出重定向类似。

五、目录和文件

5.1 绝对路径和相对路径

  • 绝对路径:

    从根目录/开始表示的路径叫做绝对路径,比如,表示桌面目录的路径:

    /home/你的用户名/桌面
    
  • 相对路径:

    在使用ll命令查看时,目录下会有两个特殊的子目录 ...,前者代表的是当前目录本身,后者表示当前目录的上一级目录

    从上面两个目录开始表示的路径就叫做相对路径,即相对于当前目录来表示的路径。

    比如,通过相对路径表示当前目录下foo/bar目录:

    ./foo/bar
    

    再比如,表示当前目录的上一级目录的上一级目录下的foo目录:

    ../../foo
    
  • 运行可执行文件:

    Linux 运行可执行文件需要通过./来运行,比如,当前目录下有一个start可执行文件,执行的话:

    ./start    # 真确
    start      # 错误
    

5.2 目录和文件操作

  • 切换目录:

    cd 路径  # 切换到某一路径
    cd ~    # 切换到用户家目录
    cd -    # 切换到上一次使用的目录
    cd ..   # 切换到上级目录
    
  • 查看目录或文件的大小:

    du -sh 路径
    
  • 移动文件或目录:

    mv 源路径 目标路径    # 移动文件
    mv a.txt  b.txt    # 起到重命名的效果,a.txt 重命名为 b.txt
    
  • 拷贝文件或目录:

    cp 源文件路径 目标路径
    cp -p 源文件路径 目标路径  # 保持原来的文件属性
    cp -r 源目录路径 目标路径  # 拷贝目录
    
    cp a.txt  b.txt    # 起到重命名的效果,a.txt 重命名为 b.txt
    
  • 创建目录:

    mkdir 目录路径
    mkdir 目录路径1 目录路径2 ……    # 创建多个
    mkdir -v 目录路径    # 显示详细信息
    mkdir ./{dir1, dir2,……}    # 在同一路径下创建多个
    
    
    # 假设当前目录下,没有 ./a/b/c 这个多级目录
    # 如果要创建这个多级目录,则创建时必须加 -r 选项
    # 这样会自动递归的创建这三个目录,否则无法创建
    mkdir -r ./a/b/c  # 需要时创建目标目录的上层目录,但即使这些目录已存在也不当作错误处理
    
  • 创建文件:

    touch 文件路径    # 文件已存在则更新创建时间
    touch 文件路径1 文件路径2  # 创建多个
    touch file{1,2,3}    # 创建file1,file2,file3 这三个文件
    touch file{1..100}    # 创建file1到file100,共100个文件
    touch file{a..z}     # 同上
    
  • 删除文件或目录:

    rm 文件名称
    rm -v 文件名称  # 显示详细信息
    rm -r 目录    # 删除目录必须加 -r 选项
    rm -f 文件    # -f 表示强制删除,对于目录也是如此
    rm *.log     # 删除当前目录下所有名称以 .log 结尾的文件, * 代表匹配任意字符
    

    还有一个及其危险的命令:rm -rf /*,这表示删除根目录下的所有一切,有的程序员会拿这个命令开玩笑,大家千万不要用!!!

  • 查看文件内容:

    cat 文件路径
    
    less 文件路径    # 分页查看内容,按上下键移动内容,q 键退出
    
    head 文件路径    # 查看文件前面一部分,默认为前10行
    head -n5 文件路径   # 查看前5行
    
    tail 文件路径    # 查看文件后面一部分,默认为后10行
    tail -20 文件路径    # 查看后20行
    tail -f 文件路径     # 动态查看内容的变化
    
  • 计算文件的Byte数、字数、或行数:

    wc 文件路径    # 会显示三个数字,分别是:行数、单词数、字节数
    
  • 查找文件里符合条件的字符串:

    grep "匹配模式" 文件路径   # 会返回所有包含匹配内容的行
    grep -i "匹配模式" 文件路径    # 忽略大小写
    

5.3 文件的属性

使用ll查看目录内容时,会列出一大堆东西,我们现在看看这些东西到底是什么,也许有些概念还没听说过,但没关系,后面会详细讲解。

下面是一些ll命令的输出:

drwxr-xr-x  2 hugh hugh 4096  120 12:20 桌面/
-rw-------  1 hugh hugh 3399  120 11:13 .bash_history
-rw-r--r--  1 hugh hugh  220  113 16:52 .bash_logout
-rw-r--r--  1 hugh hugh 3771  118 18:39 .bashrc

这些内容就是文件的属性,它们各自的含义如下:

文件类型 权限 硬链接数量 所属用户 所属用户组 最近修改时间 文件或目录名称
d rwxr-xr-x 2 hugh hugh 1月 20 12:20 桌面/

文件类型有以下几种:

  • -:普通文件,如文本文件、图片、压缩包等;
  • d:目录文件,没错,linux 将目录也视为文件;
  • b:块设备文件,如硬盘等;
  • c:字符设备文件,例如键盘、鼠标等;
  • s:套接字文件,通常用在网络连接、进程间通信;
  • p:管道文件;
  • l:链接文件;

如果要查看文件的具体信息:

file 文件路径

六、硬链接和软链接

硬链接和软链接的功能是基本一样的,都是为了让一个文件在多个不同的路径中能被访问。在学习它们的不同之前,需要先了解一下 Linux 文件系统的原理:

在 Linux 中,文件被分成两部分:

  • Block:记录数据;
  • Inode(i 节点):记录文件的属性信息,但不记录文件名。

文件名被单独保存,指向 inode,再由 inode 指向真正的数据。

6.1 硬链接(Hard Link)

硬链接就是给同一个 inode 分配多个文件名,我们注意到,当一个文件被创建后,它的硬链接数量默认为1,也就是说,硬链接数量为0时,文件就不存在了。另外,Linux 是不允许给目录创建硬链接的。

创建硬链接:

ln 目标文件路径 链接的路径

6.2 软连接(符号链接,Symbolic Link)

软链接就是新建了一个 inode,它有点类似于 Windows 的快捷方式,也用的更多。另外,Linux 是允许给目录创建软链接的。

创建软链接:

ln -s 目标文件路径 链接的路径

最后,不论是硬链接或软链接都不会将原本的档案复制一份,只会占用非常少量的磁碟空间。

七、用户和用户组

7.1 用户

Linux 系统是一个多用户操作系统,任何一个要使用系统资源的人,都必须先向系统管理员申请一个账号,然后以这个账号的身份进入系统。

用户机制的作用在于:

  • 系统中每一个进程都依赖于一个用户来运行
  • 不同的用户会有不同的权限,以保证系统的安全
  • 每一个用户都有一个家目录,都有一个属于自己的系统环境

每一个用户都有一个唯一标识 UID:

  • 0:超级用户,拥有最高的权限。
  • 1~200:系统用户,用来运行系统自带的进程。
  • 201~999:系统用户,用来运行用户安装的程序。
  • 1000+:普通用户,正常登录使用系统的用户,权限比较小。

7.1.1 用户相关文件

Linux系统采用纯文本文件来保存账号的各种信息,其中最重要的文件有/etc/passwd/etc/shadow/etc/group这几个。

  • 用户信息文件:

    /etc/passwd中保存着所有用户的详细信息,每一行代表一个用户,用冒号分割,分割为7段:

    hugh x 1000 1000 hugh, /home/hugh /bin/bash
    用户名 密码占位符 用户UID 用户组ID 注释信息 用户家目录的路径 登录 shell
  • 影子文件:

    /etc/passwd类似,每一行也是用冒号分割,一共9段:

    hugh 6 6 6YusQ6WaOC…… 19005 0 99999 7 一般为空 一般为空 保留字段
    用户名 密码的密文 密码的最后一次修改时间(时间戳) 两次密码修改间隔的最小时间 密码的有效期:273年 到期之前的提醒天数 口令过期多少天后,该账号被禁用。 账号失效时间 未使用

7.1.2 用户相关的命令

  • 输出指定用户的用户和用户组信息:

    id 用户名    # 当没有指定用户时,使用当前用户信息
    
  • 新建用户:

    useradd 用户名
    useradd -u 3000 用户名   # 指定用户 UID
    useradd -g 组名 用户名    # 指定用户所属基本用户组
    useradd -G 组名1,组名2…… 用户名    # 指定用户所属扩展用户组
    useradd -d 路径 用户名    # 指定用户家目录的路径
    useradd -M 用户名    # 不建立用户家目录
    useradd -s      # 不允许该用户登录
    

    注意:一个用户只能属于一个基本用户组,但可以属于多个扩展用户组。

  • 删除用户:

    userdel 用户名
    userdel -r 用户名    # 同时删除用户家目录
    
  • 修改用户:

    usermod 选项 用户名    # 选项与 useradd 中的相同
    
    # 将用户sam的登录Shell修改为ksh,主目录改为/home/z,用户组改为developer
    usermod -s /bin/ksh -d /home/z –g developer sam
    
  • 修改密码:

    passwd 用户名   # 设置或修改密码,随后会有提示,按照提示输入即可
    passwd -d 用户名   # 删除密码
    passwd -l 用户名   # 锁定账户,用户会无法登录
    passwd -u 用户名   # 解锁账户
    passwd -S 用户名    # 显示密码信息
    

7.2 用户组

为了能够更加高效地指派系统中各个用户的权限,在工作中常常会把几个用户加入到同一个组里面,这样便可以通过组来快速分配权限。

7.2.1 用户组相关的文件

  • 组信息文件:

    依旧是冒号分割,共4段:

    hugh x 100 我的为空
    组名 组密码占位符 组GID 组中附加用户

7.2.2 用户组相关的命令

  • 新建用户组:

    groupadd 组名
    groupadd -g 用户组GID 组名  # 指定新用户组的 GID
    groupadd -o 组名    # 允许GID重复,通常与-g 连用
    
  • 删除用户组:

    groupdel 组名   # 组内不能有用户
    
  • 修改用户组:

    groupmod -g 用户组GID 组名  # 修改 GID
    groupmod -n 新组名 旧组名  # 修改组名
    groupmod -o 组名    # 允许GID重复,通常与-g 连用
    

7.3 切换当前用户和提升权限

su命令用于切换当前用户为其他用户,需要输入目标用户的密码,root 用户切换到其他用户则不需要密码。

su 用户名    # 切换用户,会加载目标用户的环境变量
su - 用户名    # 切换用户并打开新的 shell,会加载目标用户的环境变量

sudo命令可以使普通用户以超级用户的身份允许命令,也就是说,通过sudo执行的命令,就如同是 root 亲自在执行。

sudo 命令     # 需要输入当前用户的密码

八、文件权限

还记得文件属性一节中,提到过的权限属性吗?使用ll命令查看目录内容,就能看到每个文件最前面的权限属性,它看起来是这样子的:

rwxrwxr-x    # 注意,这里将第一个字母去掉了,那是文件类型

将其三位一组地分开:

rwx rwx r-x
文件所属用户的权限 文件所属用户组的权限 其他用户的权限

这四个符号代表了四种权限:

符号表示 对应权限 数字表示
r 读取权限 4
w 写入权限 2
x 执行权限 1
- 没有对应的权限 0

符号表示一般供给用户查询使用,而数字表示一般是修改权限使用。

8.1 修改权限

chmod 用户身份(u、g、o)授予方式(+、-、=)权限 文件路径
# u、g、o代表用户、用户组、其他用户
# +、-、=代表添加某一权限、取消某一权限、直接设定权限

chmod u+w 文件路径    # 给用户添加写权限
chmod g-r 文件路径    # 给用户组取消读取权限
chmod o=rw 文件路径    # 给其他用户直接设定读写权限

通过数字表示修改权限,需要对文件所属用户、文件所属用户组、其他用户的权限分别进行计算,然后按照对应顺序授予权限,比如:

# 文件所属用户、文件所属用户组、其他用户都只有写权限
chmod 222 文件路径

# 文件所属用户、文件所属用户组、其他用户都有完整的权限
chmod 777 文件路径    # 因为,读、写和执行=4+2+1=7

# 文件所属用户有读、写、执行权限,用户组和其他用户有读和执行权限
chmod 755 文件路径    # 注意三个数字的对应顺序

8.2 文件特殊属性

改变文件属性:

chattr -+= 属性 文件路径

常用属性有以下几种:

  • a:让文件或目录只能追加内容;
  • b:不更新文件或目录的最后存取时间;
  • i:不能任意更动文件或目录。

九、软件管理

9.1 更换软件源

由于 Ubuntu 的官方软件源速度很慢,所以我们需要更换为国内第三方的软件源。

这里以清华大学开源软件镜像站为例:

  1. 打开镜像站官网,搜索 Ubuntu,然后打开。

  2. 选择对应的 Ubuntu 版本。

  3. 复制软件源配置信息内容。

  4. 备份原有软件源配置文件(可选):

    sudo cp /etc/apt/sources.list  /etc/apt/sources.list.bak
    
  5. 使用熟悉的编辑器打开/etc/apt/sources.list文件,比如 vim 。

  6. 清空原有内容,将复制的内容粘贴进去,保存。

  7. 更新存储库引索(软件源):

    sudo apt-get update
    

9.2 通过 deb 文件安装

.deb文件类似于 windows 的.exe文件,它是 Debian 系 Linux 系统的软件安装包。

使用 deb 文件安装软件,要先到软件官网下载 deb 文件,然后用下面的命令安装:

sudo dpkg -i deb文件的路径

如果提示有依赖问题,就通过下面的命令安装依赖:

sudo apt-get install -f

9.3 通过 apt 包管理器管理软件

apt 是 Debian 系 Linux 系统的安装包管理工具,它使用起来很简单,但功能却很强大:

sudo apt install 软件包名称    # 安装软件


sudo apt upgrade    # 升级已安装软件
apt list --upgradeable    # 列出可更新的软件包及版本信息

sudo apt search 软件包名称    # 搜索软件包信息

sudo apt remove 软件包名称    # 卸载软件
sudo apt purge  软件包名称    # 卸载并移除配置文件

sudo apt autoremove    # 清理不再使用的依赖和库文件
sudo apt autoclean     # 清理安装过程中产生的文件

9.4 通过源码安装

有些软件没有被收录进软件镜像源,或者说我们需要使用最新的版本,这时候就要自己去他们的官网或者是代码托管平台下载最新的软件源码,自己来编译安装。

编译安装,会需要一些工具,这些工具一般需要我们自己安装:

sudo apt install build-essential

以 redis 的安装为例:

# 获取源码压缩包,wget 是下载文件用的,第十二章有讲解
wget https://download.redis.io/releases/redis-6.2.6.tar.gz

# 解压缩,后面第十一节有讲解
tar -xzf redis-6.2.6.tar.gz

cd redis-6.2.6
make

这种方式比较麻烦,最好的办法是按照软件的官方文档一步一步来。

**注意:使用源码安装的软件,需要进行配置(制作系统服务)后,才能通过 systemctl 来管理!**systemctl 的用法和系统服务的制作方法,在下一篇文章讲解。

十、压缩和解压

Linux 下常见的压缩包格式有 zip、tar.gz 等,可以很方便的用命令解压。

  • .gz格式:

    gzip 文件路径    # 压缩
    
    gzip -d 压缩包路径    # 解压
    

    只能压缩文件,不能压缩文件夹,且压缩后会将原文件删除。

  • .zip格式:

    zip 压缩包名称 文件路径    # 压缩文件
    zip 压缩包名称 -r 目录路径    # 压缩目录
    
    unzip 压缩包路径    # 解压
    unzip 压缩包路径 -d 目标路径    # 解压到指定路径
    unzip -l 压缩包路径    # 不解压,只查看内容
    

    可能需要手动安装:sudo apt install zip

  • .tar格式:

    tar -czf 压缩包名称 文件路径1 文件路径2 ……    # 压缩文件,.tar.gz格式
    
    tar -xf 压缩包路径    # 自动识别格式并解压
    tar -xf 压缩包路径 -C 目标路径    # 解压到指定路径
    

十一、下载和上传文件

11.1 下载文件

通过 shell 下载文件,需要借助于 wget、curl 等下载工具。大部分系统默认自带 wget,不用下载,如果显示命令找不到,则需要安装一下。

  • 安装 wget 或 curl :

    运行下面的命令之一:

    sudo apt install wget
    sudo apt install curl
    
  • 使用 wget 或 curl 下载文件:

    wget 下载链接    # 下载到当前目录下
    wget -O 路径 下载链接    # 选项是大写的欧,下载到指定目录下
    
    # curl 用法与 wget 类似
    

11.2 上传文件

如果需要将文件上传到虚拟机或是远程服务器,需要使用基于 ssh 的 scp 命令。

我们这里使用的是虚拟机,但也要配置 SSH 才能正常使用 scp 命令

关于 SSH 远程连接的配置、免密码登录等,都十分简单且网上有很多教程,请大家自行搜索配置。

在文件所在的机器上,执行以下命令(windows也支持此命令):

scp 需要上传的文件的路径 目标主机用户名@目标主机IP:上传的目标路径
scp -r 路径 用户名@IP:路径     # 递归复制目录及其内容
scp -C 路径 用户名@IP:路径     # 在复制过程中压缩文件或目录

你可能感兴趣的:(Linux,linux,unix,服务器)