Linux基础

发布时间 2023-12-29 09:34:14作者: 五官一体即忢
一、Linux的派系

由于Linux内核开源的原因,因此市场上出现了很多Linux的发行版本,主要不同在于包管理方式等方面。



二、系统目录结构
  • /bin: 命令和应用程序。
  • /boot: 这里存放的是启动 Linux 时使用的一些核心文件,包括一些连接文件以及镜像文件。
  • /dev : dev 是 Device(设备) 的缩写, 该目录下存放的是 Linux 的外部设备,在 Linux 中访问设备的方式和访问文件的方式是相同的。
  • /etc: etc 是 Etcetera(等等) 的缩写,这个目录用来存放所有的系统管理所需要的配置文件和子目录。
  • /home: 用户的主目录,在 Linux 中,每个用户都有一个自己的目录,一般该目录名是以用户的账号命名的,如上图中的 alice、bob 和 eve。
  • /lib: lib 是 Library(库) 的缩写这个目录里存放着系统最基本的动态连接共享库,其作用类似于 Windows 里的 DLL 文件。几乎所有的应用程序都需要用到这些共享库。
  • /lost+found: 这个目录一般情况下是空的,当系统非法关机后,这里就存放了一些文件。
  • /media: linux 系统会自动识别一些设备,例如U盘、光驱等等,当识别后,Linux 会把识别的设备挂载到这个目录下。
  • /mnt: 系统提供该目录是为了让用户临时挂载别的文件系统的,我们可以将光驱挂载在 /mnt/ 上,然后进入该目录就可以查看光驱里的内容了。
  • /opt: opt 是 optional(可选) 的缩写,这是给主机额外安装软件所摆放的目录。比如你安装一个ORACLE数据库则就可以放到这个目录下。默认是空的。
  • /proc: proc 是 Processes(进程) 的缩写,/proc 是一种伪文件系统(也即虚拟文件系统),存储的是当前内核运行状态的一系列特殊文件,这个目录是一个虚拟的目录,它是系统内存的映射,我们可以通过直接访问这个目录来获取系统信息。
  • /root: 该目录为系统管理员,也称作超级权限者的用户主目录。
  • /sbin: s 就是 Super User 的意思,是 Superuser Binaries (超级用户的二进制文件) 的缩写,这里存放的是系统管理员使用的系统管理程序。
  • /selinux: 这个目录是 Redhat/CentOS 所特有的目录,Selinux 是一个安全机制,类似于 windows 的防火墙,但是这套机制比较复杂,这个目录就是存放selinux相关的文件的。
  • /srv: 该目录存放一些服务启动之后需要提取的数据。
  • /sys:该目录下安装了 2.6 内核中新出现的一个文件系统 sysfs 。
  • /tmp: tmp 是 temporary(临时) 的缩写这个目录是用来存放一些临时文件的。
  • /usr: usr 是 unix shared resources(共享资源) 的缩写,这是一个非常重要的目录,用户的很多应用程序和文件都放在这个目录下,类似于 windows 下的 program files 目录。
  • /usr/bin: 系统用户使用的命令和应用程序。
  • /usr/sbin: 超级用户使用的比较高级的管理程序和系统守护程序。
  • /usr/src: 内核源代码默认的放置目录。
  • /var: var 是 variable(变量) 的缩写,这个目录中存放着在不断扩充着的东西,我们习惯将那些经常被修改的目录放在这个目录下。包括各种日志文件。
  • /run: 是一个临时文件系统,存储系统启动以来的信息。当系统重启时,这个目录下的文件应该被删掉或清除。如果你的系统上有 /var/run 目录,应该让它指向 run。
  • /etc: 这个是系统中的配置文件,如果你更改了该目录下的某个文件可能会导致系统不能启动。
  • /var: 这是一个非常重要的目录,系统上跑了很多程序,那么每个程序都会有相应的日志产生,而这些日志就被记录到这个目录下,具体在 /var/log 目录下,另外 mail 的预设放置也是在这里。



三、常用命令

命令参考 -> 点击查看

一、 目录文件相关

1. ls命令

就是 list 的缩写,通过 ls 命令不仅可以查看 linux 文件夹包含的文件,而且可以查看文件权限(包括目录、文件夹、文件权限)和查看目录信息等等。

常用参数搭配:

