我有两颗糖

博客小屋

By 某只不愿露脸的尹同学


01-Linux操作系统


A. Linux 目录结构

  • 目录
  • 文件
  • 文件名(无换行、空格、shell中的特定字符)
  • 根目录 用 /表示

目录结构图

├── /                                                        根目录
  ├── /bin         (binary)                                  可执行二进制或脚本
  ├── /boot        (boot)                                    Linux启动所需的引导程序文件
  ├── /dev         (devices)                                 系统的设备文件
  ├── /etc         (etcetera)                                管理Linux系统的文件和工具
  ├── /home        (home)                                    存放用户的主目录
  ├── /lib         (libraries)                               函数库
  ├── /lib64       (libraries 64)                            函数库
  ├── /lost+found  (lost+found)
  ├── /media       (media)                                   多媒体及挂载目录
  ├── /mnt         (mount)                                   挂载目录
  ├── /opt         (optional application software packages)  安装应用程序可选目录
  ├── /proc        (processes)                               进程信息文件
  ├── /root        (root)                                    root用户主目录
  ├── /run         (run)                                     存储临时数据
  ├── /sbin        (superuser binaries)                      超级用户使用的二进制或脚本
  ├── /srv         (service)                                 服务启动后所需访问的数据目录
  ├── /sys         (system)                                  文件系统
  ├── /tmp         (temporary)                               临时文件目录
  ├── /usr         (unix system resource)
  └── /var         (variable)                                变量文件,系统运行期间变化

路径的表示:

  • <font color=#229944>绝对路径</font>: 路径的写法,由根目录 / 写起,例如: /usr/share/doc 这个目录。

  • <font color=#229944>相对路径</font>: 路径的写法,不是由跟目录 / 写起,例如由 /usr/share/doc 要到 /usr/share/man 时,可以写成:

    cd ../man	## 相对路径
    

cd

$ cd		## 进入主目录
$ cd ~	## 进入主目录
$ cd ..	## 进入上一级目录
$ cd /	## 进入跟目录

B. 文件与目录管理

pwd (print work directory)

$ pwd		## Print Working Directory

ls (list files)

$ ls        ## 显示文件
$ ls -l     ## 显示文件 + 信息
$ ls -a     ## 显示所有文件(包含隐藏文件/目录)
$ ls -R     ## 递归显示子文件

mkdir (make directory)

$ mkdir AAA
$ mkdir -m 711 BBB                   ## 创建文件夹,配置文件的权限喔!
$ mkdir -p test1/test2/test3/test4   ## 递归创建多级目录

rmdir

$ rmdir AAA	## 删除一个不为空的文件夹AAA

touch

$ touch fileName1 fileName2	## 在当前目录下创建文件 fileName1 和 fileName2

rm

$ rm -i    ## 互动模式,在删除前会询问使用者是否动作
$ rm -f    ## 直接删除档案,不逐一确认
$ rm -r    ## 将目录以下的所有文件/目录递归删除
$ rm -rf dir1   ## 强制递归删除 dir1 中的所有内容

cp

$ cp [选项] 源文件或目录 目标文件或目录

$ cp abc** ../     ## 将所有以abc打头的文件复制到上一级目录
$ cp -r dir1 dir2  ## 将文件夹dir1复制到dir2中

mv

mv [选项]... 源文件 目标文件
mv [选项]... 源文件... 目录

ln

  • 硬链接 (hard link):相当于文件的备份 copy
  • 软链接 (symbolic link):相当于文件的快捷方式,指向关系
$ ln [options] target link_file

$ ln -s /home/yin/Desktop/cat.txt /home/yin/Desktop/ttt/cat.softlink	## 软链接
$ ln /home/yin/Desktop/cat.txt /home/yin/Desktop/ttt/cat.hardlink		## 硬链接
$ ls -l

-rw-r--r-- 2 yin yin    4 12月  9 22:44 cat.hardlink
lrwxrwxrwx 1 yin yin   25 12月  9 22:45 cat.softlink -> /home/yin/Desktop/cat.txt

gzip

$ gzip np         ## 使用 gzip 命令对文件np压缩,生成 np.gz 文件
$ gzip -r dir1    ## 对目录 dir1 中的所有文件逐个压缩
$ gzip -dr dir1   ## 对目录 dir1 中的所有文件解压缩

你可以使用 man [命令] 来查看各个命令的使用文档,如 :man cp


查看文件内容

cat

