Linux

356 阅读4分钟

终端命令格式

command [options] [params]

  • command 命令名,如:

    • pwd 查看当前所在目录的路径

    • ls 查看当前所在目录下的文件及目录

  • options 可选项,用于对命令进行控制,如:

    • rm -r a 递归删除目录a

    • ls -a 查询当前所在目录下的所有目录和文件,包括隐藏文件

    • ls -l 以列表的方式展示当前目录下的目录、文件,及其详细信息

    • ls -lh 相对ls -l更加人性化

  • params 操作目标即是params,如:rm -r a,其中的a就是params

文件操作

  1. 创建文件: touch a.txt 在当前目录下创建一个文件a.txt

  2. 删除文件:rm a.txt 将当前目录下的a.txt文件删除

  3. 编辑文件:vi a.txt 如果没有该文件则创建并编辑(命令vim是vi的升级版本,更加强大)

  4. 查看文件内容

    • cat a.txt 查看当前目录下文件a.txt的内容

    • cat -b a.txt 显示行号(忽略空行)

    • cat -n a.txt 显示行号(不忽略空行)

    • more a.txt 分屏查看文件的内容,按下空格键查看下一屏

    • grep hello a.txt 搜索字符串“hello”,将含有该字符串的所有行展示出来

    • grep -n hello a.txt 即显示行号

    • grep -ni hello a.txt 显示行号并且不区分大小写

    • grep ^hello a.txt 可匹配以字符串“hello”开头的所有行,匹配规则符合正则表达式,如匹配以字符串“hello”结尾的所有行就是:hello$

  5. 拷贝

    • cp a.txt b.txt 拷贝当前目录下的a.txt到当前目录下并重命名为b.txt

    • cp -i a.txt b.txt 如果当前目录下存在文件b.txt,则覆盖

  6. 输出内容到文件内

    • echo hello world > test.txt 先清空test.txt,在将“hello world”输出到文件内

    • echo hello world >> test.txt 在原有内容基础上换行追加“hello world”到文件内

    • ls -lha >> test.txt 将命令“ls -lha"的执行结果输出到文件内

  7. 移动:mv a.txt ~/Desktop/b.txt 将文件a.txt移动到用户/Desktop目录内并重命名为b.txt

目录操作

  1. 创建目录:mkdir a

  2. 创建嵌套目录:mkdir -p a/b/c -p表示以递归的方式创建

  3. 删除目录:rm -r a 表示递归删除目录a,即从内到外依次删除

  4. 查看目录内容:ls

  5. 带条件的查看目录内容

    • ls 1*3.txt 表示查看名字以1开头且以3结尾的txt文件,*可匹配多个字符

    • ls 1?3.txt ?可匹配1个字符

    • ls [0-9].txt 可匹配一个数字

    • ls [234].txt 可匹配2、3、4这三个数字其中一个,匹配规则符合正则表达式

    • ls -lha | grep a.txt 查看当前目录的内容信息,并且只查看文件”a.txt"

    • ......

  6. 查看目录的树状结构:tree 展示出当前目录的所有内容,包括嵌套的内容,可选项-d表示树形结构中只展示目录

  7. 拷贝:cp -r a b 拷贝目录a到当前目录下,并重命名为b

  8. 移动:mv a ~/Desktop 将当前目录下的目录a移动到用户目录下的Desktop目录内

管道命令操作符

”|“是管道命令操作符,简称管道符。作用是可以将两个命令隔开,管道符左边命令的输出会作为右边命令的输入;连续使用管道符意味着第一个命令的输出会作为第二个命令的输入,第二个命令的输出会作为第三个命令的输入,以此类推。

比如:ps -ef | grep java

  • ps是Linux中非常强大的进程查看工具,其中-e为显示所有进程,-f为全格式显示
  • grep是一个非常高效的查询工具,可以查询文本中带有某关键字的行 这个命令的功能是:查询带有关键字“java”的进程,会一条一条的列出。

单使用ps -ef会列出所有的进程,但是我们只想看想要的进程有没有存在于后台,所以用管道符,把所有的进程信息传给grep程序,帮我们搜索我们想要的进程信息。

