1、概念

Linux 是一款免费、开源、跨平台的操作系统。

Linux 是内核,并不是完整的操作系统,只有搭配上桌面、软件、工具才能成为Linux发行版本,如Ubuntu、centOS等等。

  • 管硬件:硬盘、网卡、CPU、内存

  • 管程序:哪个程序能跑、优先级多少

  • 管权限:谁能读文件、谁不能改系统

  • 管资源:分给每个软件多少内存、算力

2、Ubuntu安装

本实例在windows中的docker desktop中安装Ubuntu系统。

1、在docker desktop中拉取ubuntu系统镜像。

image-AJHq-iQNB.png

2、在docker desktop的命令行中执行

docker run -itd -p 0.0.0.0:10022:22 --name JTUbuntu ubuntu:latest /bin/bash

docker run -itd -p IP地址:外部端口:内部端口 --name 容器名字 镜像:标签 /bin/bash
 
注:
    外部端口是指Windows操作系统中的端口
    内部端口是指容器中的Ubuntu操作系统的端口
    这里是一个例子:
    docker run -itd -p 0.0.0.0:10000:22 --name myubuntu ubuntu:22.04 /bin/bash
    其中:
        0.0.0.0表示本地所有的Ip
        这里把windows系统中的10000端口映射到了ubuntu的22端口(ssh需要使用22端口)

3、打开终端进入ubuntu系统

4、基础应用服务安装

4.1、更新 apt ,apt是软件安装/卸载工具

apt update

4.2、安装 ssh 服务

apt install openssh-server

4.3、安装 vim 服务

apt install vim

4.4、编辑 ssh 配置文件

cd /etc/ssh
vim sshd_config

修改如下配置

PermitRootLogin yes #允许root使用ssh登录
 
PubkeyAuthentication yes #启用公钥私钥配对认证方式
 
AuthorizedKeysFile .ssh/authorized_keys # AuthorizedKeysFile项已包含在配置文件,这里只需要取消注释即可,此处的路径“.ssh/authorized_keys”以本地文件为准
 
UsePAM no #不适用PAM

4.5、启动ssh服务并查看服务状态

service ssh start
service ssh status

4.6、设置 root 密码

passwd

4.7、用 xshell 连接

3、Linux 文件目录结构

以 Ubuntu 为例

⭐: 这部分是 Linux 系统的「骨架」,存放最核心的命令、内核、库文件,保证系统能正常启动和运行。
❤️: 这部分目录完全存在内存中,不是真实保存在容器镜像 / 硬盘里的文件,是 Linux 内核和程序、硬件的实时交互接口,关机 / 重启容器后内容会完全清空。
💕: 全称 Editable Text Configuration,系统和所有软件的配置文件全存在这里,相当于 Windows 的注册表 + 系统配置中心。
👌: 用户根目录(个人数据存放地)
🔵: 扩展 / 挂载 / 服务数据目录
🔶: 可变数据目录(日志、缓存、动态数据)
🔺: Docker 容器专属特殊文件 / 目录
root@b78afcc69776:/# ll                                             
total 76
drwxr-xr-x   1 root root 4096 May  8 04:12 ./
drwxr-xr-x   1 root root 4096 May  8 04:12 ../
-rwxr-xr-x   1 root root    0 May  8 04:12 .dockerenv*
🔺 Docker 容器的专属标记文件,作用是标识当前环境是 Docker 容器,很多脚本会通过这个文件判断是否在容器内运行,就是个空标记文件,不用修改。
drwxr-xr-x   2 root root 4096 Apr 21 17:23 .rock/
🔺 Ubuntu 新版镜像自带的目录,和 Ubuntu 的新包格式相关,普通用户完全不用管,不影响任何操作。
    
lrwxrwxrwx   1 root root    7 Apr 20 08:46 bin@ -> usr/bin  
⭐ 链接到/usr/bin目录,存放所有用户使用的核心命令的二进制文件,例如:ll、ls、cd、cp 等等      
    
drwxr-xr-x   2 root root 4096 Apr 20 08:46 boot/    
⭐ 存放系统启动相关文件(Linux内核、启动引导程序)              
    
