MAGESH MARUTHAMUTHU 发布的文章

通过使用 /etc/passwd 文件,getent 命令,compgen 命令这三种方法查看系统中用户的信息。

大家都知道,Linux 系统中用户信息存放在 /etc/passwd 文件中。

这是一个包含每个用户基本信息的文本文件。当我们在系统中创建一个用户,新用户的详细信息就会被添加到这个文件中。

/etc/passwd 文件将每个用户的基本信息记录为文件中的一行,一行中包含 7 个字段。

/etc/passwd 文件的一行代表一个单独的用户。该文件将用户的信息分为 3 个部分。

* 第 1 部分:`root` 用户信息
* 第 2 部分:系统定义的账号信息
* 第 3 部分:真实用户的账户信息

第一部分是 root 账户,这代表管理员账户,对系统的每个方面都有完全的权力。

第二部分是系统定义的群组和账户,这些群组和账号是正确安装和更新系统软件所必需的。

第三部分在最后,代表一个使用系统的真实用户。

在创建新用户时,将修改以下 4 个文件。

* `/etc/passwd`: 用户账户的详细信息在此文件中更新。
* `/etc/shadow`: 用户账户密码在此文件中更新。
* `/etc/group`: 新用户群组的详细信息在此文件中更新。
* `/etc/gshadow`: 新用户群组密码在此文件中更新。

** 建议阅读 : **

方法 1 :使用 /etc/passwd 文件

使用任何一个像 catmoreless 等文件操作命令来打印 Linux 系统上创建的用户列表。

/etc/passwd 是一个文本文件,其中包含了登录 Linux 系统所必需的每个用户的信息。它保存用户的有用信息,如用户名、密码、用户 ID、群组 ID、用户 ID 信息、用户的家目录和 Shell 。

/etc/passwd 文件将每个用户的详细信息写为一行,其中包含七个字段,每个字段之间用冒号 : 分隔:

# cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
tcpdump:x:72:72::/:/sbin/nologin
2gadmin:x:500:10::/home/viadmin:/bin/bash
apache:x:48:48:Apache:/var/www:/sbin/nologin
zabbix:x:498:499:Zabbix Monitoring System:/var/lib/zabbix:/sbin/nologin
mysql:x:497:502::/home/mysql:/bin/bash
zend:x:502:503::/u01/zend/zend/gui/lighttpd:/sbin/nologin
rpc:x:32:32:Rpcbind Daemon:/var/cache/rpcbind:/sbin/nologin
2daygeek:x:503:504::/home/2daygeek:/bin/bash
named:x:25:25:Named:/var/named:/sbin/nologin
mageshm:x:506:507:2g Admin - Magesh M:/home/mageshm:/bin/bash