远程管理

  1. 开关机操作

    • shutdown 一分钟后关机(默认),相当于showdown now

    • shutdown -c 取消操作,即取消关机

    • shutdown -r 关闭并重启计算机(默认一分钟后执行操作)

    • shutdown -r now 立即重启

    • shutdown +5 五分钟后关机,即“shutdown +10”则是十分钟后关机

    • shutdown 21:10 在21:10关机

  2. 查看及配置网卡信息

    • ipconfig 查看计算机的网卡信息

    • ping baidu.com ping命令用于检测本机与目标计算机是否连接正常(是否可以通讯,来回接收发送数据),当前命令即检测计算机与baidu.com的连接是否正常;(比如计算机向baidu.com发送56字节的数据,然后接收来自baidu.com响应的52字节的数据,可以知道接收52字节数据所需要花费的时间,当然每次接收所花费的时间都是不同的,如果接收10次,有5次都接收失败了,说明与其连接不是很顺畅,类似于两个人打电话,一方信号不好就会导致说话听不全)

    • 网卡 网卡就是一个专门负责网络连接通讯的硬件设备,计算机想要上网,网卡是必要条件;其类型有:集成网卡、无线网卡、虚拟网卡、独立网卡

    • IP地址 IP地址是设置在网卡上的地址信息,如果把电脑比作手机,那么网卡相当于SIM卡,IP地址相当于手机号码

    • 域名 由于IP地址不便于记忆,便有了域名的产生,即可通过独一无二的域名来作为IP地址的引用,好的域名也是身份的象征,比如:“baidu.com”

    • 端口 通过端口号可以访问到在计算机上运行的程序

  3. 远程登录

    • ssh username@ip/域名

权限管理

目录/文件/应用程序的使用权限

权限缩写全程数字编号
rread4
wwrite2
执行xexcute1
  • 通过ls -l查看,第一列区分的是目录还是文件,-是文件,d是目录;

    • 后面是三列为一组,每组里面的“-”表示无,如“-wx"表示可写可执行不可读,第一组区分的是文件或目录的拥有者(当前用户)权限;第二组区分的是文件或目录的群组权限;第三组标注的是文件或目录的其他用户的操作权限;

    • 硬链接数:权限说明符号后面的数字表示该文件或目录的访问路径的数量,称为硬链接数,比如访问当前目录,在当前目录执行“cd ."为一种,在其子目录下执行”cd .."为一种,通过绝对路径访问也是一种,所以硬链接数的值为多少取决于有多少子级目录;文件的硬链接数通常为1(绝对路径),目录的通常为多个;

    • 拥有者:硬链接数后面跟着的即为拥有者(当前用户)

    • 群组:拥有者后面跟着的为群组;一个系统内可以有多个用户,并且可以进行分组,比如有用户a、b、c、d、e,其中a、b为一组,组名为”x“,c、d、e为一组,组名为”y";那么x或y就被称为群组。当一个目录或文件的群组权限是可读可执行,那么即指这个群组下所有用户都对这个文件或目录具有可读可执行的权限。

    • 其余后面的依次是:大小(kb)、时间(月份)、时间(日)、时间(小时:分)、文件名/目录名

  • 权限的修改,chmod +或-rwx 目录或文件名,+表示增加权限,-为去除;比如修改当前目录下的目录“app”权限,去掉其可读的权限,命令为:chmod -r app

    • 在设置时,还可以用三个数字分别对应拥有者/组/其他用户的权限,如chmod -R 777 文件或目录名,表示修改其权限为拥有者对其可读写可执行、组对其可读可写可执行,其他用户对其可读可写可执行;即u=777,g=777,o=777

    • 数字说明

      u=拥有者g=组o=其他用户
      r---w---xr---w---xr---w---x
      4---2---14---2---14---2---1

      不指定就是0,-没权限

      4 2 1 = 7 rwx

      4 2 0 = 6 rw-

      ......

  • 修改文件/目录的权限拥有者,chown -R(如果是目录需要带上-R进行递归) 用户名 文件名/目录名

  • 修改文件或目录的所属组:chgrp -R 组名 文件名/目录名

  • 超级用户root,Linux服务器管理员账号通常是root,具有对操作系统所有资源的控制访问权限,用于系统的维护和管理;想让更多的人参与到服务器的维护中来,超级用户会创建多个普通用户账号,这些普通用户都通过ssh远程登录到服务器,操作自己家务事,不能操作别人家的事,也不能操作系统配置;如果普通用户想搞些更高级的操作,需要被授权,可以在命令前加sudo(super user do,表示使用另一个用户的身份,预设的身份是超管root),没有被授权的用户使用sudu,会发出警告给超管。

