ARM Linux 基础学习 / Linux Shell,必要命令全记录

编辑整理 by Staok。

本文部分内容摘自 “100ask imx6ull” 开发板的配套资料(如 百问网的《嵌入式Linux应用开发完全手册》,在 百问网 imx6ull pro 开发板 页面 中的《2.1 100ASK_IMX6ULL_PRO:开发板资料》或《2.2 全系列Linux教程:在线视频与配套资料》里面可以下载到),还有参考 菜鸟教程、C语言中文网、红联的等等等等,比较广泛,侵删。进行了精髓提取,方便日后查阅。过于基础的内容不会在此提及。如有错误恭谢指出!

注:在 Github 上的原版文章日后可能会更新,在其它位置发的不会跟进。文章的 Gitee 仓库地址,Gitee 访问更流畅。

terminal / console / tty / shell

一文搞懂~

终端、Shell、tty 和控制台(console)有什么区别? - 知乎 (zhihu.com)。

Linux Shell

概况

Shell 的意思是“外壳”,在 Linux 中它是一个程序,比如 /bin/sh、 /bin/bash 等。它负责接收用户的输入,根据用户的输入找到其他程序并运行。比如我们输入“ ls”并回车时, shell 程序找到“ ls”程序并运行,再把结果打印出来。Shell 有很多种实现,我们常用 bash。

命令提示符如下图。

根目录: "/" ;家目录: "~" ;上一级目录: ".." ;当前目录: "." ;上一次目录:"-"。执行当前目录的 "app" 应用程序: "./app" 。

绝对路径从 根目录 "/" 开始写起,相对目录从当前所在目录 “.” 开始写起。

常用命令
  • Linux 命令查询,当字典用

    • Linux 命令大全 - 菜鸟教程。

    • 即用网页:Linux命令搜索引擎 命令,Linux Linux命令搜索引擎 命令详解:最专业的Linux命令大全,内容包含Linux命令手册、详解、学习,值得收藏的Linux命令速查手册。 - Linux 命令搜索引擎 (wangchujiang.com),开源地址 jaywcjlove/linux-command: Linux命令大全搜索工具,内容包含Linux命令手册、详解、学习、搜集。https://git.io/linux (github.com)。

    • 即用网页:Linux工具快速教程 — Linux Tools Quick Tutorial (linuxtools-rst.readthedocs.io),开源地址 me115/linuxtools_rst: Linux工具快速教程 (github.com)。

    • 本地离线文档资料 Linux 命令速查:【1 Linux 命令速查 & Shell & Vim】\Linux 命令速查-快速定位查询\

    • 100ask 手册《嵌入式Linux应用开发完全手册》的 “第2章 开发板板载系统应用、库、工具、使用”。

    • Linux大神都是怎么记住这么多命令的? - 知乎 (zhihu.com)。

    • 20个提高生产力的 Linux 命令与技巧,用完带你起飞_布道者-瞎子的博客-CSDN博客.

  • Shell 教程 - 菜鸟教程,Shell脚本:Linux Shell脚本学习指南(超详细) (biancheng.net)。

  • 添加环境变量:具体步骤在 “换源 和 添加系统变量” 一节 里面的 “添加系统变量” 处。

快捷键 / 通配符 / 流重定向 / 管道
  • Linux 图形界面中(比如 Ubuntu 图形界面中),按下 Ctrl + Alt + t 打开终端。

  • 命令的 惯例选项 的含义:以下命令的多个选项可以任意按需组合。

    • -a 表含隐藏文件;

    • -r 表文件夹内遍历所有文件;

    • -h 容量以方便识别的形式打印(如容量大小以 K/M/G 单位显示);

    • -i 执行例外操作前会询问,加上比较保险;

    • -v 显示版本;

    • --help 显示帮助;

    • 等等。

  • 快捷键:

    • 结束当前进程:ctrl + c。

    • 暂停当前进程:ctrl + z,可使用 fg 命令 恢复,详见 任务后台执行 / 任务&进程查看 一节。

    • 使光标移动到命令行的最前:ctrl + a,对于长命令可以快速定位到最前。

    • 使光标移动到命令行的最后:ctrl + e。

    • 退出当前终端:ctrl + d,关闭,作用与 exit 一样。

    • 暂停终端的快速滚动(冻结):ctrl + s;解冻终端是用 ctrl + q。

  • 一行多个命令逐个执行:命令之间加 && 符号。

  • 一次运行多个命令:命令之间加上 ; 分号,即 command_1; command_2; command_3 形式。

  • 将命令放到后台执行:命令结尾加一个 & 符号,更多信息见 任务后台执行 / 任务&进程查看 一节。

  • 自动补全:tab 键自动补全命令和文件或目录的全名。输入路径全名的中途,按两下 tab 键显示当前目录下的内容。

  • shell 中 !! 代表上一个命令,原样替换,比如执行 command_1 后发现需要 root 权限,只需再执行 sudo !! 即可 带上 sudo 前缀执行上一次命令。

  • shell 中 !$ 代表 上一个命令的最后一项,比如 ls ~cd !$ 就是接连查看家目录和打开家目录。

  • 设置命令别名:设置 linux 命令别名_清泉影月的博客-CSDN博客。

    • 基本命令 alias ll=ls -l。删除别名 unalias [别名]

    • 直接执行 alias 命令后别名立马生效,只是临时生效,退出 shell 窗口就没了。

    • 永久生效方法:上述命令写到 /root/.bashrc 文件,用 source 命令让 .bashrc 文件生效。

  • 各种通配符:

    • *:任何字符和字符串。

    • ?:一个任意字符。

    • [abc...]: [ ] 内的任意一个字符。 [abc]表示 a、 b、 c 任一个字符;有时候也表示范围,如 [a-x] ,表示 a 到 x 的任一个字符; [1-9] 表示 1 到 9 的任一数字。

    • [!abc...]:和上面的相反,表示除 [ ] 内的字符外的任意一个字符。

    rm -f 1[!1]*.txt 删除名字中第一个字符是 “1” 而第二个字符不是为 “1” 的所有文件。

  • 流控制,输入 和 输出 重定向(> / >>, <):Shell 输入/输出重定向 | 菜鸟教程 (runoob.com)。

    • command > file,将 command 的 输出 重定向到 file(一个文件),即将 command 的输出流 stdout 重定向到 file,将 command 的打印内容覆盖输出到文件 file 里;command >> file,将输出以追加的方式重定向到 file,追加输入到文件 file。

    • command < file,将 command 的 输入 重定向到 file,即将 command 的输入流 stdin 重定向到 file,本来需要从键盘获取输入的命令会转移到读取文件内容。

    • 注意 输出重定向是大于号(>),输入重定向是小于号(<)。

    • 清空文本文件的内容而不删除文件本身:> 文件名

    • 错误信息重定向:

      一般情况下,每个 Unix/Linux 命令运行时都会打开三个文件:

      • 标准输入文件(stdin):stdin 的文件描述符为 0,Unix 程序默认从 stdin 读取数据。

      • 标准输出文件(stdout):stdout 的文件描述符为 1,Unix 程序默认向 stdout 输出数据。

      • 标准错误文件(stderr):stderr 的文件描述符为 2,Unix 程序会向 stderr 流中写入错误信息。

        command 2 >> file 让执行命令后的错误信息 stderr 追加到 file 文件末尾。

  • 管道( | ):

    command1 | command2,当在两个 命令/应用/进程 之间设置管道时,管道符|左边命令的输出就变成了右边命令的输入(管道 即进程间通讯的一种)。

    这里需要注意,command1 必须有正确输出,而 command2 必须可以处理 command1 的输出结果; command2 只能处理 command1 的正确输出结果,不能处理 command1 的错误信息。

    例:查看指定程序的进程运行状态,并将输出重定向到文件中。

    ps aux | grep httpd > /tmp/ps.output && cat /tmp/ps.output