7 个字段的详细信息如下。

  • 用户名magesh): 已创建用户的用户名,字符长度 1 个到 12 个字符。
  • 密码x):代表加密密码保存在 `/etc/shadow 文件中。
  • **用户 ID(506):代表用户的 ID 号,每个用户都要有一个唯一的 ID 。UID 号为 0 的是为 root 用户保留的,UID 号 1 到 99 是为系统用户保留的,UID 号 100-999 是为系统账户和群组保留的。
  • **群组 ID (507):代表群组的 ID 号,每个群组都要有一个唯一的 GID ,保存在 /etc/group 文件中。
  • **用户信息(2g Admin - Magesh M):代表描述字段,可以用来描述用户的信息(LCTT 译注:此处原文疑有误)。
  • **家目录(/home/mageshm):代表用户的家目录。
  • **Shell(/bin/bash):代表用户使用的 shell 类型。

你可以使用 awkcut 命令仅打印出 Linux 系统中所有用户的用户名列表。显示的结果是相同的。

# awk -F':' '{ print $1}' /etc/passwd
or
# cut -d: -f1 /etc/passwd
root
bin
daemon
adm
lp
sync
shutdown
halt
mail
ftp
postfix
sshd
tcpdump
2gadmin
apache
zabbix
mysql
zend
rpc
2daygeek
named
mageshm

方法 2 :使用 getent 命令

getent 命令显示 Name Service Switch 库支持的数据库中的条目。这些库的配置文件为 /etc/nsswitch.conf

getent 命令显示类似于 /etc/passwd 文件的用户详细信息,它将每个用户详细信息显示为包含七个字段的单行。

# getent passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
tcpdump:x:72:72::/:/sbin/nologin
2gadmin:x:500:10::/home/viadmin:/bin/bash
apache:x:48:48:Apache:/var/www:/sbin/nologin
zabbix:x:498:499:Zabbix Monitoring System:/var/lib/zabbix:/sbin/nologin
mysql:x:497:502::/home/mysql:/bin/bash
zend:x:502:503::/u01/zend/zend/gui/lighttpd:/sbin/nologin
rpc:x:32:32:Rpcbind Daemon:/var/cache/rpcbind:/sbin/nologin
2daygeek:x:503:504::/home/2daygeek:/bin/bash
named:x:25:25:Named:/var/named:/sbin/nologin
mageshm:x:506:507:2g Admin - Magesh M:/home/mageshm:/bin/bash

7 个字段的详细信息如上所述。(LCTT 译注:此处内容重复,删节)

你同样可以使用 awkcut 命令仅打印出 Linux 系统中所有用户的用户名列表。显示的结果是相同的。

方法 3 :使用 compgen 命令

compgenbash 的内置命令,它将显示所有可用的命令,别名和函数。

# compgen -u
root
bin
daemon
adm
lp
sync
shutdown
halt
mail
ftp
postfix
sshd
tcpdump
2gadmin
apache
zabbix
mysql
zend
rpc
2daygeek
named
mageshm

via: https://www.2daygeek.com/3-methods-to-list-all-the-users-in-linux-system/

作者:Magesh Maruthamuthu 选题:lujun9972 译者:SunWave 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

Docker 是一种所谓容器化的操作系统级的虚拟化软件。

基于 Linux 内核的 cgroup 和 namespace 等资源隔离特性,Docker 可以在单个 Linux 实例中运行多个独立的容器。

通过将应用依赖和相关库打包进容器,Docker 使得应用可以在容器中安全隔离地运行。

Dry 是什么

Dry 是一个管理并监控 Docker 容器和镜像的命令行工具。

Dry 可以给出容器相关的信息,包括对应镜像、容器名称、网络、容器中运行的命令及容器状态;如果运行在 Docker Swarm 中,工具还会给出 Swarm 集群的各种状态信息。

Dry 可以连接至本地或远程的 Docker 守护进程。如果连接本地 Docker,Docker 主机显示为 unix:///var/run/docker.sock

如果连接远程 Docker,Docker 主机显示为 tcp://IP Address:Port Numbertcp://Host Name:Port Number

Dry 可以提供类似 docker ps 的指标输出,但输出比 docker ps 内容详实、富有色彩。

相比 Docker,Dry 还可以手动添加一个额外的名称列,用于降低记忆难度。

推荐阅读:

如何在 Linux 中安装 Dry

在 Linux 中,可以通过一个简单的 shell 脚本安装最新版本的 Dry 工具。Dry 不依赖外部库。对于绝大多数的 Docker 命令,Dry 提供类似样式的命令。

$ curl -sSf https://moncho.github.io/dry/dryup.sh | sudo sh
 % Total % Received % Xferd Average Speed Time Time Time Current
 Dload Upload Total Spent Left Speed
100 10 100 10 0 0 35 0 --:--:-- --:--:-- --:--:-- 35
dryup: downloading dry binary
######################################################################## 100.0%
dryup: Moving dry binary to its destination
dryup: dry binary was copied to /usr/local/bin, now you should 'sudo chmod 755 /usr/local/bin/dry'

使用如下命令将文件权限变更为 755

$ sudo chmod 755 /usr/local/bin/dry

对于使用 Arch Linux 的用户,可以使用 PackerYaourt 包管理器,从 AUR 源安装该工具。

$ yaourt -S dry-bin
或者
$ packer -S dry-bin

如果希望在 Docker 容器中运行 dry,可以运行如下命令。前提条件是已确认在操作系统中安装了 Docker。

推荐阅读:

$ docker run -it -v /var/run/docker.sock:/var/run/docker.sock moncho/dry

如何启动并运行 Dry

在控制台运行 dry 命令即可启动该工具,其默认输出如下:

$ dry

如何使用 Dry 监控 Docker

你可以在 dry 的界面中按下 m 键打开监控模式。

如何使用 Dry 管理容器

在选中的容器上单击回车键,即可管理容器。Dry 提供如下操作:查看日志,查看、杀死、删除容器,停止、启动、重启容器,查看容器状态及镜像历史记录等。

如何监控容器资源利用率

用户可以使用 Stats+Top 选项查看指定容器的资源利用率。

该操作需要在容器管理界面完成(在上一步的基础上,点击 Stats+Top 选项)。另外,也可以按下 s 打开容器资源利用率界面。

如何查看容器、镜像及本地卷的磁盘使用情况

可以使用 F8 键查看容器、镜像及本地卷的磁盘使用情况。

该界面明确地给出容器、镜像和卷的总数,哪些处于使用状态,以及整体磁盘使用情况、可回收空间大小的详细信息。

如何查看已下载的镜像

按下 2 键即可列出全部的已下载镜像。

如何查看网络列表

按下 3 键即可查看全部网络及网关。

如何查看全部 Docker 容器

按下 F2 键即可列出列出全部容器,包括运行中和已关闭的容器。

Dry 快捷键

查看帮助页面或 dry GitHub 即可查看全部快捷键。


via: https://www.2daygeek.com/dry-an-interactive-cli-manager-for-docker-containers/

作者:Magesh Maruthamuthu 选题:lujun9972 译者:pinewall 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

如果你加入了一家新公司,要为开发团队安装所需的软件并重启服务,这个时候首先要弄清楚它们运行在什么发行版以及哪个版本的系统上,你才能正确完成后续的工作。作为系统管理员,充分了解系统信息是首要的任务。

查看 Linux 发行版名称和版本号有很多种方法。你可能会问,为什么要去了解这些基本信息呢?

因为对于诸如 RHEL、Debian、openSUSE、Arch Linux 这几种主流发行版来说,它们各自拥有不同的包管理器来管理系统上的软件包,如果不知道所使用的是哪一个发行版的系统,在软件包安装的时候就会无从下手,而且由于大多数发行版都是用 systemd 命令而不是 SysVinit 脚本,在重启服务的时候也难以执行正确的命令。

下面来看看可以使用那些基本命令来查看 Linux 发行版名称和版本号。

方法总览

  • lsb_release 命令
  • /etc/*-release 文件
  • uname 命令
  • /proc/version 文件
  • dmesg 命令
  • YUM 或 DNF 命令
  • RPM 命令
  • APT-GET 命令

方法 1: lsb\_release 命令

LSB( Linux 标准库 Linux Standard Base )能够打印发行版的具体信息,包括发行版名称、版本号、代号等。

# lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 16.04.3 LTS
Release: 16.04
Codename: xenial

方法 2: /etc/*-release 文件

release 文件通常被视为操作系统的标识。在 /etc 目录下放置了很多记录着发行版各种信息的文件,每个发行版都各自有一套这样记录着相关信息的文件。下面是一组在 Ubuntu/Debian 系统上显示出来的文件内容。

# cat /etc/issue
Ubuntu 16.04.3 LTS \n \l

# cat /etc/issue.net
Ubuntu 16.04.3 LTS

# cat /etc/lsb-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=16.04
DISTRIB_CODENAME=xenial
DISTRIB_DESCRIPTION="Ubuntu 16.04.3 LTS"

# cat /etc/os-release
NAME="Ubuntu"
VERSION="16.04.3 LTS (Xenial Xerus)"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 16.04.3 LTS"
VERSION_ID="16.04"
HOME_URL="http://www.ubuntu.com/"
SUPPORT_URL="http://help.ubuntu.com/"
BUG_REPORT_URL="http://bugs.launchpad.net/ubuntu/"
VERSION_CODENAME=xenial
UBUNTU_CODENAME=xenial

# cat /etc/debian_version
9.3

下面这一组是在 RHEL/CentOS/Fedora 系统上显示出来的文件内容。其中 /etc/redhat-release/etc/system-release 文件是指向 /etc/[发行版名称]-release 文件的一个连接。

# cat /etc/centos-release
CentOS release 6.9 (Final)

# cat /etc/fedora-release
Fedora release 27 (Twenty Seven)

# cat /etc/os-release
NAME=Fedora
VERSION="27 (Twenty Seven)"
ID=fedora
VERSION_ID=27
PRETTY_NAME="Fedora 27 (Twenty Seven)"
ANSI_COLOR="0;34"
CPE_NAME="cpe:/o:fedoraproject:fedora:27"
HOME_URL="https://fedoraproject.org/"
SUPPORT_URL="https://fedoraproject.org/wiki/Communicating_and_getting_help"
BUG_REPORT_URL="https://bugzilla.redhat.com/"
REDHAT_BUGZILLA_PRODUCT="Fedora"
REDHAT_BUGZILLA_PRODUCT_VERSION=27
REDHAT_SUPPORT_PRODUCT="Fedora"
REDHAT_SUPPORT_PRODUCT_VERSION=27
PRIVACY_POLICY_URL="https://fedoraproject.org/wiki/Legal:PrivacyPolicy"

# cat /etc/redhat-release
Fedora release 27 (Twenty Seven)

# cat /etc/system-release
Fedora release 27 (Twenty Seven)

方法 3: uname 命令

uname(unix name 的意思) 是一个打印系统信息的工具,包括内核名称、版本号、系统详细信息以及所运行的操作系统等等。

# uname -a
Linux localhost.localdomain 4.12.14-300.fc26.x86_64 #1 SMP Wed Sep 20 16:28:07 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux

以上运行结果说明使用的操作系统版本是 Fedora 26。

方法 4: /proc/version 文件

这个文件记录了 Linux 内核的版本、用于编译内核的 gcc 的版本、内核编译的时间,以及内核编译者的用户名。

# cat /proc/version
Linux version 4.12.14-300.fc26.x86_64 ([email protected]) (gcc version 7.2.1 20170915 (Red Hat 7.2.1-2) (GCC) ) #1 SMP Wed Sep 20 16:28:07 UTC 2017

方法 5: dmesg 命令

dmesg( 展示信息 display message 驱动程序信息 driver message )是大多数类 Unix 操作系统上的一个命令,用于打印内核的消息缓冲区的信息。

# dmesg | grep "Linux"
[ 0.000000] Linux version 4.12.14-300.fc26.x86_64 ([email protected]) (gcc version 7.2.1 20170915 (Red Hat 7.2.1-2) (GCC) ) #1 SMP Wed Sep 20 16:28:07 UTC 2017
[ 0.001000] SELinux: Initializing.
[ 0.001000] SELinux: Starting in permissive mode
[ 0.470288] SELinux: Registering netfilter hooks
[ 0.616351] Linux agpgart interface v0.103
[ 0.630063] usb usb1: Manufacturer: Linux 4.12.14-300.fc26.x86_64 ehci_hcd
[ 0.688949] usb usb2: Manufacturer: Linux 4.12.14-300.fc26.x86_64 ohci_hcd
[ 2.564554] SELinux: Disabled at runtime.
[ 2.564584] SELinux: Unregistering netfilter hooks

方法 6: Yum/Dnf 命令

Yum( Yellowdog 更新器修改版 Yellowdog Updater Modified )是 Linux 操作系统上的一个包管理工具,而 yum 命令被用于一些基于 RedHat 的 Linux 发行版上安装、更新、查找、删除软件包。

# yum info nano
Loaded plugins: fastestmirror, ovl
Loading mirror speeds from cached hostfile
 * base: centos.zswap.net
 * extras: mirror2.evolution-host.com
 * updates: centos.zswap.net
Available Packages
Name : nano
Arch : x86_64
Version : 2.3.1
Release : 10.el7
Size : 440 k
Repo : base/7/x86_64
Summary : A small text editor
URL : http://www.nano-editor.org
License : GPLv3+
Description : GNU nano is a small and friendly text editor.

下面的 yum repolist 命令执行后显示了 yum 的基础源仓库、额外源仓库、更新源仓库都来自 CentOS 7 仓库。

# yum repolist
Loaded plugins: fastestmirror, ovl
Loading mirror speeds from cached hostfile
 * base: centos.zswap.net
 * extras: mirror2.evolution-host.com
 * updates: centos.zswap.net
repo id repo name status
base/7/x86_64 CentOS-7 - Base 9591
extras/7/x86_64 CentOS-7 - Extras 388
updates/7/x86_64 CentOS-7 - Updates 1929
repolist: 11908

使用 dnf 命令也同样可以查看发行版名称和版本号。

# dnf info nano
Last metadata expiration check: 0:01:25 ago on Thu Feb 15 01:59:31 2018.
Installed Packages
Name : nano
Version : 2.8.7
Release : 1.fc27
Arch : x86_64
Size : 2.1 M
Source : nano-2.8.7-1.fc27.src.rpm
Repo : @System
From repo : fedora
Summary : A small text editor
URL : https://www.nano-editor.org
License : GPLv3+
Description : GNU nano is a small and friendly text editor.

方法 7: RPM 命令

RPM( 红帽包管理器 RedHat Package Manager )是在 CentOS、Oracle Linux、Fedora 这些基于 RedHat 的操作系统上的一个强大的命令行包管理工具,同样也可以帮助我们查看系统的版本信息。

# rpm -q nano
nano-2.8.7-1.fc27.x86_64

方法 8: APT-GET 命令

Apt-Get( 高级打包工具 Advanced Packaging Tool )是一个强大的命令行工具,可以自动下载安装新软件包、更新已有的软件包、更新软件包列表索引,甚至更新整个 Debian 系统。

# apt-cache policy nano
nano:
 Installed: 2.5.3-2ubuntu2
 Candidate: 2.5.3-2ubuntu2
 Version table:
 * 2.5.3-2ubuntu2 500
 500 http://nova.clouds.archive.ubuntu.com/ubuntu xenial-updates/main amd64 Packages
 100 /var/lib/dpkg/status
 2.5.3-2 500
 500 http://nova.clouds.archive.ubuntu.com/ubuntu xenial/main amd64 Packages

via: https://www.2daygeek.com/check-find-linux-distribution-name-and-version/

作者:Magesh Maruthamuthu 译者:HankChow 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

众所周知,对硬盘分区是 Linux 管理员一项最重要的管理任务之一,他们不能不知道这个。

在最糟糕的时候,你至少每周会收到一次依赖小组的请求,而在更大的环境里会更加频繁 。

你可能会问为什么我们要用 parted 而不是 fdisk? 它们有什么区别?好问题,我会告诉你这两者的区别。

  • parted 支持用户在大于 2TB 的硬盘上创建硬盘分区, 但 fdisk 命令不支持
  • 对比 fdisk 来说,parted 是一个更高级的工具
  • 支持更多的分区表类型,包括 GPT (LCTT 译注:全局唯一标识分区表)
  • 它允许用户调整分区大小, 但当缩减分区空间的时候,它没有如我意料的工作,多数情况下我会得到错误消息。所以我会建议用户不要用 parted 来缩减分区大小。

什么是 parted

parted 是一个操作硬盘分区的程序。它支持多种分区表类型,包括 MS-DOS 和 GPT。

它允许用户创建、删除、调整、缩减、移动和复制分区,以及重新组织硬盘的使用,复制数据到新的硬盘上。gpartedparted 的图形界面前端。

怎样安装 parted

大部分发行版已经预安装了 parted。如果没有,用下列命令来安装 parted

对于 Debian/Ubuntu 用户, 使用 APT-GET 命令 或者 APT 命令 来安装 parted

$ sudo apt install parted

对于 RHEL/CentOS 用户,用 YUM 命令 来安装 parted

$ sudo yum install parted

对于 Fedora 用户,用 DNF 命令 来安装 parted

$ sudo dnf install parted

对于 Arch Linux 用户,用 Pacman 命令来安装 parted

$ sudo pacman -S parted

对于 openSUSE 用户, 用 Zypper 命令来安装 parted

$ sudo zypper in parted

怎样启动 parted

下面的 parted 命令会自动选择 /dev/sda ,因为这是系统的第一个硬盘。

$ sudo parted
GNU parted 3.2
Using /dev/sda
Welcome to GNU parted! Type 'help' to view a list of commands.
(parted)

同时我们也可以用下面的命令来重新选择对应的的硬盘。

(parted) select /dev/sdb
Using /dev/sdb
(parted)

如果你想选择特定的硬盘, 用下列的格式来输入命令。 这次 ,我们将选择 /dev/sdb

$ sudo parted [Device Name]
$ sudo parted /dev/sdb
GNU parted 3.2
Using /dev/sdb
Welcome to GNU parted! Type 'help' to view a list of commands.
(parted)

怎样用 parted 列出所有可用的硬盘

如果你不知道你的电脑上有什么硬盘,只需要运行下列命令,该命令会显示所有可用硬盘的名字,以及其它的有用信息比如储存空间、型号、扇区大小、硬盘标志以及分区信息。

$ sudo parted -l
Model: ATA VBOX HARDDISK (scsi)
Disk /dev/sda: 32.2GB
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Disk Flags:

Number Start End Size Type File system Flags
 1 1049kB 32.2GB 32.2GB primary ext4 boot


Error: /dev/sdb: unrecognised disk label
Model: ATA VBOX HARDDISK (scsi)
Disk /dev/sdb: 53.7GB
Sector size (logical/physical): 512B/512B
Partition Table: unknown
Disk Flags:

上面的错误信息清晰地显示出硬盘 /dev/sdb 没有有效的 磁盘标签 disk label 。 它不会自动得到磁盘标签,所以, 我们便要自己设置硬盘标签。

怎样用 parted 创建硬盘分区

parted 允许用户创建主分区或者拓展分区。创建这两种类型的分区的步骤还是一样,但请确保你已经指定了需要的分区类型,比如 primary (主分区)或者 extended (扩展分区)。

为了演示这项操作 ,我们安装了一个新的 50 GB 的硬盘到到电脑上,挂载在 /dev/sdb 上。

有两种方法创建分区,第一种是更详细的方法,另一种只是一个命令。 在下面的例子中,我们将用更详细的方法添加一个主分区。提醒一下, 我们应该先设置磁盘标签,因为它不会自动设置任何标签。

在下面的例子中,我们将要创建一个 10 GB 的分区

$ sudo parted /dev/sdb
GNU parted 3.2
Using /dev/sdb
Welcome to GNU parted! Type 'help' to view a list of commands.
(parted) mklabel msdos
(parted) unit GB
(parted) mkpart
Partition type? primary/extended? primary
File system type? [ext2]? ext4
Start? 0.00GB
End? 10.00GB
(parted) print
Model: ATA VBOX HARDDISK (scsi)
Disk /dev/sdb: 53.7GB
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Disk Flags:

Number Start End Size Type File system Flags
 1 0.00GB 10.0GB 10.0GB primary ext4 lba

(parted) quit
Information: You may need to update /etc/fstab.

同时,我们也可以使用单条 parted 命令

在下面的例子中,我们将在硬盘上创建一个 10 GB 的分区。

$ sudo parted [Disk Name] [mkpart] [Partition Type] [Filesystem Type] [Partition Start Size] [Partition End Size]
$ sudo parted /dev/sdb mkpart primary ext4 10.0GB 20.0GB
Information: You may need to update /etc/fstab.

怎样使用所有剩余空间创建分区

你已经创建了除了 /home 之外等所有要求的分区,而且你想要用硬盘上所有剩余的空间来创建 /home 分区,要怎样做?可以使用下面的命令来创建分区。

下面的命令创建了一个 33.7 GB 的分区,从 20 GB 开始到 53 GB 结束。 100% 使用率允许用户用硬盘上所有剩余的空余空间。

$ sudo parted [Disk Name] [mkpart] [Partition Type] [Filesystem Type] [Partition Start Size] [Partition End Size]

$ sudo parted /dev/sdb mkpart primary ext4 20.0GB 100%
Information: You may need to update /etc/fstab.

怎样用 parted 列出所有的分区

你也许注意到了,我们已经在上述步骤中创建了三个分区,如果你想要列出所有在硬盘上可用的分区,可以使用 print 命令。

$ sudo parted /dev/sdb print
Model: ATA VBOX HARDDISK (scsi)
Disk /dev/sdb: 53.7GB
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Disk Flags:

Number Start End Size Type File system Flags
 1 1049kB 10.0GB 9999MB primary ext4
 2 10.0GB 20.0GB 9999MB primary ext4
 3 20.0GB 53.7GB 33.7GB primary ext4

怎样用 mkfs 格式化分区

用户可以用 mkfs 命令格式化分区。下面的步骤会用 mkfs 来格式化分区。

$ sudo mkfs.ext4 /dev/sdb1
mke2fs 1.43.4 (31-Jan-2017)
Creating filesystem with 2621440 4k blocks and 656640 inodes
Filesystem UUID: 415cf467-634c-4403-8c9f-47526bbaa381
Superblock backups stored on blocks:
    32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632

Allocating group tables: done
Writing inode tables: done
Creating journal (16384 blocks): done
Writing superblocks and filesystem accounting information: done

同样的。

$ sudo mkfs.ext4 /dev/sdb2
$ sudo mkfs.ext4 /dev/sdb3

创建必要的文件夹然后将这些分区挂载在上面。

$ sudo mkdir /par1 /par2 /par3
$ sudo mount /dev/sdb1 /par1
$ sudo mount /dev/sdb2 /par2
$ sudo mount /dev/sdb3 /par3

运行下列命令来检查是否成功挂载上新创建的分区。

$ df -h /dev/sdb[1-3]
Filesystem Size Used Avail Use% Mounted on
/dev/sdb1 9.2G 37M 8.6G 1% /par1
/dev/sdb2 9.2G 37M 8.6G 1% /par2
/dev/sdb3 31G 49M 30G 1% /par3

怎样检查硬盘空闲空间

运行下列命令来检查硬盘上的空闲空间,这块硬盘上有 25.7 GB 的空闲空间。

$ sudo parted /dev/sdb print free
Model: ATA VBOX HARDDISK (scsi)
Disk /dev/sdb: 53.7GB
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Disk Flags:

Number Start End Size Type File system Flags
 32.3kB 1049kB 1016kB Free Space
 1 1049kB 10.0GB 9999MB primary ext4
 2 10.0GB 20.0GB 9999MB primary ext4
 3 20.0GB 28.0GB 8001MB primary ext4
 28.0GB 53.7GB 25.7GB Free Space

怎样使用 parted 命令来重新调整分区大小

parted 允许用户重新调整分区大小。不过我已在文章的开头说了,不要缩小分区大小,不然会有许多错误。

运行下列命令来检查硬盘分区以及所有可用空间。 可以看到硬盘上有 25.7GB 的可用空间。

$ sudo parted /dev/sdb print free
Model: ATA VBOX HARDDISK (scsi)
Disk /dev/sdb: 53.7GB
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Disk Flags:

Number Start End Size Type File system Flags
 32.3kB 1049kB 1016kB Free Space
 1 1049kB 10.0GB 9999MB primary ext4
 2 10.0GB 20.0GB 9999MB primary ext4
 3 20.0GB 28.0GB 8001MB primary ext4
 28.0GB 53.7GB 25.7GB Free Space

运行下列命令来重新调整分区大小。 我们将要重新调整(增加)分区 3 的结束位置,从 28GB33GB

$ sudo parted [Disk Name] [resizepart] [Partition Number] [Partition New End Size]

$ sudo parted /dev/sdb resizepart 3 33.0GB
Information: You may need to update /etc/fstab.

运行下列命令来确认分区是否已经扩容。可以看到,分区 3 已经从 8GB 增加到 13GB

$ sudo parted /dev/sdb print
Model: ATA VBOX HARDDISK (scsi)
Disk /dev/sdb: 53.7GB
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Disk Flags:

Number Start End Size Type File system Flags
 1 1049kB 10.0GB 9999MB primary ext4
 2 10.0GB 20.0GB 9999MB primary ext4
 3 20.0GB 33.0GB 13.0GB primary ext4

重新调整文件系统大小。

$ sudo resize2fs /dev/sdb3
resize2fs 1.43.4 (31-Jan-2017)
Resizing the filesystem on /dev/sdb3 to 3173952 (4k) blocks.
The filesystem on /dev/sdb3 is now 3173952 (4k) blocks long.

最后,确认分区是否已经扩容。

$ df -h /dev/sdb[1-3]
Filesystem Size Used Avail Use% Mounted on
/dev/sdb1 9.2G 5.1G 3.6G 59% /par1
/dev/sdb2 9.2G 2.1G 6.6G 24% /par2
/dev/sdb3 12G 1.1G 11G 10% /par3

怎样用 parted 删除分区

我们用 rm 命令方便地删除未使用的分区(如果该分区不会再被用到了)。下列步骤中,我们将会删除分区 3 (/dev/sdb3)。

$ sudo parted [Disk Name] [rm] [Partition Number]

$ sudo parted /dev/sdb rm 3
Warning: Partition /dev/sdb3 is being used. Are you sure you want to continue?
Yes/No? Yes
Error: Partition(s) 3 on /dev/sdb have been written, but we have been unable to inform the kernel of the change, probably because it/they are in use. As a result, the old partition(s) will remain in use.
You should reboot now before making further changes.
Ignore/Cancel? Ignore
Information: You may need to update /etc/fstab.

我们也可以用下列的命令检查。可以看到,分区 3 已经被成功移除。

$ sudo parted /dev/sdb print
Model: ATA VBOX HARDDISK (scsi)
Disk /dev/sdb: 53.7GB
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Disk Flags:

Number Start End Size Type File system Flags
 1 1049kB 10.0GB 9999MB primary ext4
 2 10.0GB 20.0GB 9999MB primary ext4

怎样用 parted 命令设置/更改分区标志

我们可以用下列的命令来轻易更改分区的标志。 我们将对 /dev/sdb2 设置 lvm 标志。

$ sudo parted [Disk Name] [set] [Partition Number] [Flags Name] [Flag On/Off]

$ sudo parted /dev/sdb set 2 lvm on
Information: You may need to update /etc/fstab.

我们可以列出分区来验证这次的更改。

$ sudo parted /dev/sdb print
Model: ATA VBOX HARDDISK (scsi)
Disk /dev/sdb: 53.7GB
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Disk Flags:

Number Start End Size Type File system Flags
 1 1049kB 10.0GB 9999MB primary ext4
 2 10.0GB 20.0GB 9999MB primary ext4 lvm

如果你想知道可用的标志,只需要用如下的命令。

$ (parted) help set
 set NUMBER FLAG STATE change the FLAG on partition NUMBER

    NUMBER is the partition number used by Linux. On MS-DOS disk labels, the primary partitions number from 1 to 4, logical partitions from 5 onwards.
 FLAG is one of: boot, root, swap, hidden, raid, lvm, lba, hp-service, palo, prep, msftres, bios_grub, atvrecv, diag, legacy_boot, msftdata, irst, esp
 STATE is one of: on, off

如果你想知道 parted 的其它可用命令, 只需要去到 help 页面。

$ sudo parted
GNU parted 3.2
Using /dev/sda
Welcome to GNU parted! Type 'help' to view a list of commands.
(parted) help
 align-check TYPE N check partition N for TYPE(min|opt) alignment
 help [COMMAND] print general help, or help on COMMAND
 mklabel,mktable LABEL-TYPE create a new disklabel (partition table)
 mkpart PART-TYPE [FS-TYPE] START END make a partition
 name NUMBER NAME name partition NUMBER as NAME
 print [devices|free|list,all|NUMBER] display the partition table, available devices, free space, all found partitions, or a particular partition
 quit exit program
 rescue START END rescue a lost partition near START and END
 resizepart NUMBER END resize partition NUMBER
 rm NUMBER delete partition NUMBER
 select DEVICE choose the device to edit
 disk_set FLAG STATE change the FLAG on selected device
 disk_toggle [FLAG] toggle the state of FLAG on selected device
 set NUMBER FLAG STATE change the FLAG on partition NUMBER
 toggle [NUMBER [FLAG]] toggle the state of FLAG on partition NUMBER
 unit UNIT set the default unit to UNIT
 version display the version number and copyright information of GNU parted
(parted) quit

via: https://www.2daygeek.com/how-to-manage-disk-partitions-using-parted-command/

作者:Magesh Maruthamuthu 译者:zyk2290 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

当系统的磁盘空间不足时,您可能会使用 dfduncdu 命令进行检查,但这些命令只会显示当前目录的文件,并不会显示整个系统范围的文件。

您得花费大量的时间才能用上述命令获取系统中最大的文件,因为要进入到每个目录重复运行上述命令。

这种方法比较麻烦,也并不恰当。

如果是这样,那么该如何在 Linux 中找到最大的 10 个文件呢?

我在谷歌上搜索了很久,却没发现类似的文章,我反而看到了很多关于列出当前目录中最大的 10 个文件的文章。所以,我希望这篇文章对那些有类似需求的人有所帮助。

本教程中,我们将教您如何使用以下四种方法在 Linux 系统中查找最大的前 10 个文件。

方法 1

在 Linux 中没有特定的命令可以直接执行此操作,因此我们需要将多个命令结合使用。

# find / -type f -print0 | xargs -0 du -h | sort -rh | head -n 10

1.4G    /swapfile
1.1G    /home/magi/ubuntu-17.04-desktop-amd64.iso
564M    /home/magi/.gdfuse/magi/cache/0B5nso_FPaZFqTFU0XzkzUlJUZzA
378M    /home/magi/.gdfuse/magi/cache/0B5nso_FPaZFqeldzUmhPeC03Zm8
377M    /home/magi/.gdfuse/magi/cache/0B5nso_FPaZFqRGd4V0VrOXM4YVU
100M    /usr/lib/x86_64-linux-gnu/libOxideQtCore.so.0
93M /usr/lib/firefox/libxul.so
84M /var/lib/snapd/snaps/core_3604.snap
84M /var/lib/snapd/snaps/core_3440.snap
84M /var/lib/snapd/snaps/core_3247.snap

详解:

  • find:在目录结构中搜索文件的命令
  • /:在整个系统(从根目录开始)中查找
  • -type:指定文件类型

    • f:普通文件
  • -print0:在标准输出显示完整的文件名,其后跟一个空字符(null)
  • |:控制操作符,将一条命令的输出传递给下一个命令以供进一步处理
  • xargs:将标准输入转换成命令行参数的命令
  • -0:以空字符(null)而不是空白字符(LCTT 译者注:即空格、制表符和换行)来分割记录
  • du -h:以可读格式计算磁盘空间使用情况的命令
  • sort:对文本文件进行排序的命令
  • -r:反转结果
  • -h:用可读格式打印输出
  • head:输出文件开头部分的命令
  • n -10:打印前 10 个文件

方法 2

这是查找 Linux 系统中最大的前 10 个文件的另一种方法。我们依然使用多个命令共同完成这个任务。

# find / -type f -exec du -Sh {} + | sort -rh | head -n 10

1.4G    /swapfile
1.1G    /home/magi/ubuntu-17.04-desktop-amd64.iso
564M    /home/magi/.gdfuse/magi/cache/0B5nso_FPaZFqTFU0XzkzUlJUZzA
378M    /home/magi/.gdfuse/magi/cache/0B5nso_FPaZFqeldzUmhPeC03Zm8
377M    /home/magi/.gdfuse/magi/cache/0B5nso_FPaZFqRGd4V0VrOXM4YVU
100M    /usr/lib/x86_64-linux-gnu/libOxideQtCore.so.0
93M /usr/lib/firefox/libxul.so
84M /var/lib/snapd/snaps/core_3604.snap
84M /var/lib/snapd/snaps/core_3440.snap
84M /var/lib/snapd/snaps/core_3247.snap

详解:

  • find:在目录结构中搜索文件的命令
  • /:在整个系统(从根目录开始)中查找
  • -type:指定文件类型

    • f:普通文件
  • -exec:在所选文件上运行指定命令
  • du:计算文件占用的磁盘空间的命令
  • -S:不包含子目录的大小
  • -h:以可读格式打印
  • {}:递归地查找目录,统计每个文件占用的磁盘空间
  • |:控制操作符,将一条命令的输出传递给下一个命令以供进一步处理
  • sort:对文本文件进行按行排序的命令
  • -r:反转结果
  • -h:用可读格式打印输出
  • head:输出文件开头部分的命令
  • n -10:打印前 10 个文件

方法 3

这里介绍另一种在 Linux 系统中搜索最大的前 10 个文件的方法。

# find / -type f -print0 | xargs -0 du | sort -n | tail -10 | cut -f2 | xargs -I{} du -sh {}

84M /var/lib/snapd/snaps/core_3247.snap
84M /var/lib/snapd/snaps/core_3440.snap
84M /var/lib/snapd/snaps/core_3604.snap
93M /usr/lib/firefox/libxul.so
100M    /usr/lib/x86_64-linux-gnu/libOxideQtCore.so.0
377M    /home/magi/.gdfuse/magi/cache/0B5nso_FPaZFqRGd4V0VrOXM4YVU
378M    /home/magi/.gdfuse/magi/cache/0B5nso_FPaZFqeldzUmhPeC03Zm8
564M    /home/magi/.gdfuse/magi/cache/0B5nso_FPaZFqTFU0XzkzUlJUZzA
1.1G    /home/magi/ubuntu-17.04-desktop-amd64.iso
1.4G    /swapfile

详解:

  • find:在目录结构中搜索文件的命令
  • /:在整个系统(从根目录开始)中查找
  • -type:指定文件类型

    • f:普通文件
  • -print0:输出完整的文件名,其后跟一个空字符(null)
  • |:控制操作符,将一条命令的输出传递给下一个命令以供进一步处理
  • xargs:将标准输入转换成命令行参数的命令
  • -0:以空字符(null)而不是空白字符来分割记录
  • du:计算文件占用的磁盘空间的命令
  • sort:对文本文件进行按行排序的命令
  • -n:根据数字大小进行比较
  • tail -10:输出文件结尾部分的命令(最后 10 个文件)
  • cut:从每行删除特定部分的命令
  • -f2:只选择特定字段值
  • -I{}:将初始参数中出现的每个替换字符串都替换为从标准输入读取的名称
  • -s:仅显示每个参数的总和
  • -h:用可读格式打印输出
  • {}:递归地查找目录,统计每个文件占用的磁盘空间

方法 4

还有一种在 Linux 系统中查找最大的前 10 个文件的方法。

# find / -type f -ls | sort -k 7 -r -n | head -10 | column -t | awk '{print $7,$11}'

1494845440 /swapfile
1085984380 /home/magi/ubuntu-17.04-desktop-amd64.iso
591003648 /home/magi/.gdfuse/magi/cache/0B5nso_FPaZFqTFU0XzkzUlJUZzA
395770383 /home/magi/.gdfuse/magi/cache/0B5nso_FPaZFqeldzUmhPeC03Zm8
394891761 /home/magi/.gdfuse/magi/cache/0B5nso_FPaZFqRGd4V0VrOXM4YVU
103999072 /usr/lib/x86_64-linux-gnu/libOxideQtCore.so.0
97356256 /usr/lib/firefox/libxul.so
87896064 /var/lib/snapd/snaps/core_3604.snap
87793664 /var/lib/snapd/snaps/core_3440.snap
87089152 /var/lib/snapd/snaps/core_3247.snap

详解:

  • find:在目录结构中搜索文件的命令
  • /:在整个系统(从根目录开始)中查找
  • -type:指定文件类型

    • f:普通文件
  • -ls:在标准输出中以 ls -dils 的格式列出当前文件
  • |:控制操作符,将一条命令的输出传递给下一个命令以供进一步处理
  • sort:对文本文件进行按行排序的命令
  • -k:按指定列进行排序
  • -r:反转结果
  • -n:根据数字大小进行比较
  • head:输出文件开头部分的命令
  • -10:打印前 10 个文件
  • column:将其输入格式化为多列的命令
  • -t:确定输入包含的列数并创建一个表
  • awk:模式扫描和处理语言
  • '{print $7,$11}':只打印指定的列

via: https://www.2daygeek.com/how-to-find-search-check-print-top-10-largest-biggest-files-in-linux/

作者:Magesh Maruthamuthu 译者:jessie-pang 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

每个人都知道 PID,究竟什么是 PID?为什么你想要 PID?你打算用 PID 做什么?你脑子里有同样的问题吗?如果是这样,你就找对地方了解这些细节了。

我们查询 PID 主要是用来杀死一个没有响应的程序,它类似于 Windows 任务管理器一样。 Linux GUI 也提供相同的功能,但 CLI 是执行 kill 操作的有效方法。

什么是进程 ID?

PID 代表 进程标识号 process identification ,它在大多数操作系统内核(如 Linux、Unix、macOS 和 Windows)中使用。它是在操作系统中创建时自动分配给每个进程的唯一标识号。一个进程是一个正在运行的程序实例。

建议阅读: 如何查看 Apache Web 服务器在 Linux 中的运行时间

除了 init 进程外其他所有的进程 ID 每次都会改变,因为 init 始终是系统上的第一个进程,并且是所有其他进程的父进程。它的 PID 是 1。

PID 默认的最大值是 32768。可以在你的系统上运行 cat /proc/sys/kernel/pid_max 来验证。在 32 位系统上,32768 是最大值,但是我们可以在 64 位系统上将其设置为最大 2 22(约 4 百万)内的任何值。

你可能会问,为什么我们需要这么多的 PID?因为我们不能立即重用 PID,这就是为什么。另外为了防止可能的错误。

系统正在运行的进程的 PID 可以通过使用 pidofpgreppspstree 命令找到。

方法 1:使用 pidof 命令

pidof 用于查找正在运行的程序的进程 ID。它在标准输出上打印这些 id。为了演示,我们将在 Debian 9(stretch)系统中找出 Apache2 的进程 ID。

# pidof apache2
3754 2594 2365 2364 2363 2362 2361

从上面的输出中,你可能会遇到难以识别进程 ID 的问题,因为它通过进程名称显示了所有的 PID(包括父进程和子进程)。因此,我们需要找出父 PID(PPID),这是我们要查找的。它可能是第一个数字。在本例中,它是 3754,并按降序排列。

方法 2:使用 pgrep 命令

pgrep 遍历当前正在运行的进程,并将符合选择条件的进程 ID 列到标准输出中。

# pgrep apache2
2361
2362
2363
2364
2365
2594
3754

这也与上面的输出类似,但是它将结果从小到大排序,这清楚地说明父 PID 是最后一个。在本例中,它是 3754

注意: 如果你有多个进程的进程 ID,那么在使用 pidofpgrep 识别父进程 ID 时就可能不会很顺利。

方法 3:使用 pstree 命令

pstree 将运行的进程显示为一棵树。树的根是某个 pid,如果省略了 pid 参数,那么就是 init。如果在 pstree 命令中指定了用户名,则显示相应用户拥有的所有进程。

pstree 会将相同的分支放在方括号中,并添加重复计数的前缀来可视化地合并到一起。

# pstree -p | grep "apache2"
 |- apache2(3754) -|-apache2(2361)
 | |-apache2(2362)
 | |-apache2(2363)
 | |-apache2(2364)
 | |-apache2(2365)
 | `-apache2(2594)