组管理

  • 组管理:为了更方便管理用户或项目,简化对多个用户一对一的设置,便捷高效管理,通常会对用户进行分组管理;

    • 组操作常用命令

      命令描述
      groupadd 组名添加组,添加的组信息保存在/etc/group中
      groupdel 组名删除组
      cat /etc/group | grep 组名查看组信息
      chgrp -R 组名 目录名/文件名修改目录或文件所属组

      如:查看超管root的组信息:cat /etc/group | grep root;查看所有组信息:cat /etc/group

      组信息包括组id、附加组id等相关信息

      etc为系统级目录

    • 在实际应用开发中,可以提前针对组设置好权限,然后再将不同的用户添加到对应的组中,这样就不需要一对一的对每个用户设置不同的权限

用户管理

  • 创建用户/删除用户/设置用户密码

    命令作用描述
    useradd -m -g 组名 用户名新增用户-m自动建立用户家目录
    -g指定用户所属组,否则会创建一个和用户名相同的组
    passwd 用户名设置密码如果是普通用户,可以直接用passwd修改自己的密码
    userdel -r 用户名删除用户-r选项会自动删除用户家目录
    cat /etc/passwd | grep 用户名查看用户新建用户的信息保存在/etc/passwd文件中
    id 用户名-查看用户UID和GID信息
    who-查看当前所登录的用户列表
    whoami-查看当前登录的账户名

    如:先创建组:groupadd dev,创建用户账号:useradd -m -g dev lqd,设置密码:passwd 123456;此时可以其在它设备通过ssh以用户lqd的身份连接进来,密码即为该用户的密码;

  • 设置用户的主组、附加组、登录的shell usermod

    • 主组:通过useradd创建用户时所指定的组为用户的主组,并且该用户在创建文件/目录时,文件/目录的所属组即是用户的主组

    • 附加组:除主组外,用户所在的其他组都是附加组。用户无论是在主组还是在附加组中,都会拥有该组的权限,一个用户可以属于多个附加组,但只能属于一个主组。

    • 修改用户的主组:usermod -g 组 用户名

    • 修改用户的附加组:usermod -G 组 用户名 如:usermod -G sudo lqd,此时用lqd就具有使用sudo的权限了

    • 修改用户登录的shell:usermod -s /bin/bash 用户名,用户下次登录后看到的shell界面则为bash界面(shell即是终端命令窗口,是一种软件,有powershell、xshell、bash、dash等,各自界面UI不同)

  • 查看命令所在位置:which或where,如查看node的命令所在位置which node

  • bin和sbin,在Linux系统中,绝大部分的可执行文件是保存在这两个目录中的,/bin二进制执行文件目录,主要用于普通的应用程序;sbin系统管理员专用的二进制执行文件存放目录,主要用于系统管理;/usr/bin用户安装的一些软件的软链接存放目录;/usr/sbin超管存放的用于管理的应用程序;即bin存放普通应用程序,sbin存放用于管理的应用程序

    如想要让刚安装的node在系统任何位置都能使用node命令,可以将node的执行文件的软链接添加到/usr/bin中,假设下载的node解压在了当前目录下并命名为node,那么命令为:ln -s ./node/bin/node /usr/bin/node,相当于添加全局变量

  • 切换用户并切换家目录su - 用户名,如home下有用户lqd和abc,执行su - abc,就会切换用户为abc并进入到目录abc内