$ cat /etc/issue	## 查看 issue
$ tac /etc/issue	## 查看 issue (从后往前)

head & tail

$ head cat.md           ## 显示 cat.md 的所有内容
$ head -n 6 cat.md      ## 查看 cat.md 的前两行内容

$ tail -n 3 cat.md      ## 查看 cat.md 的后两行内容

C. 文件属性与权限管理

下图中通过 chown 来授权用户,通过 chmod 为用户设置可以开门的权限

使用 ls -l 命令查看文件的属性:

-rwxr-xr-x 1 zz users 18700 10-20 21:40 mycal

第一个参数是文件类型:

  • 当为 d 则是目录
  • 当为 - 则是文件;
  • 若是 l 则表示为链接文档 (link file);
  • 若是 b 则表示为装置文件里面的可供储存的接口设备(可随机存取装置);
  • 若是 c 则表示为装置文件里面的串行端口设备,例如键盘、鼠标 (一次性读取装置)

接下来的9个字符,每3个一组:

  • user rwx 7
  • group r-x 4
  • others r-x 4

最后是:文件的 硬链接数 、文件拥有者、所属 group、文件字符数 bytes、date and time、fileName

chmod (change mode)

$ chmod [who] operator [permission] filename
  • who: u – user g – group o – other a – all

  • operator: + 增加权限 - 取消权限 = 设置

    权限

$ chmod a-x myfile 	收回所有用户的执行权限
$ chmod u+x myfile 	赋予文件所属者执行权限
$ chmod 744 myfile	赋予所有者 rwx、用户组 r、其它用户 r

注:文件夹需要有可执行权限才能打开!

chown (change ownerp)

## -R 对所有子目录下的文件执行同样操作
## -h 在改变符号链接文件的属主时不影响该链接所指向的目标文件

$ chown -R -h owner dir	## 将文件夹 dir 的所属用户设置为 owner
$ chown root fileNane		## 将文件 fileName 的所有者设置为 root

$ chgrp –R –h group file	## 将文件夹 dir 的所属用户组设置为 group

chgrp

$ chgrp [-cfhRv][--help][--version][所属群组][文件或目录...]
## -R, --recursive     		operate on files and directories recursively
$ chgrp -R group1 dir1		## 将目录 dir1 的所属群组改为 group1

id

$ id userName		## 查看用户 userName 所属用户组

uid=1000(yin) gid=1000(yin)=1000(yin),7(lp),27(sudo),100(users),109(netdev),117(lpadmin),120(scanner),123(sambashare)

D. 用户和用户组管理

(1) user 用户

添加用户的方法:

  • useradd:创建用户名,未创建主目录和设置密码
  • adduser

    :创建用户名,同时创建目录并设置密码(常用)

删除用户的方法:

  • userdel:删除用户名
  • userdel -r userName:删除用户以及对应的主目录

adduser

$ useradd –d  /home/sam -m sam	## 创建了一个用户sam,其中-d和-m选项用来为登录名sam产生一个主目录 /home/sam;  /home为默认的用户主目录所在的父目录
$ userdel -r sam		## 删除用户asm,同时删除对应的主目录

adduser

$ adduser sam		## 创建用户,设置密码,同时创建主目录

用户组管理可参照 doc

su

$ su userName       ## 切换用户,登录 userName
$ cd ~              ## 进入userName 的主目录

sudo

$ sudo su           ## 切换到超级管理员
$ su root           ## 切换到超级管理员
$ sudo command1     ## 使用管理员权限执行命令 command1

(2) group 用户组

$ addgroup group1              ## 添加用户组 group1

$ groupmod -g 111 group1       ## 将组 group1 的组标识号修改为111
$ groupmod -n group01 group1   ## 将组 group1 的名称改为 group01

$ gpasswd -a user1 group1      ## 将 user1 加入 group1
$ gpasswd -d user1 group1      ## 将 user1 移出 group1

$ delgroup group1              ## 删除用户组 group11

(3) 与用户账号有关的系统文件

与用户和用户组相关的信息都存放在一些系统文件中,这些文件包括 /etc/passwd, /etc/shadow, /etc/group

  • /etc/passwrd 对所有用户可读(默认隐藏),可以查看用户

    cat /etc/passwd
    root:x:0:0:root:/root:/bin/bash
    yin:x:1000:1000::/home/yin:/bin/bash
    Host:x:1001:1001::/home/Host:/bin/bash
    

    格式:用户名 : 口令 : 用户标识号 : 组标识号 : 注释性描述 : 主目录 : 登录Shell

    • 用户名:代表用户帐号的字符窜;
    • 口令:真正加密后的口令在 /etc/shadow 中,/etc/passwd/ 中仅存放一个特殊字符 * 或 x;
    • 注释性描述:用户的姓名、电话、住址等信息;
    • 主目录:用户登录系统后所处的目录,对自己的主目录有读写执行权限;
  • /etc/shadow 也有类似的内容