drwxr-xr-x   5 root root  360 May  8 04:12 dev/
❤️ device,设备目录,Linux 里所有硬件都以文件形式存在这里,常用的:
- /dev/null:「黑洞文件」,丢进去的内容会直接消失
- /dev/zero:无限生成空数据
- /dev/random:随机数生成器

drwxr-xr-x   1 root root 4096 May  8 06:46 etc/
💕 全称 Editable Text Configuration,系统和所有软件的配置文件全存在这里,相当于 Windows 的注册表 + 系统配置中心。
- /etc/apt:apt 包管理器的配置,包括软件源文件/etc/apt/sources.list(换国内源必改)
- /etc/ssh:SSH 服务的配置目录,远程登录的配置文件sshd_config就在这里(你开 22 端口远程连接必改)
- /etc/passwd:系统用户账户信息
- /etc/shadow:用户密码加密存储文件
- /etc/hosts:主机名和 IP 的映射关系(绑定域名解析必改)
- /etc/profile /etc/bash.bashrc:系统全局的环境变量、Shell 终端配置
- 你用 apt 装的任何软件,配置文件默认都会生成在/etc下,改配置 90% 都是操作这个目录。

drwxr-xr-x   3 root root 4096 Apr 21 17:23 home/
👌 普通用户的根目录,每创建一个普通用户,就会在/home下生成一个同名文件夹(比如创建test用户,对应/home/test),普通用户只能操作自己家目录里的内容。
    
lrwxrwxrwx   1 root root    7 Apr 20 08:46 lib@ -> usr/lib
lrwxrwxrwx   1 root root    9 Apr 20 08:46 lib64@ -> usr/lib64    
⭐ 链接到/usr/lib,/usr/lib64目录,存放系统程序运行必须的共享库文件 + 内核模块, 系统安装的软件、执行的命令,多依赖这里的库文件。

drwxr-xr-x   2 root root 4096 Apr 21 02:05 media/
🔵 可移动媒体自动挂载目录。系统自动挂载 U 盘、光盘、移动硬盘等可移动设备,Docker 容器里基本用不到,默认是空的

drwxr-xr-x   2 root root 4096 Apr 21 02:05 mnt/
🔵 mount,临时挂载目录。系统管理员用来临时挂载硬盘、U 盘、网络共享、宿主机目录。Docker 里如果你要临时挂载宿主机的文件夹,优先挂在这里

drwxr-xr-x   2 root root 4096 Apr 21 02:05 opt/
🔵 optional,可选软件目录。用来放第三方大型软件、手动解压的绿色软件,比如商业软件、离线安装包。现在 apt 安装的软件都存在/usr,这个目录用的不多

dr-xr-xr-x 282 root root    0 May  8 04:12 proc/
❤️ process,进程文件系统,内核与程序的实时接口,核心内容:
- 每个数字命名的文件夹,对应容器内一个运行的进程 PID,存放进程的全部信息
- /proc/cpuinfo:CPU 信息
- /proc/meminfo:内存信息
- /proc/version:内核版本
- 你cat这里的文件,是实时从内核读取数据,容器重启就清空。

drwx------   1 root root 4096 May  8 06:46 root/
👌 root 超级管理员的专属目录, root@b78afcc69776:/#,:/#代表你在根目录,输入cd ~就能直接进入/root目录

drwxr-xr-x   1 root root 4096 May  8 06:45 run/
❤️ 存放系统启动后运行程序的实时数据(PID 文件、socket 文件),比如你装了openssh-server,sshd 服务的 PID、运行套接字就存在这里,容器重启清空
    
lrwxrwxrwx   1 root root    8 Apr 20 08:46 sbin@ -> usr/sbin      
⭐ 链接到/usr/sbin目录,存放root管理员专用的系统级管理命令,例如:reboot、shutdown、iptables、sshd 等等。 

drwxr-xr-x   2 root root 4096 Apr 21 02:05 srv/
🔵 service,服务数据目录。存放系统对外提供服务的数据,比如 nginx 的网站文件、ftp 的共享文件、web 项目代码,是规范的服务数据存放路径

dr-xr-xr-x  13 root root    0 May  8 06:39 sys/
❤️ system,和/proc类似的虚拟文件系统,存放内核、硬件、驱动的规范信息,比/proc结构更规整,主要是内核、驱动使用,普通用户几乎不用修改

