在Windows系统上使用WSL和Docker
在Windows系统上使用WSL和Docker
Windows的Linux子系统(WSL)
Windows 的 Linux 子系统(Windows Subsystem for Linux,简称 WSL)是一种 Windows 10 操作系统的特性,它允许用户在 Windows 系统中运行 Linux 应用程序。WSL 实际上是一个兼容层,可以在 Windows 系统上运行 Linux 应用程序,包括命令行工具、脚本和应用程序。WSL 提供了一个 Linux 内核 API 的实现,这个实现可以在 Windows 中运行 Linux 应用程序而无需虚拟化或模拟 Linux 环境。WSL 支持多个 Linux 发行版,包括 Ubuntu、SUSE、Debian 等,用户可以从 Microsoft Store 中下载并安装所需的 Linux 发行版。
WSL 有许多优点,例如:
- 可以在 Windows 系统中运行 Linux 应用程序,无需双重启动或切换操作系统。
- 可以访问 Windows 文件系统,包括文件和目录。
- 可以与 Windows 应用程序集成,例如可以在 Windows 命令行中运行 Linux 命令。
- 可以使用 Windows 的网络和安全特性,例如可以使用 Windows 防火墙和代理服务器。
总的来说,WSL 是一种非常有用的工具,可以让开发者在 Windows 系统中运行 Linux 应用程序,提高开发效率和工作效率。
WSL安装教程
要安装 Windows 的 Linux 子系统(WSL),需要满足以下条件:
-
Windows 10 版本 1607 或更高版本。
-
64 位版本的 Windows 10。
-
启用了 Windows 的虚拟化功能(Virtualization),例如 Hyper-V 或 Windows 虚拟机平台。
Hyper-V需要在BISO中设置
如何查看是否开启虚拟化功能:
- 选择 “开始”,输入 Windows 功能,然后从结果列表中选择**“打开或关闭 Windows 功能** ”。
- 在刚刚打开的 Windows 功能窗口中,找到虚拟机平台。如果有说明启动成功。
如果您的系统满足上述条件,可以按照以下步骤安装 WSL:
- 打开 Windows 的设置(Settings)应用程序,选择“应用程序和功能”(Apps & features)选项卡,然后点击“相关设置”(Related settings)下的“程序和功能”(Programs and Features)链接。
- 在“程序和功能”窗口中,选择左侧的“启用或关闭 Windows 功能”(Turn Windows features on or off)选项。
- 在弹出的“Windows 功能”窗口中,找到“适用于 Linux 的 Windows 子系统”(Windows Subsystem for Linux)并选中它,然后点击“确定”(OK)按钮。
- 等待 Windows 下载和安装 WSL 组件,可能需要一些时间。完成后,重新启动计算机。
- 打开 Microsoft Store 应用程序,搜索所需的 Linux 发行版名称(例如 Ubuntu、Debian、SUSE 等),然后下载并安装所需的发行版。
- 打开已安装的 Linux 发行版应用程序,等待一些时间进行初始化,然后根据提示配置用户名和密码即可开始使用 WSL。
注意:WSL 仅支持命令行界面,不支持图形用户界面(GUI)。如果需要运行 GUI 应用程序,可以考虑使用 X Window 服务器软件,例如 VcXsrv 或 Xming。
查看WSL及更新WSL:
打开命令行窗口(
Win+R
,输入cmd):
- wsl
- wsl --update
- wsl --version
- wsl --help
cmd中的内容如下:
Microsoft Windows [版本 10.0.22623.1245] (c) Microsoft Corporation。保留所有权利。 C:\Users\you shu>wsl 适用于 Linux 的 Windows 子系统没有已安装的分发版。 可以通过访问 Microsoft Store 来安装分发版: https://aka.ms/wslstore C:\Users\you shu>wsl --update 正在安装: 适用于 Linux 的 Windows 子系统 [=================== 34.0% ] C:\Users\you shu>wsl --version WSL version: 1.1.3.0 Kernel version: 5.15.90.1 WSLg version: 1.0.49 MSRDC version: 1.2.3770 Direct3D version: 1.608.2-61064218 DXCore version: 10.0.25131.1002-220531-1700.rs-onecore-base2-hyp Windows version: 10.0.22623.1245
在WSL上运行Linux GUI应用
使用 WSL 运行 Linux GUI 应用 | Microsoft Learn
Linux GUI 应用仅受 WSL 2 支持,并且不能用于为 WSL 1 配置的 Linux 发行版。
WSL 上的 GUI 应用支持不提供完整的桌面体验。 它依赖于 Windows 桌面,因此可能不支持安装以桌面为中心的工具或应用。
如果已在计算机上安装 WSL,可通过从提升的命令提示符运行更新命令来更新到包含 Linux GUI 支持的最新版本。
-
选择“开始”,键入 PowerShell,右键单击“Windows PowerShell”,然后选择“以管理员身份运行”。
-
输入 WSL 更新命令:
wsl --update
-
需要重启 WSL,更新才能生效。 可通过在 PowerShell 中运行关闭命令来重启 WSL。
wsl --shutdown
-
打开WSL更新发行版中的包
sudo apt update
-
安装Gedit
Gedit 是 GNOME 桌面环境的默认文本编辑器。
sudo apt install gedit -y
若要在编辑器中启动 bashrc 文件,请输入:
gedit ~/.bashrc
-
安装Nautilus
Nautilus 也称为 GNOME Files,是 GNOME 桌面的文件管理器。 (类似于 Windows 文件资源管理器,这个可以不需要安装,因为从windows的资源管理器中可以看到Linux的文件系统,在资源管理器的右下角)。
sudo apt install nautilus -y
若要启动,请输入:
nautilus
-
安装google-chrome浏览器
-
安装图形界面 (没写完,弄到一半就不会弄了)
-
安装VcXsrv
连接WSL显示桌面需要用到X Server Windows软件,使用VcXsrv
软件链接:https://sourceforge.net/projects/vcxsrv/安装就一直一路next
最好安装到非系统盘。
-
启动XLaunch(VcXsrv)
在开始菜单搜索
XLauch
,启动。保存配置以供以后使用,下一次就直接点config文件进入不需要在重新设置一遍,点击进入后应该是黑屏如下:
-
gnome图形界面的配置
WSL 不支持 systemd 而 Gnome 桌面又是基于 systemd,所以先解决这个问题
sudo apt update
sudo apt install git
git clone https://github.com/DamionGans/ubuntu-wsl2-systemd-script.git
cd ubuntu-wsl2-systemd-script/
bash ubuntu-wsl2-systemd-script.sh
安装完systemd之后,退回windows终端(直接叉掉这个终端就行),务必输入
wsl --shutdown
确认你wsl版本为wsl2
wsl -l -v
如果wsl version 为1那么需要先将版本转为2
wsl --set-version Ubuntu
重启ubuntu终端。输入
systemctl
确认systemctl能用,出来一堆log,失败的话会是
System has not been booted with systemd as init system (PID 1). Can't operate.
输入:q
退出。
接下来安装图形界面
sudo apt install ubuntu-desktop
安装完毕后,输入以下命令
sudo service dbus restart
Docker的使用
Docker 是一种开源的容器化平台,它可以让开发者将应用程序和其依赖项打包到一个可移植的容器中,以便在不同的环境中运行。Docker 容器可以在任何支持 Docker 的操作系统中运行,包括 Linux、Windows 和 macOS 等。Docker 容器是轻量级、可移植、自包含的应用程序运行环境,它们可以快速部署、升级和管理,同时保持应用程序的一致性和可靠性。
Docker 容器是通过 Docker 镜像创建的,Docker 镜像是一个只读的模板,包含了应用程序和其依赖项。使用 Docker 镜像可以快速创建容器,并在容器中运行应用程序。Docker 镜像可以从 Docker Hub 或自己创建,Docker Hub 是一个公共的 Docker 镜像仓库,包含了许多常用的应用程序和服务的预构建镜像。
Docker 还提供了一种简单、可重复的部署和管理方案,可以通过 Docker Compose 和 Docker Swarm 实现容器编排和集群管理。Docker Compose 是一个用于定义和运行多个 Docker 容器的工具,它可以通过一个 YAML 文件定义容器之间的关系和配置,然后一键启动或停止多个容器。Docker Swarm 是 Docker 容器集群的管理工具,它可以将多个 Docker 容器部署到多台主机上,并提供负载均衡、服务发现、自动扩展等功能。
总的来说,Docker 是一种非常流行的容器化平台,可以帮助开发者快速构建、交付和运行应用程序,提高开发效率和应用程序的可移植性。
Docker的安装
要安装 Docker,可以按照以下步骤进行:
- 首先需要确认您的操作系统是否支持 Docker。Docker 支持的操作系统包括:Windows 10(64 位)、macOS 10.13 及更高版本、Ubuntu、Debian、CentOS、Fedora 等 Linux 发行版。同时,您的计算机需要支持虚拟化技术(例如 Intel VT-x 或 AMD-V)。
- 在 Windows 或 macOS 上,可以直接从 Docker 官方网站下载并安装 Docker Desktop。在 Linux 上,需要根据不同的发行版选择对应的安装方式。可以参考官方文档进行安装。
- 安装完成后,打开终端或命令行界面,输入
docker version
命令,检查 Docker 是否正确安装并运行。如果能够看到 Docker 版本信息,则说明 Docker 安装成功。 - 如果需要使用 Docker 镜像,可以从 Docker Hub 上获取或自己创建。可以使用
docker pull
命令从 Docker Hub 上下载镜像,例如docker pull ubuntu
可以下载 Ubuntu 镜像。如果需要创建自己的 Docker 镜像,可以编写 Dockerfile 文件,然后使用docker build
命令构建镜像。 - 如果需要运行 Docker 容器,可以使用
docker run
命令。例如,docker run -it ubuntu bash
可以启动一个名为 ubuntu 的容器,并在容器中运行一个名为 bash 的命令行 shell。在容器中运行命令后,可以使用exit
命令退出容器。
总的来说,Docker 安装和使用相对较简单,需要一定的命令行基础和 Dockerfile 编写能力。可以通过阅读官方文档和参考其他资料来学习和使用 Docker。
Docker设置镜像源的方法:
Docker 的镜像源包括 Docker 官方镜像仓库 Docker Hub,以及一些国内的 Docker 镜像源,例如阿里云、华为云、腾讯云等。其中 Docker Hub 是最常用的 Docker 镜像仓库,包含了大量的公共镜像,可以通过 Docker 命令行工具直接下载和使用。而国内的 Docker 镜像源则可以提供更快的下载速度和更稳定的服务,适合在国内使用 Docker 的用户使用。
如果需要使用国内的 Docker 镜像源,可以按照以下步骤进行:
登录 Docker官方网站,创建自己的 Docker 账号。
访问国内的 Docker 镜像源官网,例如阿里云的 Docker 镜像服务或者腾讯云的 Docker 镜像服务。
在 Docker 镜像源官网中,创建自己的镜像仓库,可以选择公有仓库或私有仓库。
在 Docker 客户端中,运行
docker login
命令,输入自己的 Docker 账号和密码,登录 Docker 镜像源。修改 Docker 客户端的配置文件,将默认的 Docker Hub 镜像源替换为国内的 Docker 镜像源。可以通过编辑
/etc/docker/daemon.json
文件来进行修改,将其中的registry-mirrors
字段设置为国内镜像源的地址,例如:{ "registry-mirrors": ["https://registry.docker-cn.com"] }
这里以 Docker-CN 镜像源为例,其他镜像源的地址可以在官方网站中查找。
cmd输入
docker info
,查看docker的配置信息。可以看到配置好的镜像源。
- 修改完成后,重新启动 Docker 客户端,就可以使用国内的 Docker 镜像源了。
总的来说,使用国内的 Docker 镜像源可以提高 Docker 镜像的下载速度和稳定性,提高 Docker 的使用效率。可以根据自己的需求选择合适的 Docker 镜像源,并按照上述步骤进行设置。
Docker创建Linux容器
Docker 不是一种虚拟化技术,它提供了一个容器化的解决方案,可以在容器中运行各种应用程序。因此,Docker 不支持直接安装 Linux 系统。但是,可以使用 Docker 镜像来创建一个包含 Linux 系统的 Docker 容器,从而运行 Linux 系统。
以下是在 Docker 中创建 Linux 容器的步骤:
-
首先,在您的计算机上安装 Docker 工具。可以参考上面的安装步骤进行安装。
-
在 Docker Hub 上搜索并下载一个包含 Linux 系统的镜像。例如,可以下载 Ubuntu 镜像,命令为:
docker pull ubuntu
这会从 Docker Hub 上下载最新的 Ubuntu 镜像。
-
在 Docker 中创建一个新的容器,命令如下:
docker run -it ubuntu /bin/bash
这会创建一个交互式的 Ubuntu 容器,并在容器中启动一个 Bash 终端。可以在容器中运行各种 Linux 命令,就像在本地计算机上一样。
在实际操作中常常使用docker run --rm -it ubuntu /bin/bash
执行 docker run 命令带 –rm命令选项,等价于在容器退出后,执行 docker rm -v。
-
如果需要退出容器并停止它,可以使用
exit
命令退出容器,或者使用docker stop
命令停止容器,例如:docker stop <container_id>
其中
<container_id>
是容器的 ID。可以使用docker ps -a
命令查看当前正在运行的容器。
总的来说,Docker 提供了一种轻量级的容器化解决方案,可以在容器中运行 Linux 系统和各种应用程序,而不需要安装和配置整个操作系统。可以根据自己的需求选择合适的镜像,并按照上述步骤进行操作。
输入指令报错的原因:可能是docker服务未开启,启动Docker Desktop应用。
参考&其他
docker教程:https://www.runoob.com/docker/
WSL怎么更新
WSL(Windows Subsystem for Linux)可以通过两种方式进行更新:手动更新和自动更新。
手动更新:
- 打开 Microsoft Store 应用,并搜索 Linux 发行版,例如 Ubuntu。
- 如果有更新可用,会显示更新按钮。点击更新按钮,等待更新完成。
- 更新完成后,打开 WSL 发行版,运行
sudo apt update
和sudo apt upgrade
命令来更新 Linux 系统和应用程序。
自动更新: - 打开 PowerShell 终端,并以管理员身份运行。
- 运行以下命令来启用 WSL 自动更新:
这会将 WSL 自动更新设置为自动下载和安装更新,并在更新完成后自动重启 WSL。reg add HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\WSL\AutoUpdate /v AUOptions /t REG_DWORD /d 5 /f
- 如果需要禁用自动更新,可以运行以下命令:
这会将 WSL 自动更新设置为禁用自动更新。reg add HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\WSL\AutoUpdate /v AUOptions /t REG_DWORD /d 1 /f
总的来说,WSL 可以通过手动更新和自动更新来更新,可以根据自己的需求选择合适的方式进行更新。
su: Authentication failure问题
su命令不能切换root,提示su: Authentication failure,只要你sudo passwd root过一次之后,下次再su的时候只要输入密码就可以成功登录了。
docker常用指令
以下是常见的 Docker 指令:
镜像相关
docker images
:列出当前系统中所有的镜像。docker search [image name]
:在 Docker Hub 中搜索指定名称的镜像。docker pull [image name]
:从 Docker Hub 上拉取指定名称的镜像。docker push [image name]
:将本地的镜像上传到 Docker Hub。docker rmi [image name]
:删除指定名称的镜像。
容器相关
docker run [image name]
:使用指定镜像创建并启动一个容器。docker ps
:列出当前系统中所有正在运行的容器。docker ps -a
:列出当前系统中所有容器,包括已经停止的容器。docker start [container id]
:启动指定 ID 的容器。docker stop [container id]
:停止指定 ID 的容器。docker restart [container id]
:重启指定 ID 的容器。docker rm [container id]
:删除指定 ID 的容器。docker exec [container id] [command]
:在指定的容器中执行指定的命令。docker logs [container id]
:查看指定容器的日志信息。
网络相关
docker network ls
:列出当前系统中所有的网络。docker network create [network name]
:创建一个新的网络。docker network connect [network name] [container id]
:将指定的容器连接到指定的网络。docker network disconnect [network name] [container id]
:将指定的容器从指定的网络中断开连接。
数据卷相关
docker volume ls
:列出当前系统中所有的数据卷。docker volume create [volume name]
:创建一个新的数据卷。docker volume rm [volume name]
:删除指定名称的数据卷。
其他常见指令
docker info
:查看 Docker 的系统信息。docker version
:查看 Docker 的版本信息。docker build [path to Dockerfile]
:使用指定的 Dockerfile 构建一个新的镜像。docker-compose up
:使用 Docker Compose 启动应用程序。docker-compose down
:使用 Docker Compose 停止并删除应用程序。
Linux命令大全
Linux 命令大全 | 菜鸟教程 (runoob.com);用浏览器打开,Ctrl
+F
,搜索要查询的指令。
以下是 Linux 常用命令大全:
文件和目录操作命令:
-
ls:列出文件和目录
ls -F # -F表示区分文件和目录(文件后加(*)) ls -a #-a显示隐藏文件 ls -F -R # -R递归当前目录所包含的子目录的文件 ls -l # 显示文件或目录的详细信息 # 过滤输出列表 ls -l test.html # 输出test.html的详细信息 ls -l tes* # 匹配0格或多格字符,输出符合tes...格式的文件或目录信息 ls -l t?est.html #匹配单个字符,输出符合t?est.html格式的文件信息 ls -l t[!a]est.html # 将不需要的字符排除在外,匹配
-
ln:为某一个文件在另外一个位置建立一个同步的链接(相当于windows中的快捷方式)
# 链接文件 # 符号链接 ln -s manpath.config slink_manpath.config ln -s Documents link_Doc # Documents为文件夹;没加后缀的不一定是文件夹可能是文件 # 硬链接 ln manpath.config slink_manpath.config
-
cd:切换目录
cd [dirName] # 其中 dirName 表示法可为绝对路径或相对路径。若目录名称省略,则变换至使用者的 home 目录 (也就是刚 login 时所在的目录)。另外,~ 也表示为 home 目录 的意思, . 则是表示目前所在的目录, .. 则表示目前目录位置的上一层目录。 cd ~ cd / cd /usr/bin cd ../.. cd ~/Dir cd NewDir # 不是所有的路径前加/ ,/代表的是根目录
-
pwd:显示当前目录
-
mkdir:创建目录
# 创建文件夹 mkdir New_Dir # 创建目录(包括子目录) mkdir -p New_Dir2/SubDir/UnderDir
-
rm:删除文件或目录
## 删除文件夹 rm -rf /root/logs/game # 强制递归向下删除,r:递归;f:强制(删除game文件夹) rm -rf /root # 删除root目录,包括所有子目录 rm -ri /root/logs/game # -i 询问是否删除 ## 删除文件 rm -f /root/logs/game/nohup.log # -f 强制删除 rm -i /root/logs/game/nohup.log # -i 询问是否删除
-
rmdir:删除空目录
rmdir New_Dir
-
touch:创建文件
touch file # 创建一个名为“file”的新的空白文件 touch file # file存在;修改文件的时间属性 ls -l file # 查看文件的时间属性
-
cp:复制文件或目录
cp -i test_one test_two # 复制test_one文件到test_two文件 # - i 表示存在test_two文件询问你是否要覆盖 cp -i test_one ~/Documents/ # 将test_one文件复制到用户目录下的Documents文件夹里 # 在Documents后一定要加/代表Documents为文件夹 cp /etc/manpath.config . # 把其他路径下的文件copy到当前目录下 后面有个“.”代表当前路径 #注:此路径在根目录下需要root权限否则会报错cp: cannot create regular file './manpath.config': Permission denied cp -R Documents NewDocuments # 复制Documents文件夹到NewDocuments(NewDocuments可以被创建出来) cp man* NewDocuments/ # 通过通配符筛选文件再复制
-
mv:移动或重命名文件或目录
mv Documents NNewDocuments # 将Documents文件夹重命名为NNewDocuments文件夹 mv manpath.config Newmanpath.config # 将manpath.config重命名为Newmanpath.config mv Newmanpath.config NewDocuments/NNewmanpath.config # 将Newmanpath.config移动到NewDocuments目录下并重命名 mv NewDocuments/NNewmanpath.config . # 将NewDocuments目录下的NNewmanpath.config文件移到当前目录
-
chmod:修改文件或目录的权限
文件内容和搜索、排序,压缩命令:
-
file:查看文件(夹)类型
file master.zip # 查看文件类型 Zip archive data file Documents # 查看文件夹 directory
-
cat:显示文件内容
cat test.html cat -n test.html # 给所有行加上行号 cat -b test.html # 给有文本的行加上行号
-
more:显示文本文件内容(分页程序)
more /etc/passwd
-
less:分页显示文件内容(q退出)
less /etc/passwd
-
head:显示文件头部内容(默认10行)
head /etc/passwd head -n 5 /etc/passwd head -5 /etc/passwd # 查看前5行内容
-
tail:显示文件尾部内容(默认10行)
tail /etc/passwd tail -n 5 /etc/passwd # 查看后5行内容 tail -f /etc/passwd # 会把 filename 文件里的最尾部的内容显示在屏幕上,并且不断刷新,只要 filename 更新就可以看到最新的文件内容。
-
sort:在文件中进行排序
sort test.html # 根据会话所指定的默认语言的排序规则来对文本文件中的数据进行排序 sort -n number.txt # 将文件中的数值按值排序(纯数值文件) sort -M month.txt # 识别三字符的月份名并正确排序(含时间戳日期的文件) sort -t ':' # 按指定字段分隔符排序 du -sh * | sort -nr # 将当前目录中的文件占用磁盘空间倒序排列 # -r 对数值按照降序排列
-
grep:在文件中搜索字符串
grep html test.html # 搜索test.html文件中含有html字符的行,并输出该行 grep -v html test.html # 反向搜索,即输出不含html的行 grep -n html test.html # 显示输出内容的所在行号+行内容 grep -c html test.html # 输出多少行含有匹配的模式 grep -e ht -e ml test.html # 指定多个匹配模式 grep [ht] test.html # 使用正则表达式
-
find:在目录中查找文件
-
gzip:数据压缩
gzip test.html # 压缩指定文件 ls -l test* gzip tes* # 指定多个文件名或用通配符 # 只能压缩单个文件
-
tar:数据归档
tar -cvf test.tar test/ test2/ # 创建一个名为test.tar的归档文件,包含目录test和test2的内容 tar -tf test.tar # 列出tar文件中的内容当不提取 tar -xvf test.tar # 提取内容,如果该路径下有tar文件中的目录结构,则在当前目录中重建该目录的整个结构 tar -zxvf filename.tgz # 提取其中的内容,经gzip压缩过的tar文件
系统管理命令:
-
ps:显示进程信息
# ps指令支持三种命令行风格 # Unix 选项前加单个连字符(-) # BSD 选项前不加连字符 # GUN 选项前加双连字符 ## Unix风格 ps -ef # 查看进程中的所有信息 # -e 置顶显示系统中运行的所有进程 # -f 扩充输出类容以显示一些有用的东西。 # -l 产生长格式输出 ## BSD风格 ps l # 长格式输出 ## GUN风格 ps --forest # 绘制图表以显示进程的层级信息 # https://blog.51cto.com/wangzhihao/1945713
-
top:实时显示系统进程和资源占用情况
top # 实时显示系统进程和资源占用情况 # 第一行显示当前时间、系统运行时长、登录用户数以及系统的平均负载 # 第二行显示进程的(task)概况:多少进程处于运行、休眠、停止以及僵化状态 # 第三行显示cpu概况 # 最后一部分显示当前处于运行状态的进程的详细列表 # 按q键退出top模式
-
kill:终止进程
## 根据使用进程的PID而终止运行。必须是进程的属主或root用户 kill 3940 # 终止运行PID为3940的进程 kill -s HUP 3940 # 强制挂起 # -s 选项支持指定其他信号(信号名或 信号值) # 上述指令可改写为 kill -s 1 3940 kill -l # 查看Linux进程信号 ## 根据程序名称代替PID来终止进程,允许通配符 pkill http* # “杀死”所有名称以http开头的进程 # 命令行的通配符很容易将系统的重要的进程终止。可能会导致文件系统损坏
-
mount:用于挂载存储设备(U盘,移动硬盘等)的命令
# 在使用新的存储设备时,需要将其放在虚拟目录中,这一过程叫挂载 # 命令格式 # mount -t type device directory mount -t vfat /dev/sdb1 /media/disk # 手动将U盘/dev/sdb1挂载到/media/disk
-
umont:卸载存储设备的命令
# 移除可移动设备时,不能直接将设备拔下,应该先卸载。 # 命令格式 # umount [directory|device] # 如果有程序正在使用该设备上的文件,则系统不允许卸载该设备 umount /home/rich/mnt
-
df:显示磁盘使用情况
df -t ext4 -t vfat # -t指定文件系统 # ext4是大部分Linux系统默认的文件系统 # vfat:WindowsFAT32文件系统(大多数U盘使用的格式) # ntfs:Windows NT及后续操作系统中广泛使用的高级文件系统 # exfat:专门为可移动设备优化的Windows文件系统 # iso9600:标准CD-ROM和DVD文件系统 df -h # 以人类易读的方式显示磁盘空间,M代替兆字节,G代表吉字节
-
du:查看目录或文件所占磁盘空间
du # 显示当前目录下所有文件、目录和子目录的磁盘使用情况 # Ctrl+Z 终止该命令 du -c # 显示所有已列出文件的总大小 du -h # 按人类易读的格式输出,k表千字节,M表兆字节,G表吉字节 du -s # 输出每个参数的汇总信息
-
free:显示内存使用情况
-
uname:显示系统信息
网络管理命令:
- ping:测试网络连通性(Ctrl+c结束)
- ifconfig:显示网络接口信息
- netstat:显示网络连接状态
- route:显示和设置路由表
- ssh:远程连接到另一台计算机
用户和权限管理命令:
-
useradd:添加用户
useradd -D # 查看所使用的Linux发行版的系统默认值,在命令行创建新用户时,如果不指定明确的值,会使用useradd -D中的默认值 ls -al /etc/skel # 显示用来存放新用户配置文件的目录 useradd -m test # 使用系统默认参数创建一个新用户 ls -al /home/test # 显示新用户的主目录 # -m 参数会使其创建$HOME目录,并将/etc/skel目录中的文件复制过来 # -c 给新用户添加备注 # -d 为主目录指定一个名字(如果不想用登录名作为主目录的话) # -e 用YYYY-MM-DD格式指定账号过期日期 # -f 指定过期多少天后禁用该用户,0表示一过期就禁用,-1表示不用这个处理 # -g 指定用户登录组的GID或组名 # -G group ... 指定用户除登录组之外所属的一个或多个附加组 # -k 必须和-m一起使用,将/etc/skel目录的内容复制到用户的HOME目录 # -m 创建用户的HOME目录 # -M 不创建用户的HOME目录(当默认设置里要求创建时才使用这个选项) # -n 创建一个与用户登录名同名的新组 # -r 创建系统账户 # -p passwd 为用户账户指定默认密码 # -s shell 指定默认的登录shell # -u uid 为账户指定唯一的UID #-r 创建系统账户 # -p passwd 为用户账户指定默认密码 # -s shell 指定默认的登录shell # -u uid 为账户指定唯一的UID ## 更改默认值 useradd -D -s /bin/tsch useradd -D
-
userdel:删除用户
userdel -r test
-
usermod:修改用户账户字段
# 还可指定主要组以及辅助组的所属关系 # - e 用于修改过期日期 # -g 用于修改默认的登陆组 # -l 修改用户账号的登录名 # -L 锁定用户,禁止用户登录 # -P 修改账户密码 # -U 解除锁定,恢复用户登录
-
passwd:修改已有用户密码
passwd test # -e 强制用户下次登录时修改密码 passwd # 只有这个则是修改你自己的密码
-
chpasswd:批量修改用户密码
chpasswd < user.txt # user.txt 为一系列以冒号分隔的登录名和密码对
-
chsh:快速修改默认的用户登录shell
chsh -s /bin/csh test
-
chfn:在/etc/passwd文件中备注字段保存信息的标准方法
chfn test
-
chage:帮助管理用户账号的有效日期
# -d 设置上次修改密码到现在的天数 # -E 设置密码过期的日期 # -I 设置密码过期到锁定账户的天数 # -m 设置修改密码之间最少要多少天 # -W 设置密码过期前多久开始出现提醒信息
-
groupadd:创建新组
groupadd shared # 创建新组 tail group /etc/group # 使用usermod 向组中添加用户 usermod -G shared test tail /etc/group
-
groupmod:修改组
groupmod -n sharing shared # 修改shared组名为sharing
-
chmod:修改文件与文价夹的安全设置
chmod 760 newfile ls -l newfile
-
su:切换用户身份
-
sudo:以管理员身份执行命令
-
chown:修改文件或目录的所有者
-
chgrp:修改文件或目录的所属组
环境变量:
-
evn & printenv: 查看全局变量
printenv HOME# 要显示个别环境变量值
-
echo :显示变量的值
echo $HOME ls $HOME # 在变量前加$号,还可以让变量作为其他命令的参数 # 全局变量可用于进程的子shell bash # 创建shell ps -f # 显示所有进程 exit # 退出shell
-
set:用设置和显示shell的参数和选项的命令(设置局部变量,全局变量)
set -e # 启动错误检查,当命令执行失败时会立即退出脚本 set -u # 在引用未定义变量时会产生错误 set -x # 显示每个命令执行后的详细信息 set -v # 显示每个命令执行前的命令行 ## 设置局部变量 set # 显示当前shell的所有环境变量 my_variable=Hello # 设置局部自定义变量 echo $my_variable my_variable="Kello World" echo $my_variable ### 注意等号与值之间没有空格,如果有空格,则视为单独的命令 # 只在一个shell中存在,返回到父shell中,子shell中设置的局部变量就不存在了。(即在父shell中用echo显示该变量,则返回空行) ## 设置全局变量 my_variable="I am a Global Now" export my_variable echo $my_variable export my_variable="I am a Global Now" ### 修改子shell中的全局变量并不会影响父shell中该变量的值,甚至通过export也无法影响父shell中该变量的值 ### 删除环境变量 unset my_variable echo $my_variable ### 和修改变量一样,在子shell中删除全局变量后,无法将效果影反映到父shell中 ## 数组变量 mytest=(one two three four) echo $mytest # 显示数组中的第一个元素 echo ${mytest[2]} # 显示单个数组元素 echo ${mytest[*]} # 显示整个数组变量 mytest[3]=seven # 修改某个索引位置上的值 echo ${mytest[*]} unset mytest[2] # 删除数组中的某个值 echo ${mytest[*]} # 显示为空行 unset mytest # 删除整个数组 echo ${mytest[*]} # 显示为空行 ## 设置PATH环境变量 echo $PATH # 以冒号作为分隔符 PATH=$PATH:home/youshu/Scripts # 添加环境变量,这种方法不能一致奏效(退出,或重启系统) ### 环境变量的持久化 # 最好是在/etc/profile.d目录中创建一个以.sh结尾的文件。把所有新的或修改过的全局环境变量设置放在这个文件中。在大多数发行版中,存储个人用户永久性bash shell变量的地方是$HOME/.bashrc文件。这一点适用于所有类型的shell进程。但如果设置了BASH_ENV变量,那么记住,除非它指向的是 $HOME/.bashrc,否则你应该将非交互式shell的用户变量放在别的地方。
-
常见的路径及功能
/etc/profile # 是bash shell默认的主启动文件
###
/etc/passwd # 用来匹配登录名与对应的UID值
密码字段都被设置为x
cat /etc/passwd
###
/etc/shadow
cat /etc/shadow # 只有root用户才能访问
###
/etc/default/useradd # 存放useradd命令的默认值
###
/etc/login.defs # 存放”安全设置“的地方,用来改变Linux默认的安全行为
###
/etc/skel/ # 目录是用来存放新用户配置文件的目录
###
/etc/group 包含系统中每个组的信息
## 4个启动文件
$HOME/.bash_profile
$HOME/.bashrc
$HOME/.bash_login
$HOME/.profile
-
创建root用户
sudo passwd root
su root
以上是常用的 Linux 命令,还有很多其他的命令和参数,可以通过 man 命令查看命令的帮助文档。
使用man命令可以访问Linux系统的手册页。在man命令之后跟上想要查看的命令名。就可显示相应的手册页。如:
# 查看hostname命令手册页
man hostname
其中的信息是由分页程序(pager)来显示的。可以通过单击空格进行翻页或用Enter键逐行查看。也可以使用上下箭头键进行翻滚。使用Q键推出手册页。
输入man man
可以查看与手册页相关的信息。
setterm控制终端属性命令
修改命令终端背景颜色setterm --inversescreen on
.
8种颜色:black, red, green, yellow, blue, magenta, cyan, white。
选项 | 参数 | 描述 |
---|---|---|
–background | 8种颜色 | 背景色 |
–foreground | 8种颜色 | 前景色 |
–inversescreen | 交换背景色和前景色 | |
–reset | 设置外观默认,并清屏 | |
–store | 重置前景色和背景色 |
Linux终止指令
在Linux终端中,可以使用以下几种方式来终止正在运行的指令:
- Ctrl + C:这是最常用的终止指令的方式。当你运行一个长时间的指令时,可以使用 Ctrl + C 来停止它的执行。
- Ctrl + Z:这个指令可以将当前的进程挂起,可以使用 fg 命令将其恢复,或使用 bg 命令将其放到后台运行。
- kill 命令:可以使用 kill 命令来终止一个进程。首先需要使用 ps 命令来查找进程的 PID,然后使用 kill 命令将其终止。
- killall 命令:可以使用 killall 命令来终止所有同名进程。例如,killall firefox 将终止所有名为 firefox 的进程。
需要注意的是,在终止指令时要小心,确保不会意外终止系统关键进程或正在进行的重要操作。
Linux的bash终端中的~号和/号是什么
在Linux系统中,波浪线符号(~)表示用户的主目录(home directory)。也就是说,如果使用波浪线符号作为路径的一部分,那么它将指向当前用户的主目录。
例如,在终端中输入cd ~ 或cd,将切换到当前用户的主目录。类似地,可以使用波浪线符号来指定文件或目录的路径,例如,~/Documents 表示当前用户主目录下的 Documents 目录。
在Linux系统中,正斜杠(/)表示根目录(root directory)。也就是说,如果使用正斜杠作为路径的一部分,那么它将指向根目录下的某个文件或目录。
例如,/usr/bin 是指根目录下的 usr 目录,usr 目录下的 bin 目录。在Linux系统中,所有的文件和目录都是从根目录开始的,因此根目录是整个文件系统的起点。
在这里插入图片描述
- 单点号(.) :表示当前目录。
- 双点号(…):表示当前目录的父目录。
Linux 基础知识 /bin,/sbin,/usr/sbin,/usr/bin 目录 区别详解
来源:https://blog.51cto.com/u_14551658/2440488
说到 Linux 的目录:
Linux中的某些重要的目录:
- 主目录:/root、/home/username
- 用户可执行文件:/bin、/usr/bin、/usr/local/bin
- 系统可执行文件:/sbin、/usr/sbin、/usr/local/sbin
- 其他挂载点:/media、/mnt
- 配置:/etc
- 临时文件:/tmp
- 内核和Bootloader:/boot
- 服务器数据:/var、/srv
- 系统信息:/proc、/sys
- 共享库:/lib、/usr/lib、/usr/local/lib
他们之间的区别又是什么呢?
/bin是系统的一些指令。bin为binary的简写主要放置一些系统的必备执行档例如:cat、cp、chmod df、dmesg、gzip、kill、ls、mkdir、more、mount、rm、su、tar等。
/sbin一般是指超级用户指令。(system binary)主要放置一些系统管理的必备程式例如:cfdisk、dhcpcd、dump、e2fsck、fdisk、halt、ifconfig、ifup、 ifdown、init、insmod、lilo、lsmod、mke2fs、modprobe、quotacheck、reboot、rmmod、 runlevel、shutdown等。
/usr/bin 是你在后期安装的一些软件的运行脚本。主要放置一些应用软体工具的必备执行档例如c++、g++、gcc、chdrv、diff、dig、du、eject、elm、free、gnome*、 gzip、htpasswd、kfm、ktop、last、less、locale、m4、make、man、mcopy、ncftp、 newaliases、nslookup passwd、quota、smb*、wget等。
/usr/sbin 放置一些用户安装的系统管理的必备程式。例如:dhcpd、httpd、imap、in.*d、inetd、lpd、named、netconfig、nmbd、samba、sendmail、squid、swap、tcpd、tcpdump等。
简单归纳:
/bin目录(binary)是二进制执行文件目录,主要用于具体应用
/sbin目录(system binary)是系统管理员专用的二进制代码存放目录,主要用于系统管理
如果是用户和管理员必备的二进制文件,就会放在/bin;如果是系统管理员必备,但是一般用户根本不会用到的二进制文件,就会放在/sbin;如果不是用户必备的二进制文件,多半会放在/usr/bin;如果不是系统管理员必备的工具,如网络管理命令,多半会放在/usr/sbin;
写脚本的第一行指定解释器的时候,要先确定到底把解释器装在了 /bin 还是 /usr/bin 目录下哦。
Linux终端新建/删除用户
-
新建用户(username为新用户名)
在 Ubuntu 终端中,可以使用以下命令来创建新用户:
sudo adduser username
其中,username 是你要创建的新用户的用户名。执行此命令后,系统会提示你输入新用户的密码和其他信息,例如全名、房间号码等。你可以按照提示输入或直接按回车键跳过。
如果你需要将新用户添加到 sudo 组中,以便拥有管理员权限,可以使用以下命令:sudo usermod -aG sudo username
其中,username 是你创建的新用户的用户名。执行此命令后,新用户将被添加到 sudo 组中,可以执行特权命令。
需要注意的是,创建新用户需要管理员权限,因此你需要使用 sudo 命令来执行上述命令。另外,新用户的家目录将被创建在 /home 目录下,其用户名将成为家目录的名称,例如 /home/username。 -
删除用户(username为删除用户名)
在 Ubuntu 终端中,可以使用以下命令来删除用户:
sudo deluser username
其中,username 是你要删除的用户的用户名。执行此命令后,系统会提示你是否要删除用户的主目录和邮箱等文件,你可以根据需要选择是否删除。
如果你想要同时删除用户的主目录和邮箱等文件,可以使用以下命令:sudo deluser --remove-home username
其中,username 是你要删除的用户的用户名。执行此命令后,系统会删除用户的主目录和邮箱等文件。
需要注意的是,删除用户需要管理员权限,因此你需要使用 sudo 命令来执行上述命令。另外,删除用户时要小心,确保不会误删除重要用户。
ary)是系统管理员专用的二进制代码存放目录,主要用于系统管理
如果是用户和管理员必备的二进制文件,就会放在/bin;如果是系统管理员必备,但是一般用户根本不会用到的二进制文件,就会放在/sbin;如果不是用户必备的二进制文件,多半会放在/usr/bin;如果不是系统管理员必备的工具,如网络管理命令,多半会放在/usr/sbin;
写脚本的第一行指定解释器的时候,要先确定到底把解释器装在了 /bin 还是 /usr/bin 目录下哦。
Linux终端新建/删除用户
-
新建用户(username为新用户名)
在 Ubuntu 终端中,可以使用以下命令来创建新用户:
sudo adduser username
其中,username 是你要创建的新用户的用户名。执行此命令后,系统会提示你输入新用户的密码和其他信息,例如全名、房间号码等。你可以按照提示输入或直接按回车键跳过。
如果你需要将新用户添加到 sudo 组中,以便拥有管理员权限,可以使用以下命令:sudo usermod -aG sudo username
其中,username 是你创建的新用户的用户名。执行此命令后,新用户将被添加到 sudo 组中,可以执行特权命令。
需要注意的是,创建新用户需要管理员权限,因此你需要使用 sudo 命令来执行上述命令。另外,新用户的家目录将被创建在 /home 目录下,其用户名将成为家目录的名称,例如 /home/username。 -
删除用户(username为删除用户名)
在 Ubuntu 终端中,可以使用以下命令来删除用户:
sudo deluser username
其中,username 是你要删除的用户的用户名。执行此命令后,系统会提示你是否要删除用户的主目录和邮箱等文件,你可以根据需要选择是否删除。
如果你想要同时删除用户的主目录和邮箱等文件,可以使用以下命令:sudo deluser --remove-home username
其中,username 是你要删除的用户的用户名。执行此命令后,系统会删除用户的主目录和邮箱等文件。
需要注意的是,删除用户需要管理员权限,因此你需要使用 sudo 命令来执行上述命令。另外,删除用户时要小心,确保不会误删除重要用户。