当前位置: 首页 > 图灵资讯 > 技术篇> Linux中几个你不常用,但却很有用的命令

Linux中几个你不常用,但却很有用的命令

来源:图灵教育
时间:2023-05-19 09:16:50

以下可能是你从未使用过最后十个Linux的命令。挺有用的。

1)pgrep

在pgrep名称之前有一个p,我们可以猜到它与过程和grep有关。当然,这是一个与过程相关的grep命令。然而,该命令主要用于列出过程ID。例如:

$ pgrep -u hchen2244122444

这一命令相当于:

ps -ef | egrep '^hchen' | awk '{print $2}'

基于 Spring Boot + MyBatis Plus + Vue & Element 后台管理系统的实现 + 支持用户小程序 RBAC 动态权限、多租户、数据权限、工作流、三方登录、支付、短信、商场等功能。

项目地址:https://github.com/YunaiV/ruoyi-vue-pro

2)pstree

该命令可以树形列出。如下所示:

[hchen@RHELSVR5 ~]$ pstreeinit-+-acpid     |-auditd-+-python     |        `-{auditd}     |-automount---4*[{automount}]     |-backup.sh---sleep     |-dbus-daemon     |-events/0     |-events/1     |-hald---hald-runner---hald-addon-acpi     |-httpd---10*[httpd]     |-irqbalance     |-khelper     |-klogd     |-ksoftirqd/0     |-ksoftirqd/1     |-kthread-+-aio/0     |         |-aio/1     |         |-ata/0     |         |-ata/1     |         |-ata_aux     |         |-cqueue/0     |         |-cqueue/1     |         |-kacpid     |         |-kauditd     |         |-kblockd/0     |         |-kblockd/1     |         |-kedac     |         |-khubd     |         |-6*[kjournald]     |         |-kmirrord     |         |-kpsmoused     |         |-kseriod     |         |-kswapd0     |         |-2*[pdflush]     |         |-scsi_eh_0     |         |-scsi_eh_1     |         |-xenbus     |         `-xenwatch     |-migration/0     |-migration/1     |-6*[mingetty]     |-3*[multilog]     |-mysqld_safe---mysqld---9*[{mysqld}]     |-smartd     |-sshd---sshd---sshd---bash---pstree     |-svscanboot---svscan-+-3*[supervise---run]     |                     |-supervise---qmail-send-+-qmail-clean     |                     |                        |-qmail-lspawn     |                     |                        `-qmail-rspawn     |                     `-2*[supervise---tcpserver]     |-syslogd     |-udevd     |-watchdog/0     |-watchdog/1     `-xinetd

以微服务为基础,构建在 B2C 电子商务场景下的项目实战。核心技术栈,是 Spring Boot + Dubbo 。未来,它将被重构 Spring Cloud Alibaba 。

项目地址:https://github.com/YunaiV/onemall

3)bc

这个命令主要是做一个高精度的数学操作。比如开平方根。以下是我们用bc命令写的脚本(文件名:sqrt)

#!/bin/bashif [ $# -ne 1 ]then    echo 'Usage: sqrt number'    exit 1else    echo -e "sqrt($1)\nquit\n" | bc -q -ifi

因此,我们可以用这个脚本来计算平方根:

[hchen@RHELSVR5]$ ./sqrt 366[hchen@RHELSVR5]$ ./sqrt 2.00001.4142[hchen@RHELSVR5]$ ./sqrt 10.00003.1622

4)split

如果你有一个大文件,你想把它分成一些小文件,那么这个命令就是这样做的。

[hchen@RHELSVR5 applebak]# ls -l largefile.tar.gz-rw-r--r-- 1 hchen hchen 436774774 04-17 02:00 largefile.tar.gz[hchen@RHELSVR5 applebak]# split -b 50m largefile.tar.gz LF_[hchen@RHELSVR5]# ls -l LF_*-rw-r--r-- 1 hchen hchen 52428800 05-10 18:34 LF_aa-rw-r--r-- 1 hchen hchen 52428800 05-10 18:34 LF_ab-rw-r--r-- 1 hchen hchen 52428800 05-10 18:34 LF_ac-rw-r--r-- 1 hchen hchen 52428800 05-10 18:34 LF_ad-rw-r--r-- 1 hchen hchen 52428800 05-10 18:34 LF_ae-rw-r--r-- 1 hchen hchen 52428800 05-10 18:35 LF_af-rw-r--r-- 1 hchen hchen 52428800 05-10 18:35 LF_ag-rw-r--r-- 1 hchen hchen 52428800 05-10 18:35 LF_ah-rw-r--r-- 1 hchen hchen 17344374 05-10 18:35 LF_ai

文件合并只需使用简单的合并,如:

[hchen@RHELSVR5]#  cat LF_* >largefile.tar.gz

5)nl

其他nl命令与cat命令非常相似,但它会打上行号。如下所示:

[hchen@RHELSVR5 include]# nl stdio.h | head -n 10     1  /* Define ISO C stdio on top of C++ iostreams.     2     Copyright (C) 1991,1994-2004,2005,2006 Free Software Foundation, Inc.     3     This file is part of the GNU C Library.     4     The GNU C Library is free software; you can redistribute it and/or     5     modify it under the terms of the GNU Lesser General Public     6     License as published by the Free Software Foundation; either     7     version 2.1 of the License, or (at your option) any later version.     8     The GNU C Library is distributed in the hope that it will be useful,

6)mkfifo

熟悉Unix的人应该知道,这是一个创建著名管道的系统调用或命令。通常,我们在命令线上使用垂直线“|”将命令串起来,使用无命管道。我们使用mkfifo有名的管道。以下是示例:

以下是创建一条著名的管道:

[hchen@RHELSVR5 ~]# mkfifo /tmp/hchenpipe[hchen@RHELSVR5 ~]# ls -l /tmpprw-rw-r-- 1 hchen  hchen  0 05-10 18:58 hchenpipe

然后,我们在shell中运行以下命令,除非有人从这个著名的管道中读取信息,否则这个命令不会返回。

[hchen@RHELSVR5 ~]# ls -al > /tmp/hchenpipe

我们在另一个命令窗口读取管道中的信息:(它会导致上一个命令返回)

[hchen@RHELSVR5 ~]# head /tmp/hchenpipedrwx------ 8 hchen hchen    4096 05-10 18:27 .drwxr-xr-x 7 root  root     4096 03-05 00:06 ..drwxr-xr-x 3 hchen hchen    4096 03-01 18:13 backup-rw------- 1 hchen hchen     721 05-05 22:12 .bash_history-rw-r--r-- 1 hchen hchen      24 02-28 22:20 .bash_logout-rw-r--r-- 1 hchen hchen     176 02-28 22:20 .bash_profile-rw-r--r-- 1 hchen hchen     124 02-28 22:20 .bashrc-rw-r--r-- 1 root  root    14002 03-07 00:29 index.htm-rw-r--r-- 1 hchen hchen   31465 03-01 23:48 index.图灵

7)ldd

这个命令可以知道你的可执行文件使用了动态链接库。例如:

[hchen@RHELSVR5 ~]# ldd /usr/bin/java        linux-gate.so.1 =>  (0x00cd9000)        libgij.so.7rh => /usr/lib/libgij.so.7rh (0x00ed3000)        libgcj.so.7rh => /usr/lib/libgcj.so.7rh (0x00ed6000)        libpthread.so.0 => /lib/i686/nosegneg/libpthread.so.0 (0x00110000)        librt.so.1 => /lib/i686/nosegneg/librt.so.1 (0x009c8000)        libdl.so.2 => /lib/libdl.so.2 (0x008b5000)        libz.so.1 => /usr/lib/libz.so.1 (0x00be000)        libgcc_s.so.1 => /lib/libgcc_s.so.1 (0x00aa7000)        libc.so.6 => /lib/i686/nosegneg/libc.so.6 (0x0022f000)        libm.so.6 => /lib/i686/nosegneg/libm.so.6 (0x00127000)        /lib/ld-linux.so.2 (0x00214000)

8)col

这个命令可以让你将man文件转换为纯文本文件。以下示例:

# PAGER=cat# man less | col -b > less.txt

9)xmlwf

这个命令可以让你检查XML文档是否所有标签都正常。例如:

[hchen@RHELSVR5 ~]# curl 'https://www.tulingxueyuan.cn/d/file/p/20230519/uqwdpfcdd5d' > cocre.xml  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current                                 Dload  Upload   Total   Spent    Left  Speed100 64882    0 64882    0     0  86455      0 --:--:-- --:--:-- --:--:-- 2073k[hchen@RHELSVR5 ~]# xmlwf cocre.xml[hchen@RHELSVR5 ~]# perl -i -pe 's@<link>@<br>@g' cocre.xml[hchen@RHELSVR5 ~]# xmlwf cocre.xmlcocre.xml:13:23: mismatched tag

10)lsof

可列出打开的文件。

[root@RHELSVR5 ~]# lsof | grep TCPhttpd       548    apache    4u     IPv6   14300967    TCP *:http (LISTEN)httpd       548    apache    6u     IPv6   14300972    TCP *:https (LISTEN)httpd       561    apache    4u     IPv6   14300967    TCP *:http (LISTEN)httpd       561    apache    6u     IPv6   14300972    TCP *:https (LISTEN)sshd       1764      root    3u     IPv6       4993    TCP *:ssh (LISTEN)tcpserver  8965      root    3u     IPv4  153795500    TCP *:pop3 (LISTEN)mysqld    10202     mysql   10u     IPv4   73819697    TCP *:mysql (LISTEN)sshd      10735      root    3u     IPv6  160731956    TCP 210.51.0.232:ssh->123.117.239.68:31810 (ESTABLISHED)sshd      10767     hchen    3u     IPv6  160731956    TCP 210.51.0.232:ssh->123.117.239.68:31810 (ESTABLISHED)vsftpd    11095      root    3u     IPv4  152157957    TCP *:ftp (LISTEN)