E. Linux 磁盘管理

Linux磁盘管理好坏直接关系到整个系统的性能问题,磁盘管理常用三个命令为df、du和fdisk。

  • df:列出文件系统的整体磁盘使用量
  • du:检查磁盘空间使用量
  • fdisk:用于磁盘分区

df (disk free)语法如下:

## df [-ahikHTm] [目录或文件名]
## -h :以人们较易阅读的 GBytes, MBytes, KBytes 等格式自行显示;

$ df      ## 将系统内所有的文件系统列出来
$ df -h   ## 将容量结果以易读的容量格式显示出来
文件系统        容量  已用  可用 已用% 挂载点
udev            3.8G     0  3.8G    0% /dev
tmpfs           776M  3.0M  773M    1% /run
/dev/sda9        67G   12G   52G   19% /
tmpfs           3.8G   93M  3.7G    3% /dev/shm
tmpfs           5.0M  4.0K  5.0M    1% /run/lock
tmpfs           3.8G     0  3.8G    0% /sys/fs/cgroup
/dev/sda1       256M   42M  215M   17% /boot/efi
tmpfs           776M   56K  776M    1% /run/user/1000
/dev/sda8       996M  539M  458M   55% /media/yin/LRS_ESP
/dev/sda5       108G   16G   92G   15% /media/yin/尹同学
/dev/sda4       175G   97G   78G   56% /media/yin/LENOVO
/dev/sda3       100G   86G   15G   86% /media/yin/Windows

$ df -h /etc	## 将 /etc 所在分区的可用的磁盘容量以易读的容量格式显示
文件系统         容量  已用  可用 已用% 挂载点
/dev/sda9       67G  12G  52G  19%    /

du (disk usage)

Linux du命令也是查看使用空间的,对文件目录磁盘使用的空间进行查看

du [-ahskm] 文件或目录名称

$ du			## 只列出当前目录下的所有文件夹容量(包括隐藏文件夹)

$ du -h test	## 以易读的容量格式显示目录test中的所有 文件夹 的容量
672K    test

$ du -ah test	## 以易读的容量格式显示目录test中的所有 文件及文件夹 的容量(可以列出文件)
4.0K    test/b.txt
4.0K    test/rx.md
656K    test/Linux_Note.pdf
4.0K    test/a.txt
672K    test

fdisk

fdisk 是 Linux 的磁盘分区表操作工具,语法如下:

$ fdisk [-l] 装置名称
$ fdisk -l		## 列出所有分区信息

Disk /dev/sda: 465.8 GiB, 500107862016 bytes, 976773168 sectors
Disk model: WDC WD5000LPCX-2
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disklabel type: gpt
Disk identifier: A00C89EE-990C-4830-9FBB-744156B01235

Device         Start       End   Sectors   Size Type
/dev/sda1       2048    534527    532480   260M EFI System
/dev/sda2     534528    567295     32768    16M Microsoft reserved
/dev/sda3     567296 210282495 209715200   100G Microsoft basic data
/dev/sda4  210282496 575735807 365453312 174.3G Microsoft basic data
/dev/sda5  719097856 944377855 225280000 107.4G Microsoft basic data
/dev/sda6  944379904 946427903   2048000  1000M Windows recovery environment
/dev/sda7  946427904 974725119  28297216  13.5G Windows recovery environment
/dev/sda8  974725120 976773119   2048000  1000M Lenovo boot partition
/dev/sda9  575735808 719097855 143362048  68.4G Linux filesystem

Partition table entries are not in disk order.

$ df /		## 查看根目录所在分区
文件系统          1K-块     已用     可用 已用% 挂载点        
/dev/sda9      70031584 12443556 53987596   19% /

$ fdisk /dev/sda	## 输入命令后接着输入 m 查看各种操作
Command (m for help): m		## 查看命令帮助
Command (m for help): q		## 离开不保存

mkfs

mkfs 命令可以实现磁盘分区格式化,语法为:

$ mkfs [-t 文件系统格式] 装置文件名

F. apt