ls -a 列出目录所有文件,包含以.开始的隐藏文件 ls -A 列出除.及..的其它文件 ls -r 反序排列 ls -t 以文件修改时间排序 ls -S 以文件大小排序 ls -h 以易读大小显示 ls -l 除了文件名之外,还将文件的权限、所有者、文件大小等信息详细列出来

2. cd 命令

cd(changeDirectory) 命令语法:

cd [目录名]

实例:

#进入要目录 cd / #进入 "home" 目录 cd ~ #进入上一次工作路径 cd -

3. pwd 命令

pwd 命令用于查看当前工作目录路径。

实例:

#查看当前路径 pwd

4. mkdir 命令

mkdir 命令用于创建文件夹。

可用选项:

  • -m: 对新建目录设置存取权限,也可以用 chmod 命令设置;
  • -p: 可以是一个路径名称。此时若路径中的某些目录尚不存在,加上此选项后,系统将自动建立好那些尚不在的目录,即一次可以建立多个目录。

实例:

#当前工作目录下创建名为 t的文件夹 mkdir t #在 tmp 目录下创建路径为 test/t1/t 的目录,若不存在,则创建 mkdir -p /tmp/test/t1/t

5. rm 命令

(慎用删除前要检查好) 删除一个目录中的一个或多个文件或目录,如果没有使用 -r 选项,则 rm 不会删除目录。如果使用 rm 来删除文件,通常仍可以将该文件恢复原状。

rm [选项] 文件

实例:

#删除任何 .log 文件,删除前逐一询问确认 rm -i *.log #删除 test 子目录及子目录中所有档案删除,并且不用一一确认 rm -rf test #删除以 -f 开头的文件 rm -- -f*

6. mv 命令

移动文件或修改文件名,根据第二参数类型(如目录,则移动文件;如为文件则重命令该文件)。
当第二个参数为目录时,第一个参数可以是多个以空格分隔的文件或目录,然后移动第一个参数指定的多个文件到第二个参数指定的目录中。

实例:

#将文件 test.log 重命名为 test1.txt mv test.log test1.txt #将文件 log1.txt,log2.txt,log3.txt 移动到根的 test3 目录中 mv llog1.txt log2.txt log3.txt /test3 #文件 log1.txt 改名为 log2.txt,如果 log2.txt 已经存在,则询问是否覆盖 mv -i log1.txt log2.txt #移动当前文件夹下的所有文件到上一级目录 mv * ../

7. cp 命令

将源文件复制至目标文件,或将多个源文件复制至目标目录。
注意: 命令行复制,如果目标文件已经存在会提示是否覆盖,而在 shell 脚本中,如果不加 -i 参数,则不会提示,而是直接覆盖

-i 提示 -r 复制目录及目录内所有项目 -a 复制的文件与原文件时间一样

实例:

#复制 a.txt 到 test 目录下,保持原文件时间,如果原文件存在提示是否覆盖。 cp -ai a.txt test #为 a.txt 建立一个链接(快捷方式) cp -s a.txt link_a.txt

8. tar 命令

用来压缩和解压文件。tar 本身不具有压缩功能,只具有打包功能,有关压缩及解压是调用其它的功能来完成。

弄清两个概念:打包和压缩。打包是指将一大堆文件或目录变成一个总的文件;压缩则是将一个大的文件通过一些压缩算法变成一个小文件

常用参数:

-c 建立新的压缩文件 -f 指定压缩文件 -r 添加文件到已经压缩文件包中 -u 添加改了和现有的文件到压缩包中 -x 从压缩包中抽取文件 -t 显示压缩文件中的内容 -z 支持gzip压缩 -j 支持bzip2压缩 -Z 支持compress解压文件 -v 显示操作过程

实例:
(1)压缩:将 /etc 下的所有文件及目录打包到指定目录,并使用 gz 压缩

tar -zcvf /tmp/etc.tar.gz /etc

(2)解压:将压缩包解压到当前路径下

tar -zxvf /tmp/etc.tar.gz

(3)解压:将压缩包解压到指定路径下

tar -zxvf /tmp/etc.tar.gz -C /home/

二、文件内容相关

1. cat 命令

一次显示整个文件:

  cat filename