系统信息

  • date查看日期

  • cal查看当月日历

    • cal -y查看一年中所有日历

    • cal 6 2021 查看2021年6月的日历

  • df 查看磁盘使用情况,默认为查看当前目录的磁盘使用情况

    • df -h app 查看当前目录下app目录的磁盘使用情况详细信息
  • du -h app 查看当前目录下app的大小,包括总大小以及其子级目录的大小

  • ps aux | grep node 查看所有正在运行的node程序进程信息

    • 默认只会显示当前用户通过终端启动的应用程序

    • -a 显示终端上所有进程,包括其他用户的

    • -u 显示进程的详细状态

    • -x 显示没有控制终端的进程

  • top 动态显示运行中的程序进程并排序,退出按q

  • kill 进程id 杀掉进程

  • netstat -ano 查看端口占用情况

查找和软链接

  • find 查找

    • find 路径 -name '文件名',文件名可使用通配符;如查找当前目录下notes下所有以".txt"结尾的文件:find ./notes -name '*.txt'
  • ln 软链接,相当于访问应用程序的快捷方式

    • ln -s 源文件绝对路径 目标绝对路径,在用户管理里有用到过该命令,实现了全局可访问node;参数-s为指定创建软链接,如果不指定-s,则会创建硬链接,相当于把源文件复制到目标目录下

打包压缩及解压缩

  • tar -cvf a.tar *.txt 将当前目录的下所有以”.txt"结尾的文件打包并命名为“a.tar"

    • -c 生成档案文件并创建打包文件

    • -x 解开档案文件

    • -v 列出归档/解档的详细列表,显示进度

    • -f 指定归档/解档的文件名称,该选项需放在最后,其后跟 *.tar文件

  • tar -xvf a.tar 将当前目录下的包文件“a.tar”解包

  • gzip 在Linux系统中,可通过该命令压缩tar打包后的文件,其扩展名为:.tar.gz

    • tar -zcvf ga.tar.gz *.txt 打包并压缩,表示将当前目录下所有.txt文件打包并压缩命名为:ga.tar.gz;

    • tar -zxvf gz.tar.gz 解压缩,表示将当前目录下的文件“gz.tar.gz”进行解压缩

    • tar -zxvf gz.tar.gz -C gz 通过选项C指定解压缩后的文件存放到当前目录下的gz目录内

彩蛋

  • npm xmas 圣诞树

  • sl 小火车

  • cmatrix 字节数据流,黑客帝国,可通过选项C指定颜色,如:cmatrix -C red

  • 可视化图表 hollywood

  • oneko 追逐鼠标的小猫

  • fortune 名人名言,古诗词

  • asciiview 图片名 图片转ASCII画风

vim编辑工具