apt(Advanced Packaging Tool)是一个在 Debian 和 Ubuntu 中的 Shell 前端软件包管理器;

apt 命令提供了查找、安装、升级、删除某一个、一组甚至全部软件包的命令,而且命令简洁而又好记;

apt 命令执行需要超级管理员权限 root

语法

$ apt [options] [command] [package ...]
  • options:可选选项包括 -h(帮助),-y(当安装过程提示选择全部为”yes”),-q(不显示安装的过程)等等;
  • command:要进行的操作;
  • package:安装的包名。

apt 常用命令

命令 功能
sudo apt update 列出所有可更新的软件清单命令
sudo apt upgrade 升级软件包
apt list –upgradeable 列出可更新的软件包及版本信息
sudo apt full-upgrade 升级软件包,升级前先删除需要更新软件包
sudo apt install 安装指定的软件命令(可以一次性安装多个包)
sudo apt update 更新指定的软件命令
sudo apt show 显示软件包具体信息,例如:版本号,安装大小,依赖关系等等
sudo apt remove 删除软件包命令
sudo apt autoremove 清理不再使用的依赖和库文件
apt list –all-versions 列出所有已安装的包的版本信息
apt list –installed 列出所有已安装的包
sudo apt search 查找相关的软件包
$ sudo apt update		## 查看可更新的包
$ sudo apt upgrade	## 升级安装包
$ sudo apt update && sudo apt upgrade -y	## 组合上面的命令,一键升级
$ sudo apt install mplayer				## 安装 mplayer
$ sudo apt install mplayer --no-upgrade	## 安装 mplayer,如果 mplayer 存在则不升级
$ sudo apt remove mplayer					## 移除包 mplayer
$ apt search libimobile					## 查找名为 libmobile 的包
$ apt show apache2						## 查看包 apache2 的相关信息
$ sudo apt autoremove						## 清理不再使用的依赖或库文件

注:如果忘记包名称,可以输入一部分名字,按下 Tab 后会出现相关选项!


G. Exercise

1. 验收练习

下面是在熟悉Linux命令后的一个验收小测验,建议先根据问题描述自己实践,再看参考答案!

问题描述

  • 创建用户 Tom 和 Aimer
  • 在 Tom 的家目录中创建文件夹 dir1 和 文件 file1
  • 设置 dir1 的权限,使得 dir1 允许 Tom 和 Aimer 读、写和执行

参考答案

$ sudo adduser Tom		## 创建用户
$ sudo adduser Aimer
$ su Tom					## 登录用户 Tom
$ cd ~					## 进入 Tom 家目录
$ mkdir dir1
$ touch file1
$ sudo addgroup group01			## 创建用户组 group01
$ sudo gpasswd -a Tom group01		## 添加用户到用户组
$ sudo gpasswd -a Aimer group01
$ sudo chgrp -R group01 dir1		## 将目录 dir1 的所属群组改为 group01
$ chmod g+r+x dir1				## 设置目录 dir1 对用户组的权限

2. 开启HTTP、FTP、SSH服务

(1) HTTP服务

  • 安装 apache2

    $ sudo apt instal apache2
    

    安装完成后会得到一个路径:/var/www/html

  • 在上述默认路径 /var/www/html 中新建一个 test.html 文件

  • 打开手机热点,与客户端连接到同一个局域网,客户端使用 chrome 访问我的 ip/test.html

    192.168.2.3/test.html
    

(2) FTP服务

  • ftp是文件传输协议,首先安装 vsftpd

    $ sudo apt install vsftpd
    
  • 接着在同一局域网下,另一台主机可连接我的主机:

    $ sftp root@192.168.2.3			## 我的用户名是root ip是 192.168.2.3
    
  • 接着进行文件传输

    ## 本地命令  lcd	 lls
    ## 服务端命令  cd ls
    $ sftp> put /home/yin/Desktop/a.txt /var/www/doc/		## 上传本地的 a.txt 到服务器的 /var/www/doc/目录
    $ sftp> get /var/www/doc/b.txt /home/yin/Desktop/		## 下载服务端的 b.txt 到我的桌面
    

(3) SSH

客户端: ssh client

服务端: ssh server

  • 服务端安装 openssh-server

    $ sudo apt-get install openssh-server
    
  • 若服务器 ip 192.168.2.3,ssh 服务端口为 22,服务器上有个用户为 root,用 ssh 登录服务器:

    $ ssh root@192.168.2.3
    

「参考内容」

-->