drwxrwxrwt   1 root root 4096 May  8 04:19 tmp/
❤️ temporary,临时文件目录,所有用户都可读写,用来放临时文件,系统会自动清理长期不用的内容,重启容器直接清空。你看到的drwxrwxrwt最后的t是「粘滞位」:只有文件的所有者才能删除自己的文件,防止别人乱删
    
drwxr-xr-x   1 root root 4096 Apr 21 17:23 usr/                    
⭐ 系统软件资源目录,相当于Windows的 C:\Program Files,系统预装软件、apt 安装的软件,全存在这里。其中:- /usr/local:你自己编译 / 手动安装的软件默认存放路径;- /usr/bin /usr/sbin:上面说的核心命令存放地;- /usr/share:软件的帮助文档、配置模板等。

drwxr-xr-x   1 root root 4096 Apr 21 17:23 var/
🔶 全称 variable,存放系统运行过程中持续变化、不断增长的文件,核心子目录:
- /var/log:系统和所有软件的日志文件存放地,排查问题必看!比如系统日志/var/log/syslog、SSH 登录日志、nginx 访问 / 错误日志全在这里
- /var/lib:软件运行的动态数据,比如 apt 的包缓存、mysql 的数据库文件
- /var/cache:软件的缓存文件
- /var/spool:队列数据,比如邮件、打印任务

4、Linux 命令

4.1、常用指令

常用指令

ls          显示文件或目录
     -l           列出文件详细信息l(list)
     -a          列出当前目录下所有文件及目录,包括隐藏的a(all)
mkdir         创建目录
     -p           创建目录,若无父目录,则创建p(parent)
cd               切换目录
touch          创建空文件
echo            创建带有内容的文件。
cat              查看文件内容
cp                拷贝
mv               移动或重命名
rm               删除文件
     -r            递归删除,可删除子目录及文件
     -f            强制删除
find              在文件系统中搜索某文件
wc                统计文本中行数、字数、字符数
grep             在文本文件中查找某个字符串
rmdir           删除空目录
tree             树形结构显示目录,需要安装tree包
pwd              显示当前目录
ln                  创建链接文件
more、less  分页显示文本文件内容
head、tail    显示文件头、尾内容
ctrl+alt+F1  命令行全屏模式

系统管理命令

stat              显示指定文件的详细信息,比ls更详细

who               显示在线登陆用户

whoami          显示当前操作用户

hostname      显示主机名

uname           显示系统信息

top                动态显示当前耗费资源最多进程信息

ps                  显示瞬间进程状态 ps -aux

du                  查看目录大小 du -h /home带有单位显示目录信息

df                  查看磁盘大小 df -h 带有单位显示磁盘信息

ifconfig          查看网络情况

ping                测试网络连通

netstat          显示网络状态信息

man                命令不会用了,找男人  如:man ls

clear              清屏

alias               对命令重命名 如:alias showmeit="ps -aux" ,另外解除使用unaliax showmeit

kill                 杀死进程,可以先用ps 或 top命令查看进程的id,然后再用kill命令杀死进程。

转载请注明出处:https://man.niaoge.com/

打包压缩相关命令

gzip:

bzip2:

tar:                打包压缩

     -c              归档文件

     -x              压缩文件

     -z              gzip压缩文件

     -j              bzip2压缩文件

     -v              显示压缩或解压缩过程 v(view)

     -f              使用档名

例:

tar -cvf /home/abc.tar /home/abc              只打包,不压缩

tar -zcvf /home/abc.tar.gz /home/abc        打包,并用gzip压缩

tar -jcvf /home/abc.tar.bz2 /home/abc      打包,并用bzip2压缩

当然,如果想解压缩,就直接替换上面的命令  tar -cvf  / tar -zcvf  / tar -jcvf 中的“c” 换成“x” 就可以了。

转载请注明出处:https://man.niaoge.com/

关机/重启机器

shutdown

     -r             关机重启

     -h             关机不重启

     now          立刻关机

halt               关机

reboot          重启

转载请注明出处:https://man.niaoge.com/

Linux管道