vim(vi improved)是从vi发展出来的文本编辑器,建立在vi基础之上

  • 命令模式,通过vim打开文件就进入了命令模式,在此状态下,按下键盘的键,这个键就会被识别为命令

    • vim 文件名 打开文件(没有则创建)

    • vim 文件名 +3 光标会定位到第三行

    • esc,切换到命令模式

    • 英文冒号进入底线命令模式

    • u 撤销上一步操作

    • ctrl + r 恢复上一次撤销

    • .,英文小数点,重复上次操作

    • 切换至输入模式

      1. i,切换至输入模式并光标停留在所在处

      2. a,切换至输入模式并光标停留在下一个字符

      3. A,切换至输入模式并光标停留在当前行最后一个字符后

      4. o,切换至输入模式并在光标所在行下方插入空行,并停留在空行行首

      5. O,切换至输入模式并在光标所在行上方插入空行,并停留在空行行首

    • 取代模式

      1. r,进入取代模式,按下r后再按下一个字符会取代光标所在处的字符,只取代一次即退出取代模式

      2. R,进入取代模式,会一直取代光标所在处的字符,每取代一个光标后移一位;按esc退出取代模式

    • 光标定位

      1. 数字 + 方向键,如6+下,光标可一次向下移动六行(上下左右键同理)

      2. ctrl + f,屏幕向下移动一页,相当于pagedown

      3. ctrl + b,屏幕向上移动一页,相当于pageup

      4. ctrl + d, 屏幕向下移动半页

      5. ctrl + u,屏幕向上移动半页

      6. 0或功能键home,移动当前行的最前面

      7. $或功能键end,移动到当前行最后面

      8. H,移动到当前屏幕第一行的第一个字符

      9. M,移动到当前屏幕中间行的第一个字符

      10. L,移动到当前屏幕最后一行的第一个字符

      11. G,移动到这个文件的最后一行

      12. 数字+G,移动到这个文件的多少行,如20G为移动到这个文件的第20行

      13. gg,移动到这个文件的第1行,相当于1G

    • 查找

      1. /word,向光标之下寻找一个名称为word的字符串,比如想搜索file这个字符串,输入/file回车即可

      2. ?word,向光标之上查找一个名称为word的字符串

      3. n,英文按键,重复上一个查找动作,如输入/word查找字符串word,按下n会重复此查找

      4. N,英文按键,反向重复上一个查找动作,如输入/word查找字符串word,按下N会向上查找该字符串

    • 替换,需要在底线命令模式下进行

      1. n1,n2s/word1/word2/g,n1,n2为数字,在第n1与第n2行之间寻找word1这个字符串,并把该字符串取代为word2;如在1到10行之间搜索”你好“,并取代为”hello“,命令为:1,10s/你好/hello/g

      2. 1,$s/word1/word2/g 或 %s/word1/word2/g,从第一行到最后一行寻找word1,并替换为word2

      3. 1,$s/word1/word2/gc 或 %s/word1/word2/gc,从第一行到最后一行寻找word1并替换为word2,并在替换之前给用户确认是否替换

    • 删除

      1. x,删除当前光标所在处的字符,相当于del

      2. X,删除光标前的一个字符,相当于backspace

      3. nx,连续向后删除n个字符,包括光标处的字符

      4. dd,删除光标所在行

      5. ndd,向下连续删除n行,包括光标所在行

      6. d1G,删除光标所在行到第一行的所有行

      7. dG,删除光标所在行到最后一行的所有行

      8. d$,删除光标所在处到该行的最后一个字符所有数据,包括所在处和最后一个字符

      9. d0,删除光标所在处到该行的第一个字符所有数据,包括所在处和第一个字符

    • 复制

      1. yy,复制光标所在行,按下p可在光标所处行向下复制

      2. nyy,复制光标所在的向下n行,包括光标所在行

      3. y1G,复制光标所在行到第一行的所有数据

      4. yG,复制光标所在行到最后一行的所有数据

      5. y0,复制光标所处字符到该行行首的所有数据

      6. y$,复制光标所在处字符到改行行尾的所有数据

    • 粘贴

      1. p,将已复制的数据粘贴在光标的下一行

      2. P,将已复制的数据粘贴在光标的上一行

      3. J,将光标所在行与下一行数据结合为同一行(下一行数据会被放到光标所在行行尾)

    • ......

  • 编辑输入模式,正常的编写文本

  • 底线命令模式,执行保存、退出等操作

    • q,退出

    • q!,强制退出,若修改了内容又不想储存,可强制退出

    • w,保存

    • w!,强制保存

    • w [filename],将内容另存到一个文件内,类似于另存为,如:w a.txt

    • r [filename],将另一个文件的内容读入到当前光标所在行的下一行,如将当前目录下的a.txt读入:r a.txt

    • n1,n2 w [filename],将行n1到行n2的内容另存到一个文件内,包括行n1和行n2,如将1到10行的数据另存到文件a.txt内:1,10 w a.txt

    • wq,保存并退出

    • wq!,强制保存并退出

    • !q,强行退出

    • x,保存并退出

    • set nu,显示行号

    • set nonu,隐藏行号

    • esc可随时退出底线命令模式

  • 在家目录下创建公共的vim隐藏文件.vimrc,进行全局的vim公共配置,比如输入内容“set nu",此时再编辑文件就会默认显示出行号