linux学习--持续更新读书笔记

入门

本虚拟机为centos7

启动终端仿真器包或登录Linux虚拟控制台之后会看到shell CLI(Command-line Interface 命令行界面)提示符。提示符是进入shell世界的大门,你可以在此输入shell命令。除了作为shell的入口,提示符还能提供额外的辅助信息。在上面的例子中,提示符中显示了当前CentOS系统的主机名localhost。

"$"与"#":在BASH中,命令行以一个没有符号"$"作为提示符,表示用户可以录入命令。如果正在以root身份执行命令,那么Shell提示符将成为"#"。

linux目录结构

常见的Linux目录名均基于文件系统层级标准(filesystem hierarchy standard,FHS)​。

当你登录系统并获得shell CLI提示符后,shell会话会从你的主目录开始。主目录是分配给用户账户的一个特有目录。

linux系统操作

文件操作命令

1、cd 

在Linux文件系统中,可以使用目录切换(cd)命令来将shell会话切换到另一个目录。

cd命令的语法非常简单:

cd destination

cd命令可以接受单个参数destination,用以指定你想切换到的目录名。如果没有为cd命令指定目标路径,则会切换到你的用户主目录。destination参数可以用两种方式表示:一种是绝对路径,另一种是相对路径。

1.绝对路径

用户可以在虚拟目录中采用绝对路径来引用目录名。绝对路径定义了在虚拟目录结构中,该目录从根目录开始的确切位置,相当于目录的全名。绝对路径总是以正斜线(/)作为起始,以指明虚拟文件系统的根目录。因此,如果要指向usr目录所包含的子目录bin,可以写成下面这样

cd /usr/bin

演示

注意,在上面的例子中,提示符开头有一个波浪号(~)​。在切换到另一个目录之后,这个波浪号被bin替代了。CLI提示符正是用它来帮助你跟踪当前所在虚拟目录结构中的位置。波浪号表明shell会话当前位于你的主目录中。离开主目录之后,提示符中的目录也会随之发生变化(如果提示符已经进行了相关配置的话)​。具体可以点击此网站了解修改提示符方法。

  • /: 表示文件系统的根目录。这是整个文件系统结构的起点,所有的其他目录都位于这个根目录之下。

  • ~: 这是一个快捷方式,用于表示当前用户的主目录 (home directory)。对于大多数用户来说,默认情况下,~ 对应于 /home/<username> 路径下的某个子目录。如果是以 root 用户登录,则 ~ 可能会指向 /root

如果尚未配置提示符来显示当前shell会话的绝对路径,也可以使用shell命令来显示所处的位置。pwd命令可以显示出shell会话的当前目录,该目录被称为当前工作目录。pwd命令的用法如下。

但如果只是在自己的主目录中工作,那么总是使用绝对路径未免显得太冗长了。还有一种简单的解决方法相对路径。

2.相对路径

相对路径允许你指定一个基于当前位置的目标路径。相对路径不以代表根目录的正斜线(/)开头,而是以目录名(如果你准备切换到当前工作目录下的某个目录的话)或是一个特殊字符开始。假如你位于home目录中,希望切换到Documents子目录,那么可以使用cd命令配合相对路径

注意,在上面的例子中并没有使用正斜线(/)​,而是使用相对路径将当前工作目录从/home/christine改为了/home/christine/Documents,少敲了不少键盘。

可以在任何包含子目录的目录中使用带有相对路径的cd命令,也可以使用特殊字符来表示相对目录位置。有两个特殊字符可用于相对路径中:·单点号(.)​,表示当前目录;·双点号(..)​,表示当前目录的父目录。

当在目录层级中移动时,双点号非常便利。如果你处于主目录下的bin目录中,需要切换到主目录下的lk目录,可以这么做:

2、ls

  • ls:查看目录

    • 参数 -a 显示全部,包含隐藏

    • 参数 -l 列表形式显示

    ls -l 列表展示   可以取别名ll 具有同样效果 也可以加入通配符  如 ll yun* 达到了搜索的效果 类似find

  • 运行结果为

  • yunfile.txt
    yundata.csv
    yun_backup
    testfile.txt

    • “d”开头是目录,

    • “-” 开头是文件,

    • “l” 开头是链接文件

    ls -a 查看隐藏文件

    • . 开头的是隐藏文件或目录

    ls -la 列表展示,包含隐藏文件 简写命令是 ll -a 。

  • 注:如果终端仿真器支持色彩显示,ls命令可以通过不同颜色来区分不同类型的文件。LS_COLORS环境变量控制这个特性。也可用ls -F 来区分文件或者目录,-F会在目录后添加(/),在可执行文件后添加*号。

  • -R是递归选项,可以列出当前目录包含子目录中的文件。配合-F使用会比较容易分辨文件类型。

  • 例如 ls -F -R 也可将其合并 ls -FR

  • 如果遗忘了ls命令其他选项,可以在shell中输入 man ls协助你回忆选项。并且ls后面的参数都可以合并,如ls -alF。

  • 3、touch

  • touch:创建新文件命令 touch 文件名 默认创建的空文件

  • 注:如果文件已经存在,也不会对原文件造成影响,只会更新该文件的创建时间。

  • 注:过滤器

  • 定义 过滤器就是一个字符串,可以进行简单的文本匹配 

  • 通过touch指令创建一个几个文件方便进行实验,

  • touch my_script my_scrapt my_file
    touch fall fell fill full
  • 输入指令ls,会显示这样名称的几个文件

  • ls命令也可以识别标准通配符,在过滤器中用了进行模式匹配

  • ?代表任意单个字符

  • *代表0个或多个字符

  • 如输入

    ls -l my_scr?pt

    用于列出当前目录下文件名匹配 my_scr?pt 的文件的详细信息

  • 因此,my_scr?pt 可以匹配以下文件名:

    • my_script

    • my_scr1pt

    • my_scrapt

    • 等等。

    • 如输入

      ls -l my_scr*pt
    • 因此,my_scr*pt 可以匹配以下文件名:

      • my_script

      • my_scrpt

      • my_scr123pt

      • my_scrapt

  • 在过滤器中使用*和?叫做通配符匹配,指使用通配符进行模式匹配的过程。而像?和*的通配符叫做元字符通配符。还介绍其他两个通配符[]和!

  • []代表单个字符位置给出的多种可能选择。

  • !代表可以将给出的字符排除在外

  • ls ls my_scr[ay]pt
  • 因此,my_scr[ay]pt 可以匹配以下文件名:

    • my_scrapt

    • my_scrypt

  • ls -l f[!a]ll

  • 因此,ls -l f[!a]ll 可以匹配以下文件名:

    • fell

    • fill

    • full

  • 4、echo

  • echo "内容" > a.txt 添加内容到文件,会覆盖

  • echo "内容" >> a.txt 追加内容到文件,追加到尾部

  • cat 文件 显示文件内容

  • cat a.txt >> b.txt a文件追加到b文件

  • echo $变量 显示变量的值

  • 5、mkdir

  • mkdir 目录名字 [目录名列表],效果如下:

  • mkdir a 在当前下创建a

  • mkdir test/a1 在 test下创建a1

  • mkdir b c d 在当前下同时创建 b、c、d目录

  • 可根据需求批量创建子目录和根目录

  • mkdir -p New_Dir/Sub_Dir/Under_Dir
  • 执行结果

  • 如果当前目录下不存在 New_DirSub_Dir 和 Under_Dirmkdir -p 会依次创建这些目录。

  • 如果部分目录已经存在(例如 New_Dir 已经存在),mkdir -p 会跳过已存在的目录,继续创建不存在的目录。

  • rmdir

  • 删除目录指令 和mkdir类似 rmdir 目录名字

  • 在默认情况下,rmdir只能删除空目录

  • 6、mv和rm

  • mv 文件或目录名 目标文件或目录名,效果如下:

  • 文件操作 mv a.txt b.txt : b.txt不存在即为重命名,存在会直接覆盖

  • 使用mv -i指令会在覆盖前询问是否覆盖 并且mv指令不会改变

  • 目录操作 mv test tmp :tmp不存在即为重命名,存在为移动效果

  • 而移动效果并不会更改原文件的修改时间和inde编号

  • 文件对目录 mv a.txt ./tmp 移动文件到指定目录

  • rm

  • 移除 rm 文件

  • rm在移除文件时同样不会询问你是否删除

  • rm -i指令会在输入后提示你是否删除文件

  • 也可以配合通配符进行批量删除 如

  • rm -i f?ll

    例如,fillfullfall 等文件名都符合 f?ll 模式。

  • 配合递归-r

  • rm -ir 文件

    会依次确认,确认好删除文件

  • 也可以强制删除 不会提示

  • rm -f  

  • 谨慎使用rm -f

  • 7、cp

  • cp [参数] 源文件或目录,目标文件或目录

    参数: -r 递归

  • 如果目标文件已存在,使用cp指令会将其覆盖,最好增加-i参数让shell提示

  • cp -i 源 目标

  • 单文件操作 cp a.txt a.txt.bak 在当前下复制一个文件

  • 多文件操作 cp ./web/* ./test 把web下的所有文件复制到test下

  • 递归操作 cp -r ./web/* ./test 把web下的所有文件及子目录复制到test下

  • 命令行补全

  • 在使用命令行时,容易输错命令、目录、文件名,可以使用tab键位让shell帮助你补全。但是当遇到文件名类似的情况,点击一下tab也无法自动补全,需要点击两下tab,shell就会把相似的文件列出来协助你补全。

  • 8、find

  • find 搜索位置 -name 字符串

  • find / - name 'java' 查java

  • find / -name '*redis' 查找含有redis的

  • 9、chmod

  • 文件的类型:

    • d:代表目录

    • -:代表文件

    • l:代表链接(可以认为是window中的快捷方式)

  • 后面的9位分为3组,每3位置一组,分别代表属主的权限,与当前用户同组的 用户的权限,其他用户的权限

    • r:代表权限是可读,r也可以用数字4表示

    • w:代表权限是可写,w也可以用数字2表示

    • x:代表权限是可执行,x也可以用数字1表示

语法:chmod 数字或符号权限 [参数] 文件或目录

  • chmod u=rwx,g=rw,o=r aaa.txt

  • chmod 750 -R 文件或目录名 递归授权

  • chmod 755 文件或目录

  • 查看文件命令

  • 10、file

    查看文件类型 语法 

    file 文件
  • 11、cat

  • 查看文件,只能显示文件最后一屏

    cat a.txt 查看文件全部内容

    注意:

    cat除了查看文件内容,还可以把文件内容进行合并

    cat a.txt >> b.txt 把a.txt文件输出到b.txt中

    比如:

    echo 'aaa' > a.txt

    echo 'bbb' > b.txt

    cat a.txt >> b.txt

  • cat -n 给所有行加上行号
  • cat -b 给只有文本的行加上行号

    -m 百分比
  • 12、more和less

  • more命令 显示文本文件的内容:分页查看所有内容,带百分比

    显示文件百分比,回车下一行,空格下一页,退出是Q

  • less命令(根据less is more得来) 查看文件:分页查看所有内容,带行号和百分比

    箭头上下代表上一行,下一行,空格显示下一页,退出是Q

  • less和more的区别 在完成整个文件的读取之前显示文件的内容

  • 13、head和tail

  • head/tail命令查看文件,支持显示的文件行数

  • head 查看文件头部 内容

  • head在默认情况下显示文件的前十行

  • 可使用head -n test.txt显示文件的前n行

  • tail 查看文件尾部内容

  • -n 数字 代表行数

  • tail在默认情况下显示文件的后10行

  • 如tail -2 test.txt   显示文件的最后两行

    -f 实时持续查看文件内容
  • 进程指令

  • 14、ps

  • 探查进行指令ps 默认显示当前终端中属于当前用户的进程 
  • 参数:-e 显示所有程序

  • 参数:-f 显示UID,PPIP

    ps -ef 显示所有进程

    UID :程序被该 UID(用户ID) 所拥有

    PID :就是这个程序的 ID

    PPID :则是其上级父程序的ID**

    C :CPU使用的资源百分比**

    STIME :系统启动时间**

    TTY :登入者的终端机位置**

    TIME :使用掉的CPU时间。**

    CMD :所下达的是什么指令**

  • 注意:配合管道符 | 可以达成寻找特定进程的目的,

  • 例如 

  • ps -ef | grep "想找的进程信息"
  • 15、top

  • 实时监测进程 对比ps显示某一时刻的进程信息,top显得更加方便

  • 16、kill

    参数:-9 强制杀死该进程

  • 可使用top或ps查看是否关闭进程

  • 17、pkill

  • 可以使用程序名代替PID来终止进程 pkill命令也允许使用通配符

  • 如 pkill http*

  • 将关闭所以http为起始的进程

  • 存储设备命令

  • 18、mount

  • 挂载存储设备
  • mount命令提供了4部分信息。
  • 设备文件名
  • 设备在虚拟目录中的挂载点
  • 文件系统类型
  • 已挂载设备的访问状态
  • 手动挂载设备基本命令
  • mount -t type device directory
  • 19、umount

  • 卸载存储设备 注意无n,不是unmount
  • 语法格式
  • umount [directory | device ]
  • 20、df

  • 显示当前磁盘剩余多少磁盘空间
  • df -h 以M为单位显示磁盘空间
  • 12、vi/vim
  • vim:文件名

    适合快速修改纯文本文件,比如配置文件、属性文件、源文件等

  • vim编辑器有三种模式

    命令模式、编辑模式、底行模式,按ESC,退出当前模式,进入命令模式。

    • 命令模式

      刚刚进入是命令模式,从命令模式可进入编辑模式或底行模式。

      只接受命令关键字 其他字符不接受,通过输入相应的命令可以进入编辑模式

      dd:删除当前行

      yy:复制当前行

      p:粘贴

      整页翻页 ctrl-f、 f是forword , ctrl-b b就是backward

      shift+$是移动到行尾,0是移动到行首

    • 编辑模式

      进入编辑模式命令:i,o,a或者insert

      对文件进行内容编辑 任何字符都接受,内容编辑完毕之后 需要退回命令模式

      退回到命令模式,按ESC键

    • 底行模式

      在命令模式下,输入冒号 : ,进入底行模式。

      底行命令:

      • :wq,写入并退出,

      • :q! ,退出不保存

      • :set nu,显示行号

      • :set nu!,取消行号显示

      • :数字,定位行号

      • :/ 搜索字符,n是下一个,N是上一个

  • vim编辑器使用过程关于vim使用过程:

    vim 文件---------->命令模式--------->

    输入i------------>编辑模式----------->编辑文件----------->

    按下Esc--------->命令模式----------->

    按下:---------->底行模式----------->输入 wq 保存并退出 或者 q! 强制退出不保存

  • 13、tar

  • 参数:-z 调用gzip压缩命令压缩

  • 参数:-c 打包文件

  • 参数:-C 在指定的目录解压缩

  • 参数:-v 显示命令的执行过程

  • 参数:-f 指定文件名

  • 参数:-x 解压缩

  • 示例:将test目录打成压缩包,压缩后文件名为 test.tar.gz

    • tar -zcvf test.tar.gz test

  • 示例:将test.tar.gz进行解压缩

    • tar -xvf test.tar.gz

    • tar -xvf test.tar.gz -C /usr/local 解压缩到指定的目录

14、zip和unzip

zip -r mydata.zip mydata #压缩mydata目录

zip -r abc123.zip abc 123.txt #把abc文件夹和123.txt压缩成为abc123.zip

unzip 解压缩命令

unzip -d /a/b filename.zip 将文件解压缩到/a/b目录里面、

17、grep

过滤指令

grep [option] 字符串或正则表达式 文件名

从指定文件,搜索匹配的字符串

-i 忽略大小写

示例:

grep -i test /etc/sudo.conf 中包含字符串“test”的内容,且忽略大小写

grep '^d' /etc/sudo.conf 查找以d开头的数据

A命令 |B命令 | C命令

将前一个命令的输出作为下一个命令的输入

可以任意组合,只要是上一级有内容输出,下一个管道就可以处理

  • ll | grep '^d' | grep '.d$'| grep '4月'
    find / -name '*.log' | grep 'tomcat'

18、type

它可以帮助用户了解命令是 shell 内置命令、别名、函数还是外部可执行文件,并提供其路径(如果适用)。

type [选项] 命令名...

-a:显示所有匹配的命令,包括别名、内置命令、函数和外部命令。

-t:仅输出命令的类型(如 alias, builtin, file, function, keyword),而不是完整的描述。

-p:仅当命令是外部命令时,输出其完整路径。如果命令不是外部命令,则不输出任何内容。

-P:类似于 -p,但会搜索 $PATH 和当前目录(.),并且即使找到多个同名命令也只返回第一个。

-f:忽略别名和函数,直接查找命令或外部程序。

网络指令

查看IP

ifconfig 查看本机网络卡信息

易混:ipconfig是windows的shell中查看ip的指令,区别在于linux是network interfaces configuring

测试网络

ping 查看与某台主机的连接情况

查看端口

netstat 查看本机被使用的端口号

参数:-a 显示所有连接

参数:-n 以网络IP地址代替名称

-t 显示tcp, -u 显示udp连接情况

常用

不推荐:netstat -an -t -u | grep '8080'

推荐:

netstat -ant | grep '8080'
netstat -anu | grep '8080'

查找结果更加清晰

更优秀的选择

ss -tulnp | grep ':8080\b'

  • -t:TCP 连接

  • -u:UDP 连接

  • -l:仅监听(LISTEN)的端口

  • -n:不解析服务名

  • -p:显示进程信息

重启关机命令

重启 reboot

关机 halt |

shutdown -h

查看别名

alias

[root@ttlio ~]# alias
alias cp='cp -i'
alias egrep='egrep --color=auto'
alias fgrep='fgrep --color=auto'
alias grep='grep --color=auto'
alias l.='ls -d .* --color=auto'
alias ll='ls -l --color=auto'
alias ls='ls --color=auto'
alias mv='mv -i'
alias rm='rm -i'
alias which='alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde'
[root@ttlio ~]# 

管道

管道的基本概念

管道(pipe)是一种特殊的文件类型,它在内存中创建一个缓冲区,用于存储一种命令的输出和另一种命令的输入。

管道的创建和使用非常简单,只需要使用|符号即可。

如之前上面的ps举例的

ps -ef | grep "想找的进程信息"

Linux管道在实际应用中非常广泛,可以用于各种数据处理和工作流程的构建。以下是一些常见的应用场景和例子:

文本处理和过滤器:管道非常适合处理文本数据。可以使用各种文本过滤器(如grep、sed、awk等)组合起来进行文本搜索、替换、提取等操作。例如,可以通过将ls命令的输出传递给grep来搜索特定的文件:

ls | grep .txt

数据转换和格式化:可以使用管道将一个命令的输出传递给另一个命令进行数据转换和格式化。例如,可以使用cat命令将一个文件的内容输出到管道,然后使用tr命令将其中的大写字母转换为小写字母:

cat file.txt | tr 'A-Z' 'a-z'

进程监控和管理:可以使用管道来监控和管理系统中的进程。例如,可以使用ps命令获取进程列表,并将其传递给grep命令来筛选特定的进程:

ps aux | grep nginx

多命令串联:可以使用管道将多个命令串联在一起,形成更复杂的工作流程。例如,可以使用find命令查找特定类型的文件,并将结果传递给xargs命令来执行后续的操作:

find . -name "*.txt" | xargs rm

日志分析和处理:管道可以用于实时分析和处理日志数据。例如,可以使用tail命令实时监视日志文件,并将其输出传递给grep命令来筛选感兴趣的日志条目:

tail -f logfile.txt | grep “error”

数据流分析和统计:可以使用管道将数据流传递给统计命令进行数据分析和统计。例如,可以使用cat命令将一个文件的内容输出到管道,然后使用wc命令统计行数、单词数和字符数:

cat file.txt | wc

内建命令和外部命令

外部命令(有时也称为文件系统命令)是存在于bash shell之外的程序。也就是说,它并不属于shell程序的一部分。外部命令程序通常位于 /bin、/usr/bin、/sbin或/usr/sbin目录中。

ps命令就是一个外部命令。可以使用which命令和type命令找到其对应的文件名

[root@ttlio ~]# which ps
/usr/bin/ps
[root@ttlio ~]# type ps
ps 是 /usr/bin/ps
[root@ttlio ~]# ls -l /usr/bin/ps
-rwxr-xr-x. 1 root root 100120 4月  11 2018 /usr/bin/ps
[root@ttlio ~]# 

每当执行外部命令时,就会创建一个子进程。这种操作称为衍生(forking)​。外部命令ps会显示其父进程以及自己所对应的衍生子进程:

[root@ttlio ~]# ps -f
UID         PID   PPID  C STIME TTY          TIME CMD
root       1436   1432  0 11:10 pts/0    00:00:00 -bash
root       2808   1436  0 16:30 pts/0    00:00:00 ps -f
[root@ttlio ~]# 

在使用内建命令时,不需要衍生子进程。因此,内建命令的系统开销较低。

内建命令

内建命令无须使用子进程来执行。内建命令已经和shell编译成一体,作为shell的组成部分存在,无须借助外部程序文件来执行。

cd命令和exit命令都内建于bash shell。可以使用type命令来判断某个命令是否为内建:

19、sed

sed(Stream EDitor)是 Linux/Unix 系统中强大的流编辑器,用于对输入流(文件或管道)进行基本的文本转换。

sed [选项] '命令' 文件
  • -n:禁止默认输出,只打印处理过的行

  • -e:允许多个编辑命令

  • -i:直接修改文件内容(慎用)

  • -r:使用扩展正则表达式

20、stat

stat 是 Linux/Unix 系统中用于显示文件或文件系统的详细状态信息的命令。它可以查看文件的元数据,如权限、大小、所有者、时间戳等。

stat [选项] 文件或目录

常用选项

选项说明
-c 或 --format自定义输出格式
-f显示文件系统状态(而非文件状态)
-L跟踪符号链接(显示链接指向的文件信息)
-t以简洁格式显示信息

21、scp

(Secure Copy Protocol)命令用于通过 SSH 协议在本地和远程系统之间安全地复制文件或目录。以下是其核心用法和注意事项:

scp [选项] 源文件 目标路径

常用选项

选项说明
-r递归复制目录(复制文件夹及内容)
-P 端口指定 SSH 端口(默认 22)
-v显示详细输出(调试用)
-C启用压缩(加速大文件传输)
-i 私钥文件指定 SSH 私钥文件(免密码登录)
scp -r /table  192.1.1.1:/table

 将本机table的文件夹通过递归传到 192.1.1.1的table中 需要知道192.1.1.1的访问密码

                        

参考

linux命令:用于显示给定命令的类型的工具命令type详解-优快云博客

【linux】Linux管道的原理与使用场景_linux 管道-优快云博客

Linux命令行与shell脚本编程大全(第4版) - 第11章 构建基础脚本 - 理查德·布卢姆 克里斯蒂娜·布雷斯纳汉 著 - 微信读书

    评论
    添加红包

    请填写红包祝福语或标题

    红包个数最小为10个

    红包金额最低5元

    当前余额3.43前往充值 >
    需支付:10.00
    成就一亿技术人!
    领取后你会自动成为博主和红包主的粉丝 规则
    hope_wisdom
    发出的红包
    实付
    使用余额支付
    点击重新获取
    扫码支付
    钱包余额 0

    抵扣说明:

    1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
    2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

    余额充值