将一个命令的标准输出作为另一个命令的标准输入。也就是把几个命令组合起来使用,后一个命令除以前一个命令的结果。

例:grep -r "close" /home/* | more       在home目录下所有文件中查找,包括close的文件,并分页输出。

转载请注明出处:https://man.niaoge.com/

Linux软件包管理

dpkg (Debian Package)管理工具,软件包名以.deb后缀。这种方法适合系统不能联网的情况下。

比如安装tree命令的安装包,先将tree.deb传到Linux系统中。再使用如下命令安装。

sudo dpkg -i tree_1.5.3-1_i386.deb         安装软件

sudo dpkg -r tree                                     卸载软件

 

注:将tree.deb传到Linux系统中,有多种方式。VMwareTool,使用挂载方式;使用winSCP工具等;

APT(Advanced Packaging Tool)高级软件工具。这种方法适合系统能够连接互联网的情况。

依然以tree为例

sudo apt-get install tree                         安装tree

sudo apt-get remove tree                       卸载tree

sudo apt-get update                                 更新软件

sudo apt-get upgrade        

 

将.rpm文件转为.deb文件

.rpm为RedHat使用的软件格式。在Ubuntu下不能直接使用,所以需要转换一下。

sudo alien abc.rpm

转载请注明出处:https://man.niaoge.com/

vim使用

vim三种模式:命令模式、插入模式、编辑模式。使用ESC或i或:来切换模式。

命令模式下:

:q                      退出

:q!                     强制退出

:wq                   保存并退出

:set number     显示行号

:set nonumber  隐藏行号

/apache            在文档中查找apache 按n跳到下一个,shift+n上一个

yyp                   复制光标所在行,并粘贴

h(左移一个字符←)、j(下一行↓)、k(上一行↑)、l(右移一个字符→)

转载请注明出处:https://man.niaoge.com/

用户及用户组管理

/etc/passwd    存储用户账号
/etc/group       存储组账号
/etc/shadow    存储用户账号的密码
/etc/gshadow  存储用户组账号的密码
useradd 用户名
userdel 用户名
adduser 用户名
groupadd 组名
groupdel 组名
passwd root     给root设置密码
su root
su - root 
/etc/profile     系统环境变量
bash_profile     用户环境变量
.bashrc              用户环境变量
su user              切换用户,加载配置文件.bashrc
su - user            切换用户,加载配置文件/etc/profile ,加载bash_profile
更改文件的用户及用户组
sudo chown [-R] owner[:group] {File|Directory}
例如:还以jdk-7u21-linux-i586.tar.gz为例。属于用户hadoop,组hadoop
要想切换此文件所属的用户及组。可以使用命令。
sudo chown root:root jdk-7u21-linux-i586.tar.gz

文件权限管理

三种基本权限

R           读         数值表示为4

W          写         数值表示为2

X           可执行  数值表示为1

如,jdk-7u21-linux-i586.tar.gz文件的权限为-rw-rw-r--

-rw-rw-r--一共十个字符,分成四段。

第一个字符“-”表示普通文件;这个位置还可能会出现“l”链接;“d”表示目录

第二三四个字符“rw-”表示当前所属用户的权限。   所以用数值表示为4+2=6

第五六七个字符“rw-”表示当前所属组的权限。      所以用数值表示为4+2=6

第八九十个字符“r--”表示其他用户权限。              所以用数值表示为2

所以操作此文件的权限用数值表示为662 

更改权限

sudo chmod [u所属用户  g所属组  o其他用户  a所有用户]  [+增加权限  -减少权限]  [r  w  x]   目录名 

例如:有一个文件filename,权限为“-rw-r----x” ,将权限值改为"-rwxrw-r-x",用数值表示为765

sudo chmod u+x g+w o+r  filename

上面的例子可以用数值表示

sudo chmod 765 filename

转载请注明出处:https://man.niaoge.com/

END、参考

1、docker desktop安装ubuntu:Docker Desktop 安装 Ubuntu 并允许远程访问_docker desktop ubuntu-CSDN博客

2、Linux目录结构详解: https://www.doubao.com/thread/wcf75c719fc3c0408

3、Linux 指令: 鸟哥Linux命令大全(手册)_Linux常用命令行实例详解_Linux命令学习手册