基本命令 / 文件&目录管理

基本命令

pwdcdmkdir-p 选项指示连续创建目录及其子目录,如mkdir -p test1/test2/test3/test4)、rmdir(不能删除非空目录,-p 选项可以一次删除多级空目录)、touchclearecho(往文件写内容 echo none > /sys/class/leds/cpu/trigger)。

文件与目录管理

Linux 文件与目录管理 | 菜鸟教程 (runoob.com)。

  • ls(英文全拼:list files): 列出目录及文件名

  • cd(英文全拼:change directory):切换目录

  • pwd(英文全拼:print work directory):显示目前的目录

  • mkdir(英文全拼:make directory):创建一个新的目录

  • rmdir(英文全拼:remove directory):删除一个空的目录

  • cp(英文全拼:copy file): 复制文件或目录

  • rm(英文全拼:remove): 删除文件或目录

  • mv(英文全拼:move file): 移动文件与目录,或修改文件与目录的名称

显示目录文件和文件夹:ls

-l 显示完整属性信息;-a 显示隐藏文件;-h 文件和文件夹大小以 K/M/G 单位显示;-i参数显示文件的inode节点信息。一个例子如图。

统计目录每个文件大小:du

统计指定目录内每个文件和文件夹大小:du -ah ~/Videos。-a 表显示隐藏文件,-h 表大小以 K/M/G 单位显示。

显示指定文件所占空间:

# du log2012.log 
300    log2012.log

复制 文件或文件夹:cp

  • -r 表示递归目录下所有文件。

  • -d 如果源文件为链接文件,只复制链接文件而不是实际文件。

  • -i 增加特殊情况的讯问,如同名时会询问是否覆盖等(个人建议常用)。

  • -f 强制覆盖。

额外选项:

  • -l:进行硬连结(hard link)的连结档创建,而非复制文件本身。

  • -s:复制成为符号连结档 (symbolic link),亦即 快捷方式文件。

  • -p:连同文件的属性一起复制过去,而非使用默认属性(备份常用)。

  • -a:相当於 -pdr,递归复制,并将文件属性和链接文件一同复制过去。

