Linux 常见问题汇总
常用命令
查看发行版名称和版本号
LSB
LSB(Linux 标准库 Linux Standard Base)能够打印发行版的具体信息,包括发行版名称、版本号、代号等。
笔者没有测试成功
lsb_release -a
release 文件
release 文件通常被视为操作系统的标识。在 /etc
目录下放置了很多记录着发行版各种信息的文件,每个发行版都各自有一套这样记录着相关信息的文件。
Ubuntu / Debian
系统信息
方法 1
cat /etc/issue # 或 cat /etc/issue.net
返回如下:
root@localhost:/# cat /etc/issue Debian GNU/Linux 10 \n \l root@localhost:/# cat /etc/issue.net Debian GNU/Linux 10
方法 2
cat /etc/os-release
返回如下:
root@localhost:/# cat /etc/os-release PRETTY_NAME="Debian GNU/Linux 10 (buster)" NAME="Debian GNU/Linux" VERSION_ID="10" VERSION="10 (buster)" VERSION_CODENAME=buster ID=debian HOME_URL="https://www.debian.org/" SUPPORT_URL="https://www.debian.org/support" BUG_REPORT_URL="https://bugs.debian.org/"
版本信息
cat /etc/debian_version
返回如下:
root@localhost:/# cat /etc/debian_version
10.13
RHEL / CentOS / Fedora
系统信息
方法 1
cat /etc/centos-release # 或 cat /etc/fedora-release # 或 cat /etc/redhat-release # 或 cat /etc/system-release
返回如下:
[root@localhost freeswitch]# cat /etc/centos-release CentOS Linux release 7.9.2009 (Core)
方法 2
cat /etc/os-release
返回如下:
[root@localhost freeswitch]# cat /etc/os-release NAME="CentOS Linux" VERSION="7 (Core)" ID="centos" ID_LIKE="rhel fedora" VERSION_ID="7" PRETTY_NAME="CentOS Linux 7 (Core)" ANSI_COLOR="0;31" CPE_NAME="cpe:/o:centos:centos:7" HOME_URL="https://www.centos.org/" BUG_REPORT_URL="https://bugs.centos.org/" CENTOS_MANTISBT_PROJECT="CentOS-7" CENTOS_MANTISBT_PROJECT_VERSION="7" REDHAT_SUPPORT_PRODUCT="centos" REDHAT_SUPPORT_PRODUCT_VERSION="7"
版本信息
无
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。
version 文件
这个文件记录了 Linux 内核的版本、用于编译内核的 gcc 的版本、内核编译的时间,以及内核编译者的用户名。
cat /proc/version
返回如下:
Linux version 3.10.0-1160.83.1.el7.x86_64 (mockbuild@kbuilder.bsys.centos.org) (gcc version 4.8.5 20150623 (Red Hat 4.8.5-44) (GCC) ) #1 SMP Wed Jan 25 16:41:43 UTC 2023
dmesg
dmesg(展示信息 display message 或驱动程序信息 driver message)是大多数类 Unix 操作系统上的一个命令,用于打印内核的消息缓冲区的信息。
dmesg | grep "Linux"
返回如下:
[root@localhost freeswitch]# dmesg | grep "Linux"
[ 0.000000] Linux version 3.10.0-1160.83.1.el7.x86_64 (mockbuild@kbuilder.bsys.centos.org) (gcc version 4.8.5 20150623 (Red Hat 4.8.5-44) (GCC) ) #1 SMP Wed Jan 25 16:41:43 UTC 2023
[ 0.143592] SELinux: Initializing.
[ 0.143601] SELinux: Starting in permissive mode
[ 0.322685] ACPI: Added _OSI(Linux-Dell-Video)
[ 0.329952] ACPI: [Firmware Bug]: BIOS _OSI(Linux) query ignored
[ 0.822309] SELinux: Registering netfilter hooks
[ 0.843850] Linux agpgart interface v0.103
[ 0.851590] Loaded X.509 cert 'CentOS Linux kpatch signing key: ea0413152cde1d98ebdca3fe6f0230904c9ef717'
[ 0.851602] Loaded X.509 cert 'CentOS Linux Driver update signing key: 7f421ee0ab69461574bb358861dbe77762a4201b'
[ 0.851953] Loaded X.509 cert 'CentOS Linux kernel signing key: 833de5b797c7f1860d1feac806b6dafed078f069'
[ 4.796150] SELinux: Disabled at runtime.
[ 4.796167] SELinux: Unregistering netfilter hooks
Yum
Yum(Yellowdog 更新器修改版 Yellowdog Updater Modified)是 Linux 操作系统上的一个包管理工具,而 yum 命令被用于一些基于 RedHat 的 Linux 发行版上安装、更新、查找、删除软件包。
yum info nano
返回如下:
[root@localhost freeswitch]# yum info nano
已加载插件:fastestmirror, ovl
Repository freeswitch is listed more than once in the configuration
Repository freeswitch-debuginfo is listed more than once in the configuration
Repository freeswitch-source is listed more than once in the configuration
Loading mirror speeds from cached hostfile
* base: mirrors.aliyun.com
* centos-sclo-rh: mirrors.163.com
* centos-sclo-sclo: mirrors.ustc.edu.cn
* epel: mirror.lzu.edu.cn
* extras: mirrors.aliyun.com
* nux-dextop: li.nux.ro
* updates: mirrors.aliyun.com
已安装的软件包
名称 :nano
架构 :x86_64
版本 :2.3.1
发布 :10.el7
大小 :1.6 M
源 :installed
来自源:base
简介 : A small text editor
网址 :http://www.nano-editor.org
协议 : GPLv3+
描述 : GNU nano is a small and friendly text editor.
下面的 yum repolist 命令执行后显示了 yum 的基础源仓库、额外源仓库、更新源仓库都来自 CentOS 7 仓库。
yum repolist
返回如下:
[root@localhost freeswitch]# yum repolist
已加载插件:fastestmirror, ovl
Repository freeswitch is listed more than once in the configuration
Repository freeswitch-debuginfo is listed more than once in the configuration
Repository freeswitch-source is listed more than once in the configuration
Loading mirror speeds from cached hostfile
* base: mirrors.aliyun.com
* centos-sclo-rh: mirrors.163.com
* centos-sclo-sclo: mirrors.ustc.edu.cn
* epel: mirror.lzu.edu.cn
* extras: mirrors.aliyun.com
* nux-dextop: li.nux.ro
* updates: mirrors.aliyun.com
源标识 源名称 状态
base/7/x86_64 CentOS-7 - Base - mirrors.aliyun.com 10,072
centos-sclo-rh/x86_64 CentOS-7 - SCLo rh 8,170
centos-sclo-sclo/x86_64 CentOS-7 - SCLo sclo 816
docker-ce-stable/7/x86_64 Docker CE Stable - x86_64 210
epel/x86_64 Extra Packages for Enterprise Linux 7 - x86_64 13,747
extras/7/x86_64 CentOS-7 - Extras - mirrors.aliyun.com 515
forensics/7/x86_64 CERT Forensics Tools Repository 878
forensics-splunk/7/x86_64 CERT Forensics Tools Repository - Splunk 5
freeswitch FreeSWITCH Packages for Enterprise Linux 7 - x86_64 1,690
freeswitch-debuginfo FreeSWITCH Packages for Enterprise Linux 7 - x86_64 - Debug 1,690
freeswitch-source FreeSWITCH Packages for Enterprise Linux 7 - x86_64 - Source 1,690
nux-dextop/x86_64 Nux.Ro RPMs for general desktop use 2,724
updates/7/x86_64 CentOS-7 - Updates - mirrors.aliyun.com 4,706
repolist: 46,913
RPM
RPM(红帽包管理器 RedHat Package Manager)是在 CentOS、Oracle Linux、Fedora 这些基于 RedHat 的操作系统上的一个强大的命令行包管理工具,同样也可以帮助我们查看系统的版本信息。
rpm -q nano
返回如下:
[root@localhost freeswitch]# rpm -q nano
nano-2.3.1-10.el7.x86_64
查看文件夹大小
du -h --max-depth=1 /home
-h:表示用 K、M、G 的人性化形式显示
-s:表示总结的意思,即只列出一个总结的值
-a:表示包括目录和文件
--max-depth:表示只深入到第 n 目录,此处设置为 1,即表示深入 1 层目录。
/home:表示查看 home 目录
查找文件内容
Linux 里利用 grep 和 find 命令查找文件内容
从文件内容查找匹配指定字符串的行:
grep "被查找的字符串" 文件名
例子:在当前目录里第一级文件夹中寻找包含指定字符串的 .in 文件
grep "thermcontact" /.in
从文件内容查找与正则表达式匹配的行:
grep –e "正则表达式" 文件名
查找时不区分大小写:
grep –i "被查找的字符串" 文件名
查找匹配的行数:
grep -c "被查找的字符串" 文件名
从文件内容查找不匹配指定字符串的行:
grep –v "被查找的字符串" 文件名
从根目录开始查找所有扩展名为 .log 的文本文件,并找出包含 "ERROR" 的行:
find / -type f -name "*.log" | xargs grep "ERROR"
例子:从当前目录开始查找所有扩展名为 .in 的文本文件,并找出包含 "thermcontact" 的行:
find . -name "*.in" | xargs grep "thermcontact"
压缩解压
tar
五个独立的参数,压缩解压都要用到其中一个,可以和别的参数连用但只能用其中一个:
- -c:建立压缩档案
- -x:解压
- -t:查看内容
- -r:向压缩归档文件末尾追加文件
- -u:更新原压缩包中的文件
根据需要在压缩或解压档案时可选的参数:
- -z:有 gzip 属性的
- -j:有 bz2 属性的
- -Z:有 compress 属性的
- -v:显示所有过程
- -O:将文件解开到标准输出
必须加的参数:
- -f: 使用档案名字,切记,这个参数是最后一个参数,后面只能接档案名。(必须加)
# 这条命令是将所有.jpg的文件打成一个名为all.tar的包。-c是表示产生新的包,-f指定包的文件名。
tar -cf all.tar *.jpg
# 这条命令是将所有.gif的文件增加到all.tar的包里面去。-r是表示增加文件的意思。
tar -rf all.tar *.gif
# 这条命令是更新原来tar包all.tar中logo.gif文件,-u是表示更新文件的意思。
tar -uf all.tar logo.gif
# 这条命令是列出all.tar包中所有文件,-t是列出文件的意思
tar -tf all.tar
# 这条命令是解出all.tar包中所有文件,-x是解开的意思
tar -xf all.tar
查看
在不解压的情况下查看压缩包的内容:
tar -tf aaa.tar.gz
压缩
注意:多个文件夹,直接空格跟在后面就好。举例:tar –cvf jpg.tar *.jpg /home/jpg/*.jpg
将目录里所有 jpg 文件打包成 jpg.tar:
tar –cvf jpg.tar *.jpg
将目录里所有 jpg 文件打包成 jpg.tar 后,并且将其用 gzip 压缩,生成一个 gzip 压缩过的包,命名为 jpg.tar.gz:
tar –czf jpg.tar.gz *.jpg
将目录里所有 jpg 文件打包成 jpg.tar 后,并且将其用 bzip2 压缩,生成一个 bzip2 压缩过的包,命名为 jpg.tar.bz2:
tar –cjf jpg.tar.bz2 *.jpg
将目录里所有 jpg 文件打包成 jpg.tar 后,并且将其用 compress 压缩,生成一个 umcompress 压缩过的包,命名为 jpg.tar.Z:
tar –cZf jpg.tar.Z *.jpg
解压
解压 tar 包:
tar –xvf file.tar
解压 tar.gz:
tar -xzvf file.tar.gz
解压 tar.bz2:
tar -xjvf file.tar.bz2
解压 tar.Z:
tar –xZvf file.tar.Z
gz
压缩
- -c:将压缩数据输出到标准输出中,并保留源文件。
- -d:对压缩文件进行解压缩。
- -r:递归压缩指定目录下以及子目录下的所有文件。
- -v:对于每个压缩和解压缩的文件,显示相应的文件名和压缩比。
-l:对每一个压缩文件,显示以下字段。
- 压缩文件的大小;
- 未压缩文件的大小;
- 压缩比;
- 未压缩文件的名称。
- -<数字>:用于指定压缩等级,-1 压缩等级最低,压缩比最差;-9 压缩比最高。默认压缩比是 -6。
语法:
gzip [选项] 源文件
基本压缩:
# 压缩instal.log 文件
# 注意:压缩文件生成,但是源文件也消失了
gzip install.log
保留源文件压缩:
# 使用-c选项,但是不让压缩数据输出到屏幕上,而是重定向到压缩文件中,这样可以缩文件的同时不删除源文件
gzip -c anaconda-ks.cfg >anaconda-ks.cfg.gz
压缩目录:
gzip -r test/
注意:执行后 test 目录依然存在,并没有变为压缩文件。原来gzip命令不会打包目录,而是把目录下所有的子文件分别压缩。在 Linux 中,打包和压缩是分开处理的。而 gzip 命令只会压缩,不能打包,所以才会出现没有打包目录,而只把目录下的文件进行压缩的情况。
解压
- -r:递归处理,解压缩指定目录下以及子目录下的所有文件。
- -c:把解压缩后的文件输出到标准输出设备。
- -f:强制解压缩文件,不理会文件是否已存在等情况。
- -l:列出压缩文件内容。
- -v:显示命令执行过程。
- -t:测试压缩文件是否正常,但不对其做解压缩操作。
语法:
gunzip [选项] 文件
直接解压缩文件:
gunzip install.log.gz
当然,gunzip -r
依然只会解压缩目录下的文件,而不会解打包。要想解压缩 .gz
格式,还可以使用 gzip -d
命令,例如:
gzip -d anaconda-ks.cfg.gz
解压缩目录下的内容:
gunzip -r test/
注意,如果我们压缩的是一个纯文本文件,则可以直接使用 zcat
命令在不解压缩的情况下查看这个文本文件中的内容。例如:
zcat anaconda-ks.cfg.gz
zip
查看
只看一下 zip 压缩包中包含哪些文件,不进行解压缩:
unzip -l test.zip
查看显示的文件列表还包含压缩比率:
unzip -v test.zip
检查 zip 文件是否损坏:
unzip -t test.zip
压缩
- -r:递归压缩目录,及将制定目录下的所有文件以及子目录全部压缩。
- -m:将文件压缩之后,删除原始文件,相当于把文件移到压缩文件中。
- -v:显示详细的压缩过程信息。
- -q:在压缩的时候不显示命令的执行过程。
- -<数字>:压缩级别是从 1~9 的数字,-1 代表压缩速度更快,-9 代表压缩效果更好。
- -u:更新压缩文件,即往压缩文件中添加新文件。
语法:
zip [选项] 压缩包名 源文件或源目录列表
基本使用:
# 单个文件
zip ana.zip anaconda-ks.cfg
# 多个文件
zip test.zip install.log install.log.syslog
压缩目录:
zip -r dir1.zip dir1
解压
- -d:将压缩文件解压到指定目录下。如:
-d /temp
- -n:解压时并不覆盖已经存在的文件。
- -o:解压时覆盖已经存在的文件,并且无需用户确认
- -v:查看压缩文件的详细信息,包括压缩文件中包含的文件大小、文件名以及压缩比等,但并不做解压操作。
- -t:测试压缩文件有无损坏,但并不解压。
- -x:解压文件,但不包含文件列表中指定的文件。如:
-x aa.txt
把文件解压到当前目录下:
unzip test.zip
如果要把文件解压到指定的目录下,需要用到 -d 参数:
unzip -d /temp test.zip
解压的时候,有时候不想覆盖已经存在的文件,那么可以加上 -n 参数:
unzip -n test.zip
unzip -n -d /temp test.zip
将压缩文件 test.zip 在指定目录 tmp 下解压缩,如果已有相同的文件存在,要求 unzip 命令覆盖原先的文件:
unzip -o test.zip -d /tmp/
rar
安装:
apt-get install rar unrar
rar:
- a:压缩文件
- p:设置密码。密码紧随其后,如
-p123
。
unrar:
- l[t,b]:列出压缩文件[技术信息,简洁]
- v[t,b]:详细列出压缩文件[技术信息,简洁]
- e:解压压缩文件到当前目录
- x:用绝对路径解压文件
- t:测试压缩文件
注意:rar 的命令参数没有 -
,如果加上会报错。
压缩
# 使用a参数添加一个目录到一个归档文件中,如果该文件不存在就会自动创建
rar a test.rar .
rar a test.rar ./test
解压
# 全路径解压
unrar x test.rar
# 去掉路径解压
unrar e test.rar tmp/
查找已安装软件
rpm -qa | grep 软件包
系统问题汇总
Debian
开启 root 登录
默认情况下,Debian 操作系统不允许 root 用户直接登录。相反,您需要通过 sudo 命令以普通用户的身份执行特权命令。这是出于安全考虑,因为直接登录 root 账户存在一些潜在的风险。
然而,如果您仍然想要开启 root 登录,可以按照以下步骤操作:
- 使用普通用户登录系统。
打开终端并输入以下命令以切换到 root 用户:
su root
编辑
/etc/ssh/sshd_config
文件,找到下面这一行并将其注释掉:#PermitRootLogin prohibit-password
将其修改为:
PermitRootLogin yes
- 保存并关闭文件。
重新启动 SSH 服务以使更改生效:
systemctl restart ssh
现在,您应该能够直接使用 root 用户登录 Debian 系统。请记住,在使用 root 账户时,应该非常小心,避免不必要的操作或者错误,以避免系统受到损害或数据丢失。