2. vim或者vi命令(推荐

编辑修改创建文件

[root@VM-CentOS-WPZJK imageService]# vim ./start.sh 
#!/bin/sh
java -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=128m -Xms1024m -Xmx1024m -Xmn256m -Xss256k -XX:SurvivorRatio=8 -XX:+UseConcMarkSweepGC -Dloader.path=lib,config -jar -Dfile.encoding=utf-8 -Duser.timezone=GMT+08 -Duser.language=zh -Duser.region=CN ./ImagesCollectionService-1.3.jar >log.log 2>&1 &

:q (退出)
:wq(保存并退出)
a (插入)

7. grep 命令

强大的文本搜索命令,grep(Global Regular Expression Print) 全局正则表达式搜索。

grep 的工作方式是这样的,它在一个或多个文件中搜索字符串模板。如果模板包括空格,则必须被引用,模板后的所有字符串被看作文件名。搜索的结果被送到标准输出,不影响原文件内容。
命令格式:

grep [option] pattern file|dir

常用参数:

-A n --after-context显示匹配字符后n行 -B n --before-context显示匹配字符前n行 -C n --context 显示匹配字符前后n行 -c --count 计算符合样式的列数 -i 忽略大小写 -l 只列出文件内容符合指定的样式的文件名称 -f 从文件中读取关键词 -n 显示匹配内容的所在文件中行数 -R 递归查找文件夹

grep 的规则表达式:

^ #锚定行的开始 如:'^grep'匹配所有以grep开头的行。 $ #锚定行的结束 如:'grep$'匹配所有以grep结尾的行。 . #匹配一个非换行符的字符 如:'gr.p'匹配gr后接一个任意字符,然后是p。 * #匹配零个或多个先前字符 如:'*grep'匹配所有一个或多个空格后紧跟grep的行。 .* #一起用代表任意字符。 [] #匹配一个指定范围内的字符,如'[Gg]rep'匹配Grep和grep。 [^] #匹配一个不在指定范围内的字符,如:'[^A-FH-Z]rep'匹配不包含A-R和T-Z的一个字母开头,紧跟rep的行。 \(..\) #标记匹配字符,如'\(love\)',love被标记为1。 \< #锚定单词的开始,如:'\<grep'匹配包含以grep开头的单词的行。 \> #锚定单词的结束,如'grep\>'匹配包含以grep结尾的单词的行。 x\{m\} #重复字符x,m次,如:'0\{5\}'匹配包含5个o的行。 x\{m,\} #重复字符x,至少m次,如:'o\{5,\}'匹配至少有5个o的行。 x\{m,n\} #重复字符x,至少m次,不多于n次,如:'o\{5,10\}'匹配5--10个o的行。 \w #匹配文字和数字字符,也就是[A-Za-z0-9],如:'G\w*p'匹配以G后跟零个或多个文字或数字字符,然后是p。 \W #\w的反置形式,匹配一个或多个非单词字符,如点号句号等。 \b #单词锁定符,如: '\bgrep\b'只匹配grep。

实例:

#查找指定进程 ps -ef | grep svn #查找指定进程个数 ps -ef | grep svn -c #从文件中读取关键词 cat test1.txt | grep -f key.log #从文件夹中递归查找以grep开头的行,并只列出文件 grep -lR '^grep' /tmp #查找非x开关的行内容 grep '^[^x]' test.txt #显示包含 ed 或者 at 字符的内容行 grep -E 'ed|at' test.txt

三、文件查找相关

在 linux 要查找某个文件,但不知道放在哪里了,可以使用下面的一些命令来搜索:

which 查看可执行文件的位置。 whereis 查看文件的位置。 locate 配合数据库查看文件位置。 find 实际搜寻硬盘查询文件名称。

1. which 命令

which 是在 PATH 就是指定的路径中,搜索某个系统命令的位置,并返回第一个搜索结果。使用 which 命令,就可以看到某个系统命令是否存在,以及执行的到底是哪一个位置的命令。
常用参数:

-n  指定文件名长度,指定的长度必须大于或等于所有文件中最长的文件名。

实例:

(1)查看 ls 命令是否存在,执行哪个 which ls (2)查看 which which which (3)查看 cd which cd(显示不存在,因为 cd 是内建命令,而 which 查找显示是 PATH 中的命令) 查看当前 PATH 配置: echo $PATH 或使用 env 查看所有环境变量及对应值

2. whereis 命令

whereis 命令只能用于程序名的搜索,而且只搜索二进制文件(参数-b)、man说明文件(参数-m)和源代码文件(参数-s)。如果省略参数,则返回所有信息。whereis 及 locate 都是基于系统内建的数据库进行搜索,因此效率很高,而find则是遍历硬盘查找文件。
常用参数:

-b 定位可执行文件。 -m 定位帮助文件。 -s 定位源代码文件。 -u 搜索默认路径下除可执行文件、源代码文件、帮助文件以外的其它文件。

实例:

(1)查找 locate 程序相关文件 whereis locate (2)查找 locate 的源码文件 whereis -s locate (3)查找 lcoate 的帮助文件 whereis -m locate

3. locate 命令

locate 通过搜寻系统内建文档数据库达到快速找到档案,数据库由 updatedb 程序来更新,updatedb 是由 cron daemon 周期性调用的。默认情况下 locate 命令在搜寻数据库时比由整个由硬盘资料来搜寻资料来得快,但较差劲的是 locate 所找到的档案若是最近才建立或 刚更名的,可能会找不到,在内定值中,updatedb 每天会跑一次,可以由修改 crontab 来更新设定值 (etc/crontab)。

locate 与 find 命令相似,可以使用如 *、? 等进行正则匹配查找

常用参数:

-l num(要显示的行数) -f 将特定的档案系统排除在外,如将proc排除在外 -r 使用正则运算式做为寻找条件

实例:

(1)查找和 pwd 相关的所有文件(文件名中包含 pwd) locate pwd (2)搜索 etc 目录下所有以 sh 开头的文件 locate /etc/sh (3)查找 /var 目录下,以 reason 结尾的文件 locate -r '^/var.*reason$'(其中.表示一个字符,*表示任务多个;.*表示任意多个字符)

4. find 命令

用于在文件树中查找文件,并作出相应的处理。

命令格式:

find pathname -options [-print -exec -ok ...]

命令参数:

pathname: find命令所查找的目录路径。例如用.来表示当前目录,用/来表示系统根目录。 -print: find命令将匹配的文件输出到标准输出。 -exec: find命令对匹配的文件执行该参数所给出的shell命令。相应命令的形式为'command' { } \;,注意{ }和\;之间的空格。 -exec 参数后面跟的是 command 命令,它的终止是以 ; 为结束标志的,所以这句命令后面的分号是不可缺少的,考虑到各个系统中分号会有不同的意义,所以前面加反斜杠。{} 花括号代表前面find查找出来的文件名。 -ok: 和-exec的作用相同,只不过以一种更为安全的模式来执行该参数所给出的shell命令,在执行每一个命令之前,都会给出提示,让用户来确定是否执行。

命令选项

-name 按照文件名查找文件 -perm 按文件权限查找文件 -user 按文件属主查找文件 -group 按照文件所属的组来查找文件。 -type 查找某一类型的文件,诸如: b - 块设备文件 d - 目录 c - 字符设备文件 l - 符号链接文件 p - 管道文件 f - 普通文件 ? -size n :[c] 查找文件长度为n块文件,带有c时表文件字节大小 -amin n 查找系统中最后N分钟访问的文件 -atime n 查找系统中最后n*24小时访问的文件 -cmin n 查找系统中最后N分钟被改变文件状态的文件 -ctime n 查找系统中最后n*24小时被改变文件状态的文件 -mmin n 查找系统中最后N分钟被改变文件数据的文件 -mtime n 查找系统中最后n*24小时被改变文件数据的文件 (用减号-来限定更改时间在距今n日以内的文件,而用加号+来限定更改时间在距今n日以前的文件。 ) -maxdepth n 最大查找目录深度 -prune 选项来指出需要忽略的目录。在使用-prune选项时要当心,因为如果你同时使用了-depth选项,那么-prune选项就会被find命令忽略 -newer 如果希望查找更改时间比某个文件新但比另一个文件旧的所有文件,可以使用-newer选项

实例:

(1)查找 48 小时内修改过的文件 find -atime -2 (2)在当前目录查找 以 .log 结尾的文件。 . 代表当前目录 find ./ -name '*.log' (3)查找 /opt 目录下 权限为 777 的文件 find /opt -perm 777 (4)查找大于 1K 的文件 find -size +1000c 查找等于 1000 字符的文件 find -size 1000c (5)在当前目录中查找更改时间在10日以前的文件并删除它们(无提醒) find . -type f -mtime +10 -exec rm -f {} \; (6)当前目录中查找所有文件名以.log结尾、更改时间在5日以上的文件,并删除它们,只不过在删除之前先给出提示。 按y键删除文件,按n键不删除 find . -name '*.log' mtime +5 -ok -exec rm {} \; (7)当前目录下查找文件名以 passwd 开头,内容包含 "pkg" 字符的文件 find . -f -name 'passwd*' -exec grep "pkg" {} \; (8)用 exec 选项执行 cp 命令 find . -name '*.log' -exec cp {} test3 \; (9)查找当前目录下每个普通文件,然后使用 xargs 来判断文件类型 find . -type f -print | xargs file -xargs find 命令把匹配到的文件传递给 xargs 命令,而 xargs 命令每次只获取一部分文件而不是全部,不像 -exec 选项那样。这样它可以先处理最先获取的一部分文件,然后是下一批,并如此继续下去。 (10)查找当前目录下所有以 js 结尾的并且其中包含 'editor' 字符的普通文件 find . -type f -name "*.js" -exec grep -lF 'ueditor' {} \; find -type f -name '*.js' | xargs grep -lF 'editor' (11)利用 xargs 执行 mv 命令 find . -name "*.log" | xargs -i mv {} test4 (12)用 grep 命令在当前目录下的所有普通文件中搜索 hostnames 这个词,并标出所在行: find . -name \*(转义) -type f -print | xargs grep -n 'hostnames' (13)查找当前目录中以一个小写字母开头,最后是 4 到 9 加上 .log 结束的文件: find . -name '[a-z]*[4-9].log' -print (14)在 test 目录查找不在 test4 子目录查找 find test -path 'test/test4' -prune -o -print (15)实例1:查找更改时间比文件 log2012.log新但比文件 log2017.log 旧的文件 find -newer log2012.log ! -newer log2017.log 使用 depth 选项: depth 选项可以使 find 命令向磁带上备份文件系统时,希望首先备份所有的文件,其次再备份子目录中的文件。 实例: find 命令从文件系统的根目录开始,查找一个名为 CON.FILE 的文件。 它将首先匹配所有的文件然后再进入子目录中查找 find / -name "CON.FILE" -depth -print

四、进程系统相关

1. ps 命令

ps(process status),用来查看当前运行的进程状态,一次性查看,如果需要动态连续结果使用 top

linux上进程有5种状态:

1-运行(正在运行或在运行队列中等待) 2-中断(休眠中, 受阻, 在等待某个条件的形成或接受到信号) 3-不可中断(收到信号不唤醒和不可运行, 进程必须等待直到有中断发生) 4-僵死(进程已终止, 但进程描述符存在, 直到父进程调用wait4()系统调用后释放) 5-停止(进程收到SIGSTOP, SIGSTP, SIGTIN, SIGTOU信号后停止运行运行) ps 工具标识进程的5种状态码: D 不可中断 uninterruptible sleep (usually IO) R 运行 runnable (on run queue) S 中断 sleeping T 停止 traced or stopped Z 僵死 a defunct (”zombie”) process

命令参数:

-A 显示所有进程 a 显示所有进程 -a 显示同一终端下所有进程 c 显示进程真实名称 e 显示环境变量 f 显示进程间的关系 r 显示当前终端运行的进程 -aux 显示所有包含其它使用的进程

实例:

#显示当前所有进程环境变量及进程间关系 ps -ef # 查找安装目录(运行进程): ps -ef |grep nginx 查找nginx运行路径 ps -ef | grep java 查找java运行路径 ps -ef | grep docker #显示当前所有进程 ps -A #与grep联用查找某进程 ps -aux | grep apache #找出与 cron 与 syslog 这两个服务有关的 PID 号码 ps aux | grep '(cron|syslog)'

2. top 命令

显示当前系统正在执行的进程的相关信息,包括进程 ID、内存占用率、CPU 占用率等

常用参数:

h 显示帮助画面,给出一些简短的命令总结说明 k 终止一个进程。 i 忽略闲置和僵死进程。这是一个开关式命令。 q 退出程序 r 重新安排一个进程的优先级别 S 切换到累计模式 s 改变两次刷新之间的延迟时间(单位为s),如果有小数,就换算成m s。输入0值则系统将不断刷新,默认值是5 s f或者F 从当前显示中添加或者删除项目 o或者O 改变显示项目的顺序 l 切换显示平均负载和启动时间信息 m 切换显示内存信息 t 切换显示进程和CPU状态信息 c 切换显示命令名称和完整命令行 M 根据驻留内存大小进行排序 P 根据CPU使用百分比大小进行排序 T 根据时间/累计时间进行排序 W 将当前设置写入~/.toprc文件中

image.png