例子:

  • 拷贝 dir1 目录内所有文件到 dir2 目录:cp dir1/* dir2 或者 cp -r dir1/ dir2/

  • 复制 整个目录 到 另一个目录 时常用:cp -rid dir_a dir_b

关于 硬链接 和 符号链接:

引自:Linux 文件与目录管理 | 菜鸟教程 (runoob.com)。embedded-notes/linux.md at master · xiaowenxia/embedded-notes (github.com)。

Linux 链接分两种,一种被称为硬链接(Hard Link),另一种被称为符号链接(Symbolic Link)。默认情况下,ln 命令产生硬链接。

硬连接

硬连接指通过索引节点来进行连接。在 Linux 的文件系统中,保存在磁盘分区中的文件不管是什么类型都给它分配一个编号,称为索引节点号(Inode Index)。在 Linux 中,多个文件名指向同一索引节点是存在的。比如:A 是 B 的硬链接(A 和 B 都是文件名),则 A 的目录项中的 inode 节点号与 B 的目录项中的 inode 节点号相同,即一个 inode 节点对应两个不同的文件名,两个文件名指向同一个文件,A 和 B 对文件系统来说是完全平等的。删除其中任何一个都不会影响另外一个的访问。

硬连接的作用是允许一个文件拥有多个有效路径名,这样用户就可以建立硬连接到重要文件,以防止“误删”的功能。其原因如上所述,因为对应该目录的索引节点有一个以上的连接。只删除一个连接并不影响索引节点本身和其它的连接,只有当最后一个连接被删除后,文件的数据块及目录的连接才会被释放。也就是说,文件真正删除的条件是与之相关的所有硬连接文件均被删除。

  • 硬链接直接指向文件的i节点

  • 硬链接和原文件的i节点是一样的

  • 硬链接文件显示的大小是跟原文件是一样的

  • 硬链接不能链接目录文件。

ln file2 /home/xiaxiaowen/file2hard

软连接

另外一种连接称之为符号连接(Symbolic Link),也叫软连接。软链接文件有类似于 Windows 的快捷方式。它实际上是一个特殊的文件。在符号连接中,文件实际上是一个文本文件,其中包含的有另一文件的位置信息。比如:A 是 B 的软链接(A 和 B 都是文件名),A 的目录项中的 inode 节点号与 B 的目录项中的 inode 节点号不相同,A 和 B 指向的是两个不同的 inode,继而指向两块不同的数据块。但是 A 的数据块中存放的只是 B 的路径名(可以根据这个找到 B 的目录项)。A 和 B 之间是“主从”关系,如果 B 被删除了,A 仍然存在(因为两个是不同的文件),但指向的是一个无效的链接。

  • 软链接则是建立了一个新文件

  • 这个文件指向链接的文件,i节点不一样

  • 可以链接目录

ln -s file2 /home/xiaxiaowen/file2soft

实验

touch f1          #创建一个测试文件f1
ln f1 f2          #创建f1的一个硬连接文件f2
ln -s f1 f3       #创建f1的一个符号连接文件f3
ls -li            # -i参数显示文件的inode节点信息

从上面的结果中可以看出,硬连接文件 f2 与原文件 f1 的 inode 节点相同,均为 9797648,然而符号连接文件的 inode 节点不同。

可以得到以下预期与测试的结果:

  • 1).删除符号连接f3,对f1、f2无影响;

  • 2).删除硬连接f2,对f1、f3也无影响;

  • 3).删除原文件f1,对硬连接f2没有影响,导致符号连接f3失效;

  • 4).同时删除原文件f1,硬连接f2,整个文件会真正的被删除。

移动/重命名 文件/文件夹:mv

  • -f 强制;-i 询问(个人建议常用)。

直接举例:

  • mv file1 dir1 dir2,将文件 file1 和 目录 dir1 移动到目录 dir2 里面。

  • mv file1 file_1,将文件 file1 重命名为 file_1。

删除 文件或文件夹:rm

  • -r 递归;-f 强制;-i 询问(个人建议常用)。

  • 删除目录:rm -r dir_a

  • 喜闻乐见的删库跑路(新手要理解其意思):rm -rf /*

文件内容查看

Linux系统中使用以下命令来查看文件的内容:

  • cat 由第一行开始显示文件内容

  • tac 从最后一行开始显示,可以看出 tac 是 cat 的倒着写!

  • nl 显示的时候,顺道输出行号!

  • more 一页一页的显示文件内容

  • less 与 more 类似,但是比 more 更好的是,他可以往前翻页!

  • head 只看头几行

  • tail 只看尾巴几行

查看长文件 lessless install.log,最下面显示的是这个文件的名称,我们可以使用 “PageUp” 和 “PageDown” 可以进行上一页和下一页的翻页。如果要知道具体的控制键,我们可以按下 “H” 键,可以显示 less 命令的所有控制键,如果想结束,可以按 “q” 键。

在需要在应用程序运行时分析日志(文本)文件,动态追踪显示:tail -F linuxidc_log

以上每个命令的选项,可用时再查(上面 “Linux 命令查询” 处给出了一些在线查询 Linux 命令 的网站),用的多了就 内化 / 记住了。

文件权限 & 用户管理 & 密码管理

文件权限/属性管理

这里面讲的更详细 Linux 文件基本属性 | 菜鸟教程 (runoob.com),Linux权限管理详解 (biancheng.net)。

一句话明白:对于一个文件,通过 chown 来授权某个用户所有该文件,通过 chmod 为该用户设置可以操作(读/写/执行)该文件的权限。

  • 改变文件所属用户组 :chgrp

    将 install.log 文件的用户组改为 hy 用户组:chgrp hy install.log。注意 hy 用户组必须要在/etc/group 文件内存在才可以。

    -R : 进行递归的持续更改,也连同子目录下的所有文件、目录都更新成为这个用户组之意。常常用在更改某一目录内所有文件的情况。

  • 改变文件的所有者:chown

    例子:chown bin install.logchown book:book install.log,改变 install.log 文件的所有者为 bin,改变 install.log 文件的所有者和用户组为 book 和 book。

    改变文件所有者和用户组的这两个命令的应用场景:复制文件,由于复制行为会复制执行者的属性和权限,因此复制后需要改变文件所属用户、用户组等。

    -R:也是递归子目录。

  • 改变文件权限:chmod

    使用 u、 g、 o 三个字母代表 user、 group、 others 3 中身份;此外 a 代表 all,即所有身份。范例:chmod u=rwx,go=rx .bashrc,即对于 .bashrc 文件,用户有 rwx 权限,用户组和其它用户有 rx 权限。

    也可以增加或去除某种权限,“ +”表示添加权限,“ -”表示去除权限: chmod a+w .bashrcchmod a-x .bashrcchmod +x app

    数字的方式就不细说了:用 4 代表 r 权限,2 代表 w 权限,1 代表 x 权限;owner = rwx = 4+2+1 = 7;例子:chmod 777 .bashrc

用户与用户组管理

Linux 用户和用户组管理 | 菜鸟教程 (runoob.com),Linux用户和用户组管理详解 (biancheng.net)。

对于用户与用户组的阐释:

  • Linux用户和用户组(包含两者之间的关系) (biancheng.net)。

  • linux用户和用户组相关概念、理解、操作森狗道格的博客-CSDN博客linux用户和组的作用。

主要有这些命令:

  • Linux系统添加新用户(useradd命令)

  • Linux修改系统用户密码(passwd命令)

  • Linux修改系统用户信息(usermod命令)

  • Linux强制系统用户登陆时修改密码(chage命令)

  • Linux删除系统用户(userdel命令)

  • Linux查看用户的UID和GID(id命令)

  • Linux临时切换用户身份(su命令)

  • Linux whoami和who am i命令

  • Linux添加用户组(groupadd命令)

  • Linux修改用户组(groupmod命令)

  • Linux删除用户组(groupdel命令)

  • Linux将系统用户加入或移除群组(gpasswd命令)

  • Linux切换用户的有效群组(newgrp命令)

  • 增加用户:useradd user1,表增加一个用户 user1 ,并接着提示设置密码;只有 root 可以修改所有用户的密码,普通用户只能修改自己的密码,修改自己的密码 passwd uesr1

  • 删除用户:userdel,慎用,可删除用户帐号与相关的文件。若不加 -f 参数,则仅删除用户帐号,而不删除相关文件,加上则会删除用户登入目录以及目录中所有文件。

  • 修改用户信息:usermod,选项:

    • -c <备注>,修改用户帐号的备注文字。

    • -d 登入目录>,修改用户登入时的目录。

    • -e <有效期限>,修改帐号的有效期限。

    • -f <缓冲天数>,修改在密码过期后多少天即关闭该帐号。

    • -g <群组>,修改用户所属的群组。

    • -G <群组>,修改用户所属的附加群组。

    • -l <帐号名称>,修改用户帐号名称。

    • -L,锁定用户密码,使密码无效。

    • -s <shell>,修改用户登入后所使用的shell。

    • -u <uid>,修改用户ID。

    • -U,解除密码锁定。

  • 普通用户 与 超级用户 之间切换:

    切换为 root 超级用户的命令为:sudo su;切换普通用户的命令为:su <username>,也可以用 exit 来退出超级用户。

密码管理

  • 给 root 用户设置密码,并在用户间切换:

    1. sudo passwd root 给 root 设置密码;

    2. 输入 当前用户(book)密码

    3. 输入 root 新设置的密码,两次

    4. 成功;

    5. su root 切换到 root 用户;su用来切换用户;

    6. su book 切回。

  • Linux 忘记密码解决方法 | 菜鸟教程 (runoob.com)。

获取命令帮助: --help/man

help、man 和 info 命令。

  • help 只能用于查看某个命令的用法。

  • man 命令既可以查看命令的用法,还可以查看函数的详细介绍等等。

    (引自 百问网)

    比如想查看 open() 函数的用法时,可以直接执行 man open ,发现这不是想要内容时再执行 man 2 open

    在 man 命令中可以及时按“h”查看帮助信息了解快捷键。常用的快捷键是:

    • f 往前翻一页。

    • b 往后翻一页。

    • /<patten> 往前搜 patten 字符。

    • ?<patten> 往后搜。

  • info 命令会显示最全面的信息,一般 man 命令就够了,故 info 命令介绍 暂时略。

以下详细:

命令后加 --help 选项,获取此命令的所有选项和其释义。详情如下图。

命令的完整手册,命令前加 man,提供命令、API、概念、配置文件等帮助信息。详情如下。

man 手册一共有 9 册,每一册专注一个方面。如下表。

section名称说明
1用户命令用户可操作的命令
2系统调用内核提供的函数(查头文件)
3库调用常用的函数库
4特殊文件设备文件(/dev下)和特殊文件
5文件格式和约定对一些文件进行解释
6游戏程序游戏程序
7杂项包括宏包和约定等
8系统管理员使用的管理命令通常只有系统管理员可以使用
9内核相关Linux内核相关文件

每一册都细分为语法说明、详细说明、作者说明、版权信息等章节。如下表。

段名主要内容
NAME命令、数据名称的简短说明
SYNOPSIS简短的命令语法说明
DESCRIPTION最为权威和全面的使用说明
EXAMPLES使用本命令或数据的一些参考示例
AUTHOR作者
REPORTING BUGS报告相关的错误信息
COPYRIGHT版权
SEE ALSO与本命令或数据相关的其他参考说明
连接流 / 取文件内容:cat
  • -n 或 --number:由 1 开始对所有输出的行数编号。

  • -b 或 --number-nonblank:和 -n 相似,只不过对于空白行不编号。

  • -s 或 --squeeze-blank:当遇到有连续两行以上的空白行,就代换为一行的空白行。

例子:

# 将一个字符串输入到一个文件
echo "难凉热血瞰百易" > users
​
# 把 textfile1 的文档内容加上行号后覆盖输入 textfile2 这个文档里
cat -n textfile1 > textfile2
​
# 把 textfile1 和 textfile2 的文档内容加上行号(空白行不加)之后将内容 追加 到 textfile3 文档里
cat -b textfile1 textfile2 >> textfile3
​
# 清空 /etc/test.txt 文档内容
cat /dev/null > /etc/test.txt
文件分割 / 文件合并

参考 Linux 下大文件切割与合并 (qq.com)。

在 Linux 系统下使用 split 命令进行大文件切割,使用 cat 命令进行多个小文件的合并,很方便。

-a: #指定输出文件名的后缀长度(默认为2个:aa,ab...)
-d: #指定输出文件名的后缀用数字代替
-l: #行数分割模式(指定每多少行切成一个小文件;默认行数是1000行)
-b: #二进制分割模式(支持单位:k/m)
-C: #文件大小分割模式(切割时尽量维持每行的完整性)
​
split [-a] [-d] [-l <行数>] [-b <字节>] [-C <字节>] [要切割的文件] [输出文件名]
​
——————
​
-n: #显示行号
-e: #以$字符作为每行的结尾
-t: #显示TAB字符(^I)
cat [-n] [-e] [-t] [输出文件名]

实例:

# 行切割文件
$ split -l 300000 users.sql /data/users_
​
# 使用数字后缀
$ split -d -l 300000 users.sql /data/users_
​
# 按字节大小分割
$ split -d -b 100m users.sql /data/users_
​
# 合并文件
$ cat /data/users_* > users.sql
查看二进制文件 hexdump

Linux 内核源码开发工具合集 (biscuitos.cn) ——hexdump。

hexdump [选项] [文件]…
​
选项
    -n length:格式化输出文件的前 length 个字节
    -C 输出规范的十六进制和ASCII码
    -b 单字节八进制显示
    -c 单字节字符显示
    -d 双字节十进制显示
    -o 双字节八进制显示
    -x 双字节十六进制显示
    -s 从偏移量开始输出
    -e 指定格式字符串,格式字符串由单引号包含,格式字符串形如:’a/b “format1” “format2”。
       每个格式字符串由三部分组成,每个由空格分割,如 a/b 表示,b 表示对每b个输入字节应用
       format1 格式,a 表示对每个 a 输入字节应用 format2,一般 a > b,且 b 只能为 1,2,4,
       另外 a 可以省略,省略 a=1。format1 和 format2 中可以使用类似printf的格斯字符串。
           %02d:两位十进制
           %03x:三位十六进制
           %02o:两位八进制
           %c:单个字符等
           %_ad:标记下一个输出字节的序号,用十进制表示
           %_ax:标记下一个输出字节的序号,用十六进制表示
           %_ao:标记下一个输出字节的序号,用八进制表示
           %_p:对不能以常规字符显示的用.代替
       同一行显示多个格式字符串,可以跟多个-e选项

另外还有:

  • hexedit 是 linux 下的一款二进制文件编辑工具,可以使用 hexedit 工具对二进制 文件进行编辑和查看。

  • Bless 是一个十六进制编辑器,其主要功能包括:支持编辑大数据文件及块设备、能够执行 搜索与替换操作、具有类似 Firefox 的标签浏览特性、可将数据输出为文本或 HTML、包含 插件系统。

比较文件差异:diff

diff 以逐行的方式,比较文本文件的异同处。如果指定要比较目录,则 diff 会比较目录中相同文件名的文件,但不会比较其中子目录。

Linux diff命令

diff log2014.log log2013.log 
3c3
< 2014-03
---
> 2013-03
8c8
< 2013-07
---
> 2013-08
11,12d10
< 2013-11
< 2013-12
# 上面的 "3c3" 和 "8c8" 表示 log2014.log 和 log20143log 文件在 3 行和第 8 行内容有所不同;"11,12d10" 表示第一个文件比第二个文件多了第 11 和 12 行。
  • -a,只会逐行比较文本文件。

  • -c,显示全部内文,并标出不同之处。

  • -B,不检查空白行。

  • -r,比较子目录中的文件。

  • -y,以并列的方式显示文件的异同之处,其中:

    • "|"表示前后2个文件内容有不同。

    • "<"表示后面文件比前面文件少了1行内容。

    • ">"表示后面文件比前面文件多了1行内容。

  • -u,以合并的方式来显示文件内容的不同。

  • -H,比较大文件时,可加快速度。

常用 diff -yB <文件1> <文件2>

常用 find / grep / sed / awk

可参考 四个强大的linux文本处理工具(find、grep、sed、awk)~青萍之末~的博客-CSDN博客linux 文本处理 查找。embedded-notes/linux.md at master · xiaowenxia/embedded-notes (github.com) 下面一些参考了这个链接。

查找/搜索:find

  • 格式:find 目录名 选项 查找条件;如果没有指定目录,则为当前目录查找

  • 举例,在某目录用名字查找名为 test1.txt 的文件:find /home/book/dira/ -name "test1.txt";按格式查找:-name " *.txt "

  • 其他高级用法很多,这里举例,查找 x 天内有变动的文件:find /home/book -mtime -2,查找 /home 目录下两天内有变动的文件。

用法

find [-path ..] [expression]

选项

-name     按照文件名
-iname     按照文件名 忽略大小写
-perm     按照文件权限
-user     按照文件拥有者
-group    按照文件所属的组
-mtime -n +n 按照文件的更改时间来查找文件, -n:n天以内,+n:n天以前
-type     查找某一类型:文件类型有:普通文件(f),目录(d),字符设备文件(c),块设备文件(b),符号链接文件(l),套接字文件(s),管道文件(p)
-size n   查找文件长度为n块(一块等于512字节)的文件,带有c时表示文件长度以字节计。 
-mount    不跨越文件系统
-follow   遇到符号链接文件,就跟踪至链接所指向的文件
-path     匹配文件路径或者文件
-exec     执行后续命令操作
-a        and 与操作
-o        or  或操作
-not      not 非操作

经典使用方法

#查找/run中所有的socket文件
find /run -type s
#搜索/dev中所有包含tty的文件
find /dev -name "*tty*"
#搜索/dev中大小大于10字节,名称包含bus的文件
find /dev -size +10c -name "*bus*"
#或操作,搜索debug开头的文件或者.rst的文件
find -name 'debug*' -o -name '*.rst'
#与操作,搜索debug开头的文件同时是.rst的文件
find -name 'debug*' -a -name '*.rst'
#找出文件大小大于10000块的文件,并复制到当前目录
find -size +100000 -exec cp {} . \;

高级使用方法

查询所有mk文件中的date文本

find ./build/ -name "*.mk" -print -exec grep -rwn "date" --color=auto {} \;

文件内搜索:grep

  • 格式:grep [选项] [查找模式] [文件名]

  • grep -rn "字符串" 文件名。字符串:要查找的字符串;文件名:要查找的目标文件,如果是 * 符号则表示查找当前目录下的所有文件和目录;r(recursive) 递归查找;n(number) 显示目标位置的行号;-w 全字匹配;

  • 在 test1.txt 中查找字符串abc: grep -n "abc" test1.txt,在当前目录递归查找字符串abc:grep -rn "abc" *

  • 第一个命令的结果传入第二个命令,即在 grep 的结果中再次执行 grep 搜索:grep “ABC” * -nR | grep “ \.h”,搜索包含有 "ABC" 的头文件。

选项:
    -c:只输出匹配行的计数。
    -C:匹配的上下文分别显示[number]行。
    -I:不区分大小写(只适用于单字符)。
    -i:不区分大小写。
    -h:查询多文件时不显示文件名。
    -l:查询多文件时只输出包含匹配字符的文件名。
    -L:列出不匹配的文件名。
    -n:显示匹配行及 行号。
    -s:不显示不存在或无匹配文本的错误信息。
    -v:显示不包含匹配文本的所有行。
    -w:只匹配整个单词。
    -E:扩展的正则表达式
    -R:递归搜寻
    --exclude=FILE:跳过FILE
​
正则表达式主要参数:
    \:忽略正则表达式中特殊字符的原有含义。
    ^:匹配正则表达式的开始行。
    $:匹配正则表达式的结束行。
    \<:从匹配正则表达式的行开始。
    \>:到匹配正则表达式的行结束。
    []:单个字符,如[A]即A符合要求 。
    [-]:范围,如[A-Z],即A、B、C一直到Z都符合要求 。
    .:所有的单个字符。
    *:有字符,长度可以为0。
经典使用方法:
​
#所有以d开头的文件,包含test的匹配行
grep "test" d*
#包含test或者zephyr 不区分大小写 显示行号 扩展正则表达式
grep -inE "test|zephyr" d*
#包含test和zephyr 不区分大小写 显示行号 扩展正则表达式
grep -in "test" d* | grep 'zephyr'
​
主要参数:
    -c:只输出匹配行的计数。
    -I:不区分大小写(只适用于单字符)。
    -h:查询多文件时不显示文件名。
    -l:查询多文件时只输出包含匹配字符的文件名。
    -L:列出不匹配的文件名
    -n:显示匹配行及行号。
    -s:不显示不存在或无匹配文本的错误信息。
    -v:显示不包含匹配文本的所有行。
    -R:递归搜寻
    -d skip:不递归搜寻
    -w:匹配整个单词
正则表达式主要参数:
    \:忽略正则表达式中特殊字符的原有含义。
    ^:匹配正则表达式的开始行。
    $:匹配正则表达式的结束行。
    \<:从匹配正则表达式的行开始。
    \>:到匹配正则表达式的行结束。
    []:单个字符,如[A]即A符合要求 。
    [-]:范围,如[A-Z],即A、B、C一直到Z都符合要求 。
    .:所有的单个字符。
    *:有字符,长度可以为0。
​
grep 'test' d*      显示以d开头的文件中包含的test行
grep 'test' aa bb cc    查找文件aa bb cc 中匹配的test行
grep 'test'|'hello' files 匹配test或者hello
grep '\<man' files  匹配manic 和man 不匹配batman
grep '\<man\>'      只匹配man 不匹配batman和manic
grep '^man' files   匹配的字符行首
grep '$man' files   匹配的字符串仔行尾

计算字数:wc

  • 各个选项:-c 只显示 Bytes 数; -l 只显示列数; -w 只显示字数。

数据替换:sed

  • 用时现查。

文本处理:awk

  • 用时现查。

列出当前打开的文件:lsof

$ sudo lsof
COMMAND    PID      USER   FD      TYPE     DEVICE     SIZE       NODE      NAME
init       1         root  cwd      DIR       3,3       1024       2         /
init       1         root  rtd      DIR       3,3       1024       2         /
init       1         root  txt      REG       3,3       38432      1763452  /sbin/init
init       1         root  mem      REG       3,3       106114     1091620  /lib/libdl-2.6.so
init       1         root  mem      REG       3,3       7560696    1091614  /lib/libc-2.6.so
init       1         root  mem      REG       3,3       79460      1091669  /lib/libselinux.so.1
init       1         root  mem      REG       3,3       223280     1091668  /lib/libsepol.so.1
init       1         root  mem      REG       3,3       564136     1091607  /lib/ld-2.6.so
init       1         root  10u      FIFO      0,15                  1309     /dev/initctl

COMMAND进程的名称
PID进程标识符
USER进程所有者
FD文件描述符应用程序通过文件描述符识别该文件。如cwd、txt、mem等
TYPE文件类型REG(文件) DIR(目录) CHR(字符) BLK(块设备) FIFO(管道) UNIX(UNIX 域套接字) IPv4(IP套接字)
DEVICE指定磁盘的名称
SIZE文件大小
NODE文件inode每个文件都有一个唯一的inode
NAME文件名称

参数列表

lsof  filename      显示打开指定文件的所有进程
lsof -a             表示两个参数都必须满足时才显示结果
lsof -c string      显示COMMAND列中包含指定字符的进程所有打开的文件
lsof -u username    显示所属user进程打开的文件
lsof -g gid         显示归属gid的进程情况
lsof +d /DIR/       显示目录下被进程打开的文件
lsof +D /DIR/       同上,但是会搜索目录下的所有目录,时间相对较长
lsof -d FD          显示指定文件描述符的进程
lsof -n             不将IP转换为hostname,缺省是不加上-n参数
lsof -i             用以显示符合条件的进程情况
lsof -i[46] [protocol][@hostname|hostaddr][:service|port]
                    46 --> IPv4 or IPv6
                    protocol --> TCP or UDP
                    hostname --> Internet host name
                    hostaddr --> IPv4地址
                    service --> /etc/service中的 service name (可以不只一个)
                    port --> 端口号 (可以不只一个)

查找应用程序打开的文件的名称和数目

#显示打开指定文件的所有进程
$ lsof  filename
#例如:打开所有使用/dev/urandom的进程
$ lsof /dev/urandom
#查看22端口现在运行的情况 
$ lsof -i :22
#查看所属xiaxiaowen用户进程所打开的文件类型为txt的文件
$ lsof -a -u xiaxiaowen -d txt
#查找谁在使用文件系统
$ lsof /media/xiaxiaowen/机械硬盘
COMMAND  PID       USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
zsh     8465 xiaxiaowen  cwd    DIR   8,17     8192    5 /media/xiaxiaowen/机械硬盘
压缩打包:gzip、bzip2、tar、7z

Linux打包(归档)和压缩详解 (biancheng.net)。

单文件压缩、解压:gzip、bzip2

  • 小文件:gzip (.gz)

  • 大文件(压缩比高):bzip2 (.bz2)

上述两个的选项:-l (list) 列出压缩文件内容;-k (keep) 保留压缩或解压的源文件;-d (decompress) 解压压缩文件。

例子:

  • 查看:gzip -l pwd.1.gz

  • 压缩:gzip -k guesswhat.iso

  • 解压:gzip -kd pwd.1.gz

注:不加 -k 选项,在操作完后不会保留源文件;都只能压缩单文件。

多文件、目录的压缩和解压:tar

  • -c (create):表示创建用来生成文件包 。压缩。

  • -x:表示提取,从文件包中提取文件。解压。

  • -t:可以查看压缩的文件。查看。

  • -z:使用 gzip 方式进行处理,它与”c“ 结合就表示压缩,与”x“ 结合就表示解压缩。

  • -j:使用 bzip2 方式进行处理,它与”c“ 结合就表示压缩,与”x“ 结合就表示解压缩。

  • -v (verbose):详细报告 tar 处理的信息。

  • -f (file):表示文件,后面接着一个文件名。

  • -C <指定目录> 解压到指定目录。

例子:(选项前可以不加 "-",以下还是加上的)

  • 查看:tar -tvf dira.tar.gz

  • 压缩(目录):tar -czf dira.tar.gz dira;或者 tar -cjf dira.tar.bz2 dira;前者使用 gzip (-czf),后者使用 bzip2 (-cjf)。

    tar 打包、 bzip2 压缩:tar -cjvf dira.tar.bz2 dira,把目录 dira 压缩、打包为 dira.tar.bz2 文件。

  • 解压:tar -xzf dira.tar.gz -C /home/book,加 -C 指定目录,不加就是解压到当前目录;使用 gzip(-xzf),使用 bzip2(-xjf)。

总之:

  • 查看:tar tvf <压缩文件>

  • 压缩(用 bzip2):tar cjf /<目标位置>/xxx.tar.bz2 <要压缩的文件夹或文件>;用 tar:tar cf /.../<目标压缩文件.tar> <要压缩的文件或文件夹>

  • 解压(用 bzip2):tar xjf xxx.tar.bz2 -C <目标目录>;用 tar :tar xf <压缩文件.tar> <解压目录>

注意:要进入到被解压的目录下面,然后进行压缩命令,而不是输入压缩文件的全路径名,这样会连带把目录结构一同压缩!

高压工具:7z

  • 工具安装:sudo apt-get install p7zip

  • 解压:7z x <压缩包名.7z> 解压到压缩包命名的目录下。

  • 压缩:7z a pack.7z 1.jpg dir1 将 1.jpg 和 文件夹 dir1 压缩成一个 7z 包 pack.7z。

zip、rar

  • rar a jpg.rar *.jpg rar 格式的压缩,需要先下载 rar for linux;unrar e file.rar 解压 rar;

  • zip jpg.zip *.jpg zip 格式的压缩,需要先下载 zip for linux;unzip file.zip 解压 zip。

    zip 详细:

    压缩并指定目录,举例:zip -r /home/kms/kms.zip /home/kms/server/kms

    解压并指定目录,举例:unzip /home/kms/kms.zip -d /home/kms/server/kms

    删除压缩文件中 smart.txt 文件:zip -d myfile.zip smart.txt

    向压缩文件中添加 rpm_info.txt 文件:zip -m myfile.zip ./rpm_info.txt

网络命令:ifconfig /netstat
  • ifconfig:查看当前正在使用的网卡,及其 IP;-a 查看所有网卡。修改相应网卡的 IP 地址:ifconfig <网卡名> 192.168.1.123

  • 测试路由:ping 8.8.8.8。测试 DNS 服务:ping www.baidu.com。DNS 的设置比较简单,8.8.8.8 是好记好用的 DNS 服务器,修改 Ubuntu 中的 /etc/resolv.conf 文件,内容如下:nameserver 8.8.8.8

  • 图形画界面的网络配置工具:netconfig,修改好后 OK 退出,还需要 service network restart 重新启动网络服务才会生效。 所有网络配置信息保存在 ls /etc/sysconfig/network-scripts/ 里面,重启网络服务就是加载这个里面的文件信息。

  • netstat:查看网络状况。netstat -lnp | head -n 30,打印当前系统启动了哪些端口,显示前 30 行信息。netstat -an | head -n 20,打印网络连接状况,显示前 20 行信息。

查看文件类型:file/readelf

file <文件名>确定其机器码是适合 x86 平台的,还是 arm 平台的。举例:

file ~/.bashrc     为 ASCII 编码的 text 类型
file ~/.vimrc      为 UTF-8 Unicode 编码的 text 类型
file ~/Pictures/*  如图形文件 JPEG/PNG/BMP 格式
file ~             为 directory 表明这是一个目录
file /bin/pwd      出现 ELF 64-bit LSB executable,即为 ELF 格式的可执行文件
file /dev/*        出现 character special (字符设备文件)、 block special (块设备文件) 等
​
readelf -a <elf 文件> 解析并显示 elf 的 arm 可执行文件的详情
定位文件:locate

全局查找文件,打印其位置:locate install.log

因为这个命令是从数据库中来搜索文件,这个数据库的更新速度是7天更新一次。 新建不久的文件搜索不到,需要更新一下数据库:

touch 001.txt
locate 001.txt   # 找不到
​
updatedb         # 立即更新数据库,需要一段时间
locate 001.txt   # 找到了

更多选项 Linux locate 命令。

查找应用程序位置:which

which pwd 定位到 /bin/pwd;which gcc 定位到 /user/bin/gcc。

whereis pwd 可得到可执行程序的位置和手册页的位置。

任务后台执行 / 任务&进程查看

前置知识:每个进程有个 ID(The task's unique process ID),为 PID(Process ID),同一个进程下的线程的 PID 均相同。LWP 即轻量级进程,就是线程了。

  • 在命令的最后,加一个 & 符号,即可放到后台运行,

    常用任务管理命令:

    jobs 查看任务,返回任务编号 n 和进程号

    bg %n 将编号为 n 的任务转后台,并运行

    fg %n 将编号为 n 的任务转前台,并运行

    ctrl+z 挂起当前任务

    ctrl+c 结束当前任务

    例如:更多操作详情看这里。

    执行 ping www.baidu.com &,再按 ctrl + z,显示 [1]+ Stopped ping www.baidu.com,表示此任务编号为 [ 1 ],接着键入 bg %1,让此任务继续执行并转入后台执行,再键入 fg %1,将其转入前台执行,然后 ctrl + c 结束此任务。

  • kill -9 <进程 ID> 结束进程指定进程 ID 的进程。

  • 显示系统内存使用情况:free -h

  • 查看 CPU 状况有很多方法,还有:cat /proc/cpuinfo

  • 命令 w 查看系统整理负载,可显示更细节的命令 vmstat,后者可以查看到内存、磁盘的负载情况, Linux vmstat命令实战详解浮生忆梦的博客-CSDN博客vmstat。

  • ps -aux 查看当前哪些任务在后台执行。详情如下图。

  • ps -xH,这样可以查看所有存在的线程,也可以使用 grep 作进一步的过滤。

  • ps -mq PID,这样可以看到指定的进程产生的线程数目。

  • 动态的显示系统进程信息(相当于任务管理器界面):top -d 2,-d 表示刷新时间,单位秒。详情如下图。

  • top -H,加上 -H 这个选项,top 的每一行就不是显示一个进程,而是一个线程。

    top 命令详解 linux top命令查看内存及多核CPU的使用讲述 - tamatama - 博客园 (cnblogs.com)。

  • 进程、信号、ps 和 top 详解:关于Linux下进程的详解【进程查看与管理】 - AshJo - 博客园 (cnblogs.com)。

磁盘管理:df / du / fdisk

Linux 磁盘管理 | 菜鸟教程 (runoob.com)。

文件系统挂载查看:df

df -Th 列出文件系统类型、容量和哪个硬盘挂载在这里的情况。

第一列指文件系统的名称,第二列指1KB为单位的总容量,第三列指以使用空间,第四列指剩余空间,最后一栏是磁盘挂载所在目录。

$ df
Filesystem     1K-blocks    Used      Available Use% Mounted on 
/dev/sda6       29640780    4320600   23814492  16%       / 
...

分区查看和设置:fdisk

用时现学,网上资料足多。

fdisk -l,列出系统中所有存储设备,并显示其分区结构。设备名从 /dev/sda/dev/sdb 开始延续。

文件系统挂载:mount

mount 命令用来挂载各种支持的文件系统协议到某个目录下。Linux mount 命令-菜鸟教程

举例:

  • 将 /dev/hda1 挂在 /mnt 之下 mount /dev/hda1 /mnt

  • 将 /dev/hda1 用唯读模式挂在 /mnt 之下 mount -o ro /dev/hda1 /mnt

  • 将 /tmp/image.iso 这个光碟的 image 档使用 loop 模式挂在 /mnt/cdrom之下。用这种方法可以将一般网络上可以找到的 Linux 光 碟 ISO 档在不烧录成光碟的情况下检视其内容 mount -o loop /tmp/image.iso /mnt/cdrom

  • 卸载挂载 umount /mnt

内核模块管理:kmod

Linux 有许多功能是通过模块的方式,你可以将这些功能编译成一个个单独的模块,待用时再分别载入它们到 kernel。这类可载入的模块,通常是设备驱动程序。

  • lsmod 列出已安装系统的模块。

  • insmod kmod.ko 用于手动安装模块;-f 强制(不检查目前 kernel 版本与模块编译时的 kernel 版本是否一致),更多命令:

    • -f  不检查目前kernel版本与模块编译时的kernel版本是否一致,强制将模块载入。

    • -k  将模块设置为自动卸除。

    • -m  输出模块的载入信息。

    • -o <模块名称>  指定模块的名称,可使用模块文件的文件名。

    • -p  测试模块是否能正确地载入kernel。

    • -s  将所有信息记录在系统记录文件中。

    • -v  执行时显示详细的信息。

    • -x  不要汇出模块的外部符号。

    • -X  汇出模块所有的外部符号,此为预设置。

  • rmmod 卸载某个已安装的模块。

  • modinfo 查看某个模块的详细信息。

  • modprobe 自动安装模块,并自动尝试解决依赖,比 insmod 聪明;-f 强制安装,-r 卸载模块,更多命令:

    • -a或--all  载入全部的模块。

    • -c或--show-conf  显示所有模块的设置信息。

    • -d或--debug  使用排错模式。

    • -l或--list  显示可用的模块。

    • -r或--remove  模块闲置不用时,即自动卸载模块。

    • -t或--type  指定模块类型。

    • -v或--verbose  执行时(载入或者卸载)显示详细的信息。

    • -V或--version  显示版本信息。

    • -help  显示帮助。

系统日志:dmesg

Linux命令之dmesg命令_恒悦sunsite的博客-CSDN博客。

dmesg七种用法 - zhaoxuguang - 博客园 (cnblogs.com)。

例子:

  • dmesg | less。

  • dmesg | tail -20。

  • watch "dmesg | tail -20"。

系统管理 / 杂项 / 日常

以下命令可用时现查。

  • who,显示登录到本地的用户。

  • w,显示登录到本地的用户,并显示他们在做什么。

  • whoami,显示当前用户的登录名。

  • id,查看用户 id 和其它信息。

  • last,查看最近登陆本机的用户。

  • uname -a,显示本机和系统信息。

  • uptime,查询 linux 系统的运行时间、当前用户数等信息。

  • dmesg,查看开机信息。

  • umask,控制新创建文件的默认权限。

  • ulimit,查看和控制用户的资源限制。

  • env,查看当前用户的环境变量。

  • 显示日期、日历:datacal。打印程序执行时间:time ./可执行程序

  • 查看 CPU 信息:cat /proc/cpuinfo

  • 在 shell 中显示内核驱动使用 printk() 打印的信息(有些板子默认打开了) echo "7 4 1 7" > /proc/sys/kernel/printk 关闭内核打印信息 echo "0 4 1 7" > /proc/sys/kernel/printk

  • 关机相关:

    • 将存于 buffer 中的资料强制写入硬盘中:sync。Linux 系统中欲写入硬盘的资料有的时候为了效率起见,会写到 filesystem buffer 中,这个 buffer 是一块缓存空间,如果欲写入硬盘的资料存于此 buffer 中,而系统又突然断电的话,那么资料就会流失了,sync 指令会将存于 buffer 中的资料强制写入硬盘中。sync 命令在关闭 Linux 系统前使用。

    • 在关机前,可使用 ps -aux 查看还有哪些后台进程。

    • 关机:halt 停止机器;halt -p 关闭机器、关闭电源。

    • 重启:reboot

    • 延时关机:shutdown -t 10,-t 表示关机倒计时,单位秒。shutdown 更多例子:常用 shutdown -h now 立即关机。

  • 图形化系统设置工具,调整运行状态,运行 setup 这个综合工具。包括如图所示的五项:认证方式、防火墙配置、鼠标配置、网络配置、系统服务等。这里包含了各种系统服务。

  • 有趣的命令:

    • hollywood 和 cmatrix:安装 sudo apt-get install hollywood cmatrix,效果执行后见。

    • sl:为从右到左跑一遍字符画火车。安装同样使用 apt 工具。

    • figlet:命令为字符画生成,详看 Linux终端也能玩出新境界:Figlet 和 Toilet命令Linux教程Linux公社-Linux系统门户网站 (linuxidc.com)。

设置开机运行脚本
  • ubuntu18.04设置开机自动启动脚本_guotianqing的博客-CSDN博客。

  • ubuntu18.04设置开机启动命令/脚本的三种方法(可sudo)ubuntu设置开机自启动Sidney.Tan的博客-CSDN博客。

  • Linux配置开机自启动执行脚本的两种方法 | 《Linux就该这么学》 (linuxprobe.com)。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/135834.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

基于YOLOv8的输电线路异物识别算法应用

基于 YOLOv8 的输电线路异物识别算法应用 输电线路作为电力系统的重要一环&#xff0c;保证其安全稳定运行是十分必要的。由于长期暴露于室外&#xff0c;线路所面临的不安全因素繁多&#xff0c;异物入侵便是其中之一。异物可能会引起线路短路甚至诱发火灾&#xff0c;因此要加…

AIGC专栏8——EasyPhoto 视频领域拓展-让AIGC肖像动起来

AIGC专栏8——EasyPhoto 视频领域初拓展-让AIGC肖像动起来 学习前言源码下载地址技术原理储备Video Inference 功能说明 & 效果展示1、Text2Video功能说明a、实现原理简介b、文到视频UI介绍c、结果展示 2、Image2Video功能说明a、实现原理简介i、单图模式ii、首尾图模式 b、…

Technology Strategy Patterns 学习笔记9 - bringing it all together

1 Patterns Map 2 Creating the Strategy 2.1 Ansoff Growth Matrix 和owth-share Matrix 区别参见https://fourweekmba.com/bcg-matrix-vs-ansoff-matrix/ 3 Communicating

金和OA jc6 任意文件上传漏洞复现

0x01 产品简介 金和OA协同办公管理系统软件&#xff08;简称金和OA&#xff09;&#xff0c;本着简单、适用、高效的原则&#xff0c;贴合企事业单位的实际需求&#xff0c;实行通用化、标准化、智能化、人性化的产品设计&#xff0c;充分体现企事业单位规范管理、提高办公效率…

华为ensp:ospf末梢stub完全末梢totally Stub

现在宣告都宣告完了&#xff0c;现在要给area1做完全末梢 末梢区域 进入r2系统视图模式 ospf 1area 1 stub quit进入r1系统视图 ospf 1 area 1 stub quit 现在去r1上查看 末梢成功 完全末梢 进入r2系统视图 ospf 1 area 1stub no-summary 现在就成为完全末梢了&…

AI 绘画 | Stable Diffusion精确控制ControlNet扩展插件

ControlNet ControlNet是一个用于控制AI图像生成的插件&#xff0c;通过使用Conditional Generative Adversarial Networks&#xff08;条件生成对抗网络&#xff09;的技术来生成图像。它允许用户对生成的图像进行更精细的控制&#xff0c;从而在许多应用场景中非常有用&#…

基于Transformer架构的ChatGPT:三步带你了解它的工作原理

作者&#xff1a;Insist-- 个人主页&#xff1a;insist--个人主页 梦想从未散场&#xff0c;传奇永不落幕&#xff0c;博主会持续更新优质网络知识、Python知识、Linux知识以及各种小技巧&#xff0c;愿你我共同在CSDN进步 目录 一、Transformer架构 1. 自注意力层 2. 前馈神…

AWS云服务器EC2实例进行操作系统迁移

AWS云服务器EC2实例进行操作系统迁移 文章目录 AWS云服务器EC2实例进行操作系统迁移1. 亚马逊EC2云服务器简介1.2 亚马逊EC2云务器与弹性云服务器区别 2. 亚马逊EC2云服务器配置流程2.1 亚马逊EC2云服务器实例配置2.1.1 EC2实例购买教程2.1.1 EC2实例初始化配置2.1.2 远程登录E…

Flutter实践一:package组织

1.架构概览 为了降低Flutter工程里lib的复杂度&#xff0c;应尽量拆分一些代码成为独立的package。如图&#xff1a; 我们将通用的组件、领域模型、API、features、存储、repository等抽取成了单独的package。这时lib只剩下多国语言、基本的页面、路由等代码了&#xff1a; 这…

Linux组调度

为什么引入组调度可以参考这篇文章的讨论。核心原因是基础的调度算法都是基于任务的&#xff0c;如果用户A有10个任务&#xff0c;用户B只有1个任务&#xff0c;假设这些任务的优先级都相同&#xff0c;那么用户A得到的CPU时间将是用户B的10倍&#xff0c;这样从任务的角度看虽…

Linux应用开发基础知识——LCD上的矢量字体Freetype(六)

前言&#xff1a; 使用 buildroot 来给 ARM 板编译程序、编译库会很简单&#xff0c;以后系统讲解 buildroot 时再使用 buildroot&#xff0c;现在我们还是手工交叉编译 freetype&#xff0c;这种方法在编译、安装一些小程序时很有用。 Freetype 是开源的字体引擎库&#xff0c…

Java13新增特性

前言 前面的文章&#xff0c;我们对Java9、Java10、Java11、Java12 的特性进行了介绍&#xff0c;对应的文章如下 Java9新增特性 Java10新增特性 Java11新增特性 Java12新增特性 今天我们来一起看一下Java13这个版本的一些重要信息 版本介绍 Java 13 是在 2019 年 9 月 17 日…

recycleView(三)动态修改背景色

效果图 1.关键代码 1. // 定义一个变量来记录滑动的距离var scrollDistance 0// 在RecycleView的滑动监听器中更新滑动的距离binding.recyclerView.addOnScrollListener(object : RecyclerView.OnScrollListener() {override fun onScrolled(recyclerView: RecyclerView, …

PCB知识补充

系列文章目录 文章目录 系列文章目录参考文献PCB知识互连线电阻过孔/铜箔电流能力铜箔载流能力过孔载流能力 热设计电磁兼容及部分要求 参考文献 [1]牛森,张敏娟,银子燕.高速PCB多板互联的电源完整性分析[J].单片机与嵌入式系统应用,2023,23(09). [2]陈之秀,刘洋,张涵舒等.高…

通用结构化剪枝DepGraph

文章目录 0. 前言一. 第一部分: Torch-Pruning1.1 传统的剪枝流程 - ResNet-18结构化剪枝1.2 Torch-Pruning剪枝 - ResNet-18结构化剪枝1.3 Torch-Pruning剪枝 - 遍历所有分组1.4 Torch-Pruning剪枝 - 剪枝器 High-level Pruners1.5 Torch-Pruning剪枝 - 拓展到更复杂的神经网…

【递归】求根节点到叶节点数字之和(Java版)

目录 1.题目解析 2.讲解算法原理 3.代码 1.题目解析 LCR 049. 求根节点到叶节点数字之和 给定一个二叉树的根节点 root &#xff0c;树中每个节点都存放有一个 0 到 9 之间的数字。 每条从根节点到叶节点的路径都代表一个数字&#xff1a; 例如&#xff0c;从根节点到叶节点…

No179.精选前端面试题,享受每天的挑战和学习

🤍 前端开发工程师(主业)、技术博主(副业)、已过CET6 🍨 阿珊和她的猫_CSDN个人主页 🕠 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 🍚 蓝桥云课签约作者、已在蓝桥云课上架的前后端实战课程《Vue.js 和 Egg.js 开发企业级健康管理项目》、《带你从入…

开发者测试2023省赛--UnrolledLinkedList测试用例

测试结果 官方提交结果 EclEmma PITest 被测文件UnrolledLinkedList.java /** This source code is placed in the public domain. This means you can use it* without any restrictions.*/package net.mooctest;import java.util.AbstractList; import java.util.Collectio…

牛客网刷题笔记231112 最小k位数+二叉树层序遍历+SQL异常邮件概率

算法题牛客网NC119 最小的k个数 题目&#xff1a; 用了一下python列表的便利&#xff0c;不知道在面试时允许用不。当然最简单的方法其实是直接sort()一下取前k位数即可。本次写的思路如下&#xff1a; 用一个最大容量为k的列表存储结果&#xff0c;遍历n个元素&#xff0c;当…

Python基础入门例程52-NP52 累加数与平均值(循环语句)

最近的博文&#xff1a; Python基础入门例程51-NP51 列表的最大与最小(循环语句)-CSDN博客 Python基础入门例程50-NP50 程序员节&#xff08;循环语句&#xff09;-CSDN博客 Python基础入门例程49-NP49 字符列表的长度-CSDN博客 目录 最近的博文&#xff1a; 描述 输入描…
最新文章