Linux系统常用命令的整理和说明,包括文件操作、系统管理、网络配置等内容。
Linux根目录
Linux根目录(/
)是文件系统的最顶层目录,它包含了系统的所有其他文件和目录。每个位于根目录下的目录都有其特定的用途和约定。以下是Linux根目录下常见目录的简要说明:
/bin
包含用户和系统操作所需的重要可执行文件(命令),如ls
、cp
等。这些命令对于系统的基本功能至关重要。
/boot
存放启动Linux系统时使用的文件,包括Linux内核文件(通常是vmlinuz
)、引导加载程序(如GRUB)的配置文件以及初始化RAM磁盘(initrd)。
/dev
包含设备文件,这些文件代表系统中的硬件设备,允许程序和脚本与这些设备进行交互,如硬盘(/dev/sda
)、终端(/dev/tty
)等。
/etc
存放系统全局配置文件,如启动脚本、网络配置文件以及各种服务和程序的配置文件。
/home
用户的主目录,通常每个用户在/home
下有一个与其用户名同名的目录,用于存放个人文件、配置文件等。
/lib
包含系统和应用程序运行所需的共享库文件和内核模块。共享库类似于Windows中的DLL文件。
/media
和/mnt
/media
通常用于挂载可移除媒体,如CD-ROMs、USB驱动器等,而/mnt
经常被用作临时挂载文件系统的点。
/opt
用于安装”可选”的软件和第三方应用程序,这些应用程序通常以包的形式独立于系统默认的软件管理。
/proc
一个虚拟的文件系统,提供对内核和进程信息的接口,如系统内存、配置参数(通过文件系统接口访问)。
/root
超级用户(root用户)的主目录,类似于普通用户的/home/用户名
目录,但位于根目录下。
/sbin
包含系统管理和维护的重要可执行文件,通常只有root用户才能运行这些命令,如fdisk
、ifconfig
等。
/srv
用于存放一些服务启动之后需要的数据,这些服务直接提供给系统外部使用。
/sys
像/proc
一样,/sys
也是一个虚拟的文件系统,提供了内核对象的接口,它允许内核和用户空间通信,以及配置内核。
/tmp
用于存放临时文件,任何用户都可以在此目录下创建和删除文件。系统可能在重启时清除此目录下的文件。
/usr
包含用户级别的应用程序和文件,/usr
目录下包含了许多子目录,如/usr/bin
、/usr/lib
、/usr/local
等,用于存放非必需的应用程序、库文件、文档等。
/var
用于存放经常变化的文件,如日志文件(/var/log
)、包和数据库文件(/var/lib
)、临时电子邮件文件(/var/mail
)等。
这些目录构成了Linux文件系统的标准布局,不同的发行版可能会有轻微的变化或扩展。
重启网络(显示wifi图标)
$ 192.168.79.133
$ 192.168.79.133
$ sudo nmcli network on
查找
find
查找特定名称的文件:
$ find /path/to/search -name “filename.txt”
文件:
-type f
30天内被修改过
-mtime -30
处理深度:
可以通过-maxdepth和-mindepth选项控制搜索的深度。
grep
在文件中搜索文本:
$ grep “search pattern” filename
递归搜索目录中的所有文件:
$ grep -r “search pattern” /path/to/search
忽略大小写地搜索文本:
-i
显示匹配行的行号:
-n
exec
-exec后面跟着要执行的命令,然后是{},它代表当前处理的文件名,最后以;结束
查找名为config.php的文件,并使用chmod命令更改它们的权限:
$ find /path/to/search -type f -name “config.php” -exec chmod 644 {} ;
使用;来终结-exec命令是必须的,因为没有它,find命令就不知道-exec选项的参数在哪里结束。
|
管道(|)是一个Shell特性,它允许你将一个命令的输出作为另一个命令的输入。与-exec不同,管道通常与xargs命令一起使用,xargs可以将标准输入(stdin)转换为命令行参数。
xargs主要用于将标准输入数据转换为命令行参数。在你的场景中,由于grep可以直接从标准输入读取数据进行搜索,实际上不需要xargs来实现这一功能。
qemu-system-riscv64 -help | grep “machine”
查找当前目录及子目录下所有.log文件,并使用grep命令在它们中搜索”error”字符串:
$ find . -type f -name “*.log” | xargs grep “error”
xargs命令的-0(或–null)选项期望输入项以null字符(\0)分隔,这通常与find … -print0命令一起使用。
性能:使用-exec时,find会为每个找到的文件启动一个新的进程来执行指定的命令。而管道到xargs的方式会尝试减少进程的数量,通过将多个文件名作为单个命令的参数来提高效率。
安全性:-exec直接由find处理,可以安全地处理文件名中的特殊字符。而使用管道到xargs时,如果不加-0选项(并且find使用-print0),可能会遇到文件名中包含空格、换行符等特殊字符的问题。
灵活性:管道允许你利用Shell的特性组合多个命令,可以实现更复杂的处理流程。
选择使用-exec还是管道(配合xargs),取决于具体的任务需求、对性能的考量以及对特殊文件名的处理需求。
git
查看所有Git配置项:
$ git config –list
user.name=LuLuji04
user.email=liuyuji010@126.com
https.proxy=192.168.3.11:7890
credential.helper=store
http.proxy=192.168.3.11:7890
core.editor=vim
color.ui=true
查看特定配置项的值,如user.name:
$ git config user.name
$ git config –global user.name “Your Name”
$ git config –global user.email “youremail@example.com“
man
man 手册的数字编号
man 1 kill、man 2 kill,这些命令都是查看 kill 命令的手册,但是文档却大不相同。
因为 kill 是一个命令行的工具,which kill 看到 /usr/bin/kill 是一个二进制文件;其实,也有一个系统调用叫做 kill。
man 1 kill 显示的是命令行工具 kill 的手册;
man 2 kill 显示系统调用 kill 的手册;
显示什么类型的手册,由 man 和命令中间的数字决定,目前共有 9 个 man 支持的数字。
数字 说明
1 可执行程序或 Shell 命令
2 系统调用(内核提供的函数)
3 库调用
4 特殊文件(通常位于 /dev 目录)
5 文件格式和约定(比如 /etc/passwd)
6 游戏
7 杂项(包和一些约定)Miscellaneous (including macro packages and conventions), e.g. man(7), groff(7)
8 系统管理命令(通常是 root 用户执行的命令)
9 内核相关的文件 Kernel routines [Non standard]
@/bin/echo -e “NAME = $*\nSRCS = $<\ninclude $${AM_HOME}/Makefile” > $@:
这一行创建了一个新的Makefile,其中包含了被规则匹配的测试文件的名称($*,表示不带前缀的目标名称)和路径($<,表示规则的第一个依赖)。
$${AM_HOME}是环境变量AM_HOME的引用,这里使用两个$是为了在Makefile中延迟变量的扩展。
输出重定向到$@,即目标文件Makefile.
if
@if make -s -f $@ ARCH=$(ARCH) $(MAKECMDGOALS); then
printf “[%14s] $(COLOR_GREEN)PASS!$(COLOR_NONE)\n” $* >> $(RESULT);
else
printf “[%14s] $(COLOR_RED)FAIL!$(COLOR_NONE)\n” $* >> $(RESULT);
fi
这里使用make命令来执行刚刚生成的Makefile(-f $@),传递ARCH变量和当前的目标($(MAKECMDGOALS))。
-s选项使make在执行时不打印命令,只显示错误和警告。
tr
这段代码是在 Makefile 中使用的,它的目的是根据 ARCH
变量的值生成一个编译器的预处理器定义。让我们逐步解析它的含义:
$(shell command)
:Makefile 中的shell
函数执行一个 shell 命令,并返回命令的输出。在这个上下文中,它执行了两次tr
命令。echo $(ARCH)
:输出ARCH
变量的值。ARCH
是一个常见的环境变量,用于指示目标架构类型,如x86
、arm
等。tr a-z A-Z
:将小写字母转换为大写字母。这意味着如果ARCH
是小写的(如x86
),它会被转换为大写的(X86
)。tr - _
:将短划线(-
)转换为下划线(_
)。这是因为在C预处理器定义中,短划线不是一个有效的字符。
将这些组合起来:
-D__ARCH_$(shell echo $(ARCH) | tr a-z A-Z | tr - _)
这将创建一个预处理器定义,其名称基于 ARCH
环境变量的值,但所有的小写字母都被转换成了大写,所有的短划线都被转换成了下划线,前缀为 __ARCH_
。例如,如果 ARCH=x86-64
,这个定义将会是 -D__ARCH_X86_64
。
这样的预处理器定义可以在编译时提供目标架构的信息,使得源代码可以根据不同的架构进行条件编译。这是在跨平台开发中常见的做法,特别是在需要根据不同硬件架构调整编译选项和优化的情况下。
grep
grep -rnw ‘/path/to/somewhere/‘ -e ‘function_name’
这个命令会在指定路径
用户管理基本操作
以下是一些基本的用户管理操作:
1. 修改用户信息
如果需要修改用户的信息(比如更改家目录、登录Shell等),可以使用 usermod
命令。例如,更改用户的Shell为 /bin/zsh
:
1 | sudo usermod -s /bin/zsh userl |
2. 更改密码
更改用户密码,可以使用 passwd
命令:
1 | sudo passwd userl |
然后按照提示输入新密码。
3. 删除用户
如果要删除用户,可以使用 userdel
命令。如果同时想删除用户的家目录,可以添加 -r
选项:
1 | sudo userdel -r userl |
4. 用户组管理
添加用户到组:使用
usermod -aG
命令将用户添加到一个或多个附加组中:1
sudo usermod -aG groupname userl
创建新组:使用
groupadd
命令创建新组:1
sudo groupadd groupname
删除组:使用
groupdel
命令删除现有组:1
sudo groupdel groupname
5. 查看用户信息
查看用户的当前设置,包括用户ID、组ID、家目录等,可以使用
id
命令:1
id userl
查看系统中所有用户的列表,可以查看
/etc/passwd
文件:1
cat /etc/passwd
查看所有组的列表,可以查看
/etc/group
文件:1
cat /etc/group
用户管理是Linux系统管理中的一个重要部分,了解和掌握基本的用户和组管理命令对于维护系统的安全性和有效性至关重要。