要单独获取父进程,请使用以下格式。

# pstree -p | grep "apache2" | head -1
 |- apache2(3754) -|-apache2(2361)

pstree 命令非常简单,因为它分别隔离了父进程和子进程,但这在使用 pidofpgrep 时命令不容易做到。

方法 4:使用 ps 命令

ps 显示活动进程的选择信息。它显示进程 ID(pid=PID)、与进程关联的终端(tname=TTY)、以 [DD-]hh:mm:ss 格式(time=TIME)显示的累计 CPU 时间、以及执行名(ucmd = CMD)。输出默认是未排序的。

# ps aux | grep "apache2"
www-data 2361 0.0 0.4 302652 9732 ? S 06:25 0:00 /usr/sbin/apache2 -k start
www-data 2362 0.0 0.4 302652 9732 ? S 06:25 0:00 /usr/sbin/apache2 -k start
www-data 2363 0.0 0.4 302652 9732 ? S 06:25 0:00 /usr/sbin/apache2 -k start
www-data 2364 0.0 0.4 302652 9732 ? S 06:25 0:00 /usr/sbin/apache2 -k start
www-data 2365 0.0 0.4 302652 8400 ? S 06:25 0:00 /usr/sbin/apache2 -k start
www-data 2594 0.0 0.4 302652 8400 ? S 06:55 0:00 /usr/sbin/apache2 -k start
root 3754 0.0 1.4 302580 29324 ? Ss Dec11 0:23 /usr/sbin/apache2 -k start
root 5648 0.0 0.0 12784 940 pts/0 S+ 21:32 0:00 grep apache2

从上面的输出中,我们可以根据进程的启动日期轻松地识别父进程 ID(PPID)。在此例中,apache2 启动于 Dec 11,它是父进程,其他的是子进程。apache2 的 PID 是 3754


via: https://www.2daygeek.com/how-to-check-find-the-process-id-pid-ppid-of-a-running-program-in-linux/

作者:Magesh Maruthamuthu 译者:geekpi 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出