前言:最近在linux培训时复习了一下linux系统中一些常用的命令和用法,整理成了笔记,虽然些许零散,但希望对大家有所帮助。

0、帮助指令

Linux 指令众多,各种指令又具备复杂的参数,对于一些复杂又不太常用的命令,依靠大脑全部记忆是非常困难的事情,因此Linux提供了比较丰富的帮助信息来帮助我们快速了解指令的使用方法。

man 获取帮助手册。例如:

该命令的帮助信息结果和意义如下表:

结构名称

代表意义

NAME

命令的名称

SYNOPSIS

参数的大致使用方法

DESCRIPTION

介绍说明

EXAMPLES

演示(附带简单说明)

OVERVIEW

概述

DEFAULTS

默认的功能

OPTIONS

具体的可用选项(带介绍)

ENVIRONMENT

环境变量

FILES

用到的文件

SEE ALSO

相关的资料

HISTORY

维护历史与联系方式

help 提供某个命令的基本语法

​ 由于完整的LInux指令一般具有一个通用的格式:

​ #指令主体(空格) [选项](空格) [操作对象]

因此help命令也据此提供帮助

1、关机、重启、注销命令

shutdown 实质上会给系统计划一个时间关机,是比较安全的正常关机方式。它可以被用于停止(H)、关机(p)、重启(r)机器。

init 的进程号始终为1﹐所以发送TERM信号给init会终止所有的用户进程﹑守护进程等。shutdown关机实质上就是调用了init 0,再调用halt或poweroff。init定义了8个运行级别(runlevel),init 0为关机﹐init1为重启。

halt 直接杀死进程停止系统,但仍然保持通电。

poweroff 实质上类似halt,但会发送一个ACPI 信号来通知系统关机,能够实现关机后切断电源。

reboot 重启系统

2、文件和目录操作命令

pwd 查看当前目录(print working directory)

cd 切换当前目录(change directory)

tree 由于不是CentOS7自带的命令,需要先安装。该命令用于以树状图列出目录的内容。

执行tree指令,它会列出指定目录下的所有文件,包括子目录里的文件。

mkdir 创建目录(make directory)

  • mkdir -p 确保目录名称存在,不存在的就建一个,可用于创建多层级目录

  • {x..y}可以创建列表,用于批量创建目录

    • 列表生成方式:

      (1) 直接给出列表

      (2) 整数列表:

      (a) {start..end} 如:{1..10}

      (b) $(seq [start [step]] end) 如:seq 1 2 100 表示1-100之间的所有奇数

      (3) 返回列表的命令 $(COMMAND) 如:ls /etc

      (4) 使用glob,如:.sh

      (5) 变量引用;$@, $

rmdir 删除目录(remove directory)

  • rmdir -p当子目录被删除后使它也成为空目录的话,则顺便一并删除
  • 同理,{x..y}可以用于批量删除目录

touch 创建文件,可同时创建多个文件

ls 列出当前目录或指定目录下所有文件及文件夹,参数-l表示list,以详细列表的形式进行展示,-a表示显示所有内容,包括隐藏文件及文件夹, -i 列出每个文件的inode(索引节点,标识每个文件,存储元信息,每个文件都有对应inode)。

cp [原文件路径] [目标路径] :复制(copy),复制时目标文件名可以与原文件不同(等于复制之后重命名)。如果目标路径直接给出文件夹,即将原文件复制不改名到目标文件夹中。

mv [原文件路径] [目标路径] : 移动(move),相当于windows的剪切,但亦可用于文件重命名

rm 删除文件(remove),其中-f选项表示强制删除,不提示是否删除,-r表示递归,可用于删除文件夹所有文件 rm -rf /* 删库跑路

ln [-s] [源文件] [目标文件] : 对文件创建链接(link file),分为软链接(又称符号链接)与硬链接,区别在于底层原理不同。linux每个文件都有一个相应的索引节点inode,软链接类似于windows快捷方式,创建了一个inode不同的新文件来指向源文件,其中保存了其代表的文件的绝对路径,而硬链接创建了源文件的一个引用,相当于复制了一个同步更新的一模一样的文件,他们共用一个inode,指向同一个区块(些许类似于C/C++的指针和引用概念)。其中硬链接删除源文件之后仍能访问,而软链接则不能。

可以看到上图中软链接和硬链接的inode不同,而且软链接权限之前存在一个l,表示link

find [路径范围] [选项参数] :查找文件,参数众多,其中,

  • -name表示按文件名进行搜索(支持模糊搜索)

  • -type表示按照文件类型进行搜索(此时f表示文件,d表示文件目录)

  • -regex 表示按照正则表达式进行查找,匹配完整的文件名(包括路径)

  • -exec 能够执行将查找到的文件赋值给{},并执行之后的指令(该指令必须以转义后的;结尾)

    例如:

值得注意的是:

某些linux版本在使用通配符*进行匹配时可能会提示如下问题,

find: 路径必须在表达式之前:

这是由于shell会根据表达式匹配到的个数对命令进行填充,多于1个匹配结果会使得*3.txt变成多个单词,例如:

原本 find ./ -name *3.txt的命令就变成了find ./ -name test3.txt hl_test3.txt,此时只有 test3.txt被识别,而hl_test3.txt无法识别就会报错。

因此使用通配符模糊搜索的时候要么在*前加上转义字符(\),要么给文件名加上引号

xargs 是给命令传递参数的一个过滤器,也是组合多个命令的一个工具(eXtended ARGuments)。

介绍之前,需要先介绍linux中提供的管道操作命令符:“|”,它能够处理前一个指令的正确输出信息(不能直接处理错误信息),即将前一个指令的标准输出作为下一个命令的标准输入(stdin)。linux命令可以从两个地方读取要处理的内容,其中一个是直接通过命令行参数,另一个则是标准输入(类似c语言中int main(int argc,char*argv[])的参数,和scanf读取参数的关系) 。某些命令具有处理标准输入的能力,能够使用管道命令符传递输入值,例如查看文件的cat命令和用于过滤的grep,他们能从标准输入中读取信息作为待处理的文本内容:

大多数命令有一个参数 “-” 如果直接在命令的最后指定 “- ”则表示从标准输入中读取,虽然不同命令对于命令行参数和标准输入的处理策略可能不同,但cat和grep命令在CentOS7中均可使用“-”同时处理命令行参数和标准输入:

然而某些命令程序例如kill,rm等是不处理标准输入的,但实际使用中又有这样的需求,因此需要用到xargs命令。

xargs命令一般跟在|之后,可以将管道或标准输入数据转换成命令行参数,也能够从文件的输出中读取数据。因此xargs命令能够实现与|不同的功能,例如对于cat命令:

xargs命令能够将‘--help’作为cat的参数而不是被读取的文件的内容。

常用的选项参数有:

​ -d :delim 分隔符,默认的xargs将其标准输入中的内容以空白(包括空格、Tab、回车换行等)分割成多个之后当作命令行参数传递给其后面的命令,该参数能够自己指定分隔符

​ -p :使用该选项之后xargs并不会马上执行其后面的命令,而是输出即将要执行的完整的命令(包括命令以及传递给命令的命令行参数),询问是否执行,输入 y 才继续执行,否则不执行

	-n :表示将xargs生成的命令行参数,每次传递几个参数给其后面的命令执行,例如xargs从标准输入中读入内容,然后以分隔符分割之后生成的命令行参数有4个,使用 -n 3 之后表示一次传递给xargs后面的命令是3个参数,两次才能将参数用完。

​ -E :根据linux版本也有可能是-e eof-str

​ 该选项指定一个字符串,当xargs解析出多个命令行参数的时候,如果搜索到-e指定的命令行参数,则只会将-e指定的命令行参数之前的参数(不包括-e指定的这个参数)传递给xargs后面的命令

​ -i :-i 或者是-I,将参数输入一行一行赋值给{},作为后续命令的参数

rename:重命名,与mv重命名不同,rename可以重命名多个文件,且支持通配符(?匹配单一字符,*匹配多个任意字符),其格式为:

rename [options] expression replacement file...

例如:文件夹中有这些文件 foo1, …, foo9, foo10, …, foo278

如果使用rename foo foo0 foo?,会把foo1到foo9的文件重命名为foo01到foo09,重命名的文件只是有4个字符长度名称的文件,文件名中的foo被替换为foo0。

如果使用rename foo foo0 foo*,foo001到foo278的所有文件都被重命名为foo0001到foo0278,所有以foo开头的文件都被重命名

再比如:

basename 为basename指定一个路径,basename命令会删掉所有的前缀包括最后一个slash(‘/’)字符,然后将字符串显示出来

其格式为:

basename [pathname] [suffix]

basename [string] [suffix]

如果suffix被指定了,basename会将pathname或string中的suffix去掉,可以用于获取文件名

例如:

dirname 获取给定路径的目录部分,与basename互补

file 用于辨识文件类型,-b表示不显示文件名,-l表示显示符号链接指向文件的类别

chown 命令用于设置文件所有者和文件关联组的命令(change owner),该操作需要root权限

chown [选项]... [所有者][:[组]] 文件...

sudo 获取root权限

chmod 控制用户对文件的权限(change mode)

Linux/Unix 的文件调用权限分为三级 : 文件所有者(Owner/User)、用户组(Group)、其它用户(Other Users),每一级分别有三种普通权限,r读取(数字代号4),w写入(数字代号2),x执行(数字代号1),三者数字代码相加等于该级的权限

(图源:https://www.runoob.com/linux/linux-comm-chmod.html)

常见参数:

  • -R : 对目前目录下的所有文件与子目录进行相同的权限变更(即以递归的方式逐个变更)

  • -c : 若该文件权限确实已经更改,才显示其更改动作

  • -f : 若该文件权限无法被更改也不要显示错误讯息

该命令有两种使用方式,

一是通过数字设置权限:

其中754代表,owner user拥有rwx权限(4+2+1),group拥有rx权限(4+1),others拥有r权限(4)

二是通过统一格式为 chmod [ugoa...]\[\[+-=]\[rwxX]...][,...] 进行设置

  • 第一个位置上,u 表示该文件的拥有者g 表示与该文件的拥有者属于同组者o 表示其他人a 表示这三者所有;

  • 第二个位置上,+ 表示增加权限- 表示取消权限= 表示唯一设定权限

  • 第三个位置上,r 表示可读取,w 表示可写入,x 表示可执行,X 表示只有当 该文件是个子目录 或者 该文件已经被设定过 为可执行。

例如:

chgrp 命令用于变更文件或目录的所属群组(change group)

与 chown命令不同,chgrp 允许普通用户改变文件所属的组,只要该用户是该组的一员

3、文件过滤及内容编辑处理命令

cat 用于连接文件并打印到标准输出设备上,主要实现三个功能,一是显示整个文件cat filename,二是从键盘创建一个文件(只能创建新文件,不能编辑已有文件)cat > filename,三是将几个文件合并cat file1 file2 > file

tail 查看一个文件的未n行,如果n不指定默认显示后10行,可以通过tail -f指令来查看一个文件的动态变化内容(变化的内容不能是用户手动增加的

head 查看一个文件前n行,如果n不指定默认显示前10行

sort 将文件的每一行作为一个单位,相互比较,比较原则是从首字符向后,依次按ASCII码值进行比较,最后将他们按升序输出。参数-u表示输出行中去除重复行,-r表示降序,-n表示根据数值排序(适用于纯数字排序,避免出现10先于2的情况)

另外,由于sort默认将结果输出到标准输出,因此需要重定向才能写入文件,但如果想要覆盖原文件内容就会出现问题,因此-o参数(output)提供了将标准输出写回原文件的能力。

uniq 用于检查及删除文本文件中重复出现的行列,一般与 sort 命令结合使用。当文本中重复行不相邻时,uniq不起作用,因此需要先使用sort。

wc 以计算文件的Byte数、字数、或是列数,若不指定文件名称、或是所给予的文件名为"-",则wc指令会从标准输入设备读取数据

  • -c或--bytes或--chars 只显示Bytes数。

  • -l或--lines 显示行数。

  • -w或--words 只显示字数。

tr 用于转换或删除文件中的字符。从标准输入设备读取数据,经过字符串转译后,将结果输出到标准输出设备。

tr [-cdst][--help][--version][第一字符集][第二字符集]

例如,大小字母转换

vi/vim 文本编辑器。所有的 Unix Like 系统都会内建 vi 文书编辑器,Vim是从 vi 发展出来的一个文本编辑器。代码补完、编译及错误跳转等方便编程的功能特别丰富。

vi/vim 共分为三种模式,分别是命令模式(Command mode)输入模式(Insert mode)底线命令模式(末行模式Last line mode)。 这三种模式的作用分别是:(参考https://www.runoob.com/linux/linux-vim.html)

**命令模式:**

用户刚刚启动 vi/vim,便进入了命令模式。

此状态下敲击键盘动作会被Vim识别为命令,而非输入字符。比如我们此时按下i,并不会输入一个字符,i被当作了一个命令。

我认为比较常用的几个命令如下:

- i 切换到输入模式,在当前位置输入字符。
- a 切换到输入模式,在下一个字符位置输入。
- o 切换到输入模式,在下一行插入空行并输入
- x 删除当前光标所在处的字符。
- dd 删除光标所在的一行
- u 撤销操作undo
- ctrl+R 恢复操作redo
- : 切换到底线命令模式,以在最底一行输入命令。

在该模式下最需要注意的是,很多人由于windows的使用习惯,经常错将ctrl+Z当做撤销命令,然而ctrl+Z在linux有终止进程的作用,会直接非正常退出vim,导致下一次打开时该文件时出现如下问题:

解决方法是直接恢复或者将这个位于相同目录下的交换文件swp删除

由于swp是隐藏文件,如果使用通配符*批量删除时必须带上前面的“.",例如:

rm -rf .*.swp 而不是 rm -rf *.swp

**输入模式:**

在命令模式下按下i、a、o就进入了输入模式。

在输入模式中,可以使用以下按键,基本与使用习惯一致:

- **字符按键以及Shift组合**,输入字符
- **ENTER**,回车键,换行
- **BACK SPACE**,退格键,删除光标前一个字符
- **DEL**,删除键,删除光标后一个字符
- **方向键**,在文本中移动光标
- **HOME**/**END**,移动光标到行首/行尾
- **Page Up**/**Page Down**,上/下翻页
- **Insert**,切换光标为输入/替换模式,光标将变成竖线/下划线
- **ESC**,退出输入模式,切换到命令模式 **底线命令模式:** 在命令模式下按下:(英文冒号)就进入了底线命令模式。 底线命令模式可以输入单个或多个字符的命令,可用的命令非常多。 在底线命令模式中,基本的命令有(已经省略了冒号): - q 退出程序
- w 保存文件
- !强制退出 按ESC键可随时退出底线命令模式。

4、文本处理

grep 用于查找文件里符合条件的字符串

参数比较复杂,其中

  • -i 或 --ignore-case : 忽略字符大小写的差别

  • -l 或 --file-with-matches : 列出文件内容符合指定的样式的文件名称。

  • -L 或 --files-without-match : 列出文件内容不符合指定的样式的文件名称

  • -d <动作> 或 --directories=<动作> : 当指定要查找的是目录而非文件时,必须使用这项参数,否则grep指令将回报信息并停止动作

  • -r 或 --recursive : 此参数的效果和指定"-d recurse"参数相同,递归。

除此之外,grep还支持正则表达式,例如:

5、信息显示与搜索文件命令

uname 用于显示系统信息(unix name)

hostname 显示主机名,与uname -n用法相同

du 用于显示目录或文件的大小(disk usage),-h或--human-readable 以K,M,G为单位,提高信息的可读性

date 读取或设置时间日期

语法1:#date 输出的形式:2018年 3月 24日 星期六 15:54:28

语法2:#date +%F (等价于#date “+%Y-%m-%d” 输出形式:2018-03-24

语法3:#date “+%F %T” 引号表示让“年月日与时分秒”成为一个不可分割的整体

等价操作#date “+%Y-%m-%d %H:%M:%S”

输出的形式:2018-03-24 16:01:00

echo 与DOS命令和PHP的echo指令类似,用于字符串的输出。其后的字符串有三种格式选择:

1、不带引号,通常情况下与带引号的情况一致,但遇到字符串中间有空格时可能会出现问题

2、单引号(‘ ’),一般表示字符串本身,在其中无法使用$读取变量值,例如:

echo '$test'会原封不动的输出

(上图中值得注意的是,linux的赋值=两边不能有等号)

​ 同时,单引号字符串无法输出单引号''(即使使用转义字符也不行),因为无法判断字符串的结束位置

3、双引号(“ ”),可以正常读取变量值,正常使用转义字符

4、反引号(` `),表示运行其中的指令,并输出运行结果

常用参数有:

  • -e 允许使用转义字符
  • -n 输出后不换行

6、文件备份与压缩命令

tar 为Linux的文件和目录创建档案(tape archive),可用于打包、压缩、解压。参数众多,常见的有:

tar 命令既可以输入文件名打包单个文件,又可以输入(单个或多个)目录或多个文件名进行打包

单个文件压缩打包 tar czvf my.tar.gz file1

多个文件压缩打包 tar czvf my.tar.gz file1 file2,...(file*)(也可以给file*文件mv 目录在压缩)

单个目录压缩打包 tar czvf my.tar.gz dir1

多个目录压缩打包 tar czvf my.tar.gz dir1 dir2
  • -c或--create 建立新的备份文件。
  • -f<备份文件>或--file=<备份文件> 指定备份文件
  • -v或--verbose 显示指令执行过程
  • -z或--gzip或--ungzip 通过gzip指令处理备份文件
  • -j对bzip2文件进行处理
  • -t或--list 列出备份文件的内容
  • -x或--extract或--get 从备份文件中还原文

例如:仅打包,不压缩

打包后用gzip压缩:

查看压缩文件内容:

解压文件:

gzip 用于压缩文件,压缩的文件后缀为.gz

  • -v或--verbose  显示指令执行过程

  • -d或--decompress或----uncompress  解开压缩文件

zip 使用广泛的压缩程序,压缩后的文件后缀名为 .zip

  • -r 递归处理,将指定目录下的所有文件和子目录一并处理
  • -q 不显示指令执行过程
  • -d 从压缩文件内删除指定的文件
  • -v 显示指令执行过程或显示版本信息

**unzip **用于解压缩zip文件

  • -l 显示压缩文件内所包含的文件。
  • -v 参数用于查看压缩文件目录信息,但是不解压该文件

scp Linux 之间复制文件和目录,scp 是 secure copy 的缩写, scp 是 linux 系统下基于 ssh 登陆进行安全的远程文件拷贝命令

  • -r: 递归复制整个目录
  • -q: 不显示传输进度条
  • -P port:注意是大写的P, port是指定数据传输用到的端口号

scp [可选参数] file_source file_target

如果远程服务器防火墙有为scp命令设置了指定的端口,我们需要使用 -P 参数来设置命令的端口号

scp -P port file_source file_target

7、用户管理及用户信息查询命令

su 切换用户,不写用户时默认切换成root

需要注意的是su命令和su -命令都可切换至 root,其区别在于前者只是切换了root身份,但Shell环境仍然是普通用户的Shell;而后者连用户和Shell环境一起切换成root身份了。只有切换了Shell环境才不会出现PATH环境变量错误

sudo 以系统管理者的身份执行指令,经由 sudo 所执行的指令就仿佛是 root 亲自执行一样

值得注意的是,sudo命令虽然可以使普通用户(很方便地)暂时借用root权限来执行指令,但为了防止滥用,该用户需要被管理员指定包含在sudoers文件中,否则会被警告

如果确实需要使用sudo,那么需要切换到root,将该用户添加到/etc/sudoers文件

这里已经有除了root以为已经有一个账户存在于sudoers文件中,我们需要把这个新的用户也加进去

现在就可以使用sudo命令了

useradd 创建用户,需要root权限

useradd [-d home] [-s shell] [-c comment] [-m [-k template]] [-f inactive] [-e expire ] [-p passwd] [-r] name

使用useradd时,如果后面不添加任何参数选项,例如:#sudo useradd test创建出来的用户将是默认“三无”用户:一无Home Directory,二无密码,三无系统Shell

usermod 针对与已存在的用户,使用该命令可以修改它们的信息

usermod [选项] 用户名,其参数与useradd类似,下面两个选项可以锁定和解锁用户

  • -L:临时锁定用户(Lock);
  • -U:解锁用户(Unlock),和 -L 对应;

userdel 删除用户

  • -r 选项表示在删除用户的同时删除用户的家目录

passwd 设置或更换密码

who 用于显示系统中有哪些使用者正在上面,显示的资料包含了使用者 ID、使用的终端机、从哪边连上来的、上线时间、呆滞时间、CPU 使用量、动作等等

上图中,可以看到开启该shell的使用者(jason)

8、磁盘与文件系统

mount 由于linux一切都是文件,外部设备被存放于/dev目录下,但无法直接访问,需要使用该命令挂载到某一目录下

mount [-t vfstype] [-o options] device dir

  • -t vfstype 指定文件系统的类型,通常不必指定,mount 会自动选择正确的类型。

    • 光盘或光盘镜像:iso9660
      DOS fat16文件系统:msdos
      Windows 9x fat32文件系统:vfat
      Windows NT ntfs文件系统:ntfs
      Mount Windows文件网络共享:smbfs
      UNIX(LINUX) 文件网络共享:nfs
  • -o options 主要用来描述设备或档案的挂接方式

    • loop:用来把一个文件当成硬盘分区挂接上系统
      ro:采用只读方式挂接设备
      rw:采用读写方式挂接设备
      iocharset:指定访问文件系统所用字符集

例如:移动硬盘挂载

mount -t ntfs /dev/sdc1 /mnt/usbhd1

unmount 卸除目前挂在Linux目录中的文件系统

umount -v /mnt/usbhd1/      通过挂载点卸载
umount -v /dev/sda1 通过设备名卸载

df 命令用于显示目前在 Linux 系统上的文件系统磁盘使用情况统计(disk free)

9、进程管理命令

ps 命令用于显示当前进程的状态,类似于 windows 的任务管理器(process status),常用选项:

  • -A 列出所有的进程
  • -w 显示加宽可以显示较多的资讯
  • -au 显示较详细的资讯
  • -aux 显示所有包含其他使用者的行程

常搭配grep使用,寻找某一进程

kill 用于删除执行中的程序或工作,可以使用kill命令杀死指定进程PID的进程,如果要找到我们需要杀死的进程,我们还需要在之前使用ps等命令再配合grep来查找进程

kill [-s <信息名称或编号>][程序] 或 kill [-l <信息编号>]

  • -l <信息编号>  若不加<信息编号>选项,则 -l 参数会列出全部的信息名称。

    最常用的信号是:

    • 1 (HUP):重新加载进程。
    • 9 (KILL):杀死一个进程。
    • 15 (TERM):正常停止一个进程
  • -s <信息名称或编号>  指定要送出的信息。

  • [程序]  [程序]可以是程序的PID或是PGID,也可以是工作编号。使用 kill -l 命令列出所有可用信号。

pkill 是一个命令行工具,它根据现有标准,给正在运行的程序进程发送信号。进程可以通过他们的完整名字,部分名字,用户进程或者其他属性指定。能够直接杀死运行中的程序而不像kill那样只杀掉单个进程。与之类似的还有killall命令

top 常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况,也类似于Windows的任务管理器

free 显示系统内存的使用情况,包括物理内存、交换内存(swap)和内核缓冲区内存

  • -s 选项指定间隔的秒数进行更新
  • -h 选项友好的输出显示

10、其他

history [n] 查看最近n条执行过的命令

yum ( Yellow dog Updater, Modified)是一个在 Fedora 和 RedHat 以及 SUSE 中的 Shell 前端软件包管理器。基于 RPM 包管理,能够从指定的服务器自动下载 RPM 包并且安装,可以自动处理依赖性关系,并且一次安装所有依赖的软件包,无须繁琐地一次次下载、安装。yum 提供了查找、安装、删除某一个、一组甚至全部软件包的命令。也是CentOS使用的包管理工具。

当然,不同的linux发行版会有不同的包管理器,例如Debian系(包括Ubuntu)使用apt来进行软件包管理。关于包管理工具的介绍与区别可以看我的另一篇博客

sh :"sh -c" 命令,它可以让 bash 将一个字符串作为完整的命令来执行,能够在一行代码中执行多行命令语句(字符串内的多行命令用;分割)。虽然这样做不是很安全,例如当你执行的文本中含有"rm -rf ./*"之类的命令,会将当前目录全部删掉。

export 的作用就是设置或者显示环境变量PATH。

语法:export [-fnp] [变量名称]=[变量设置值]

  在shell执行程序时,shell会提供一组环境变量,export可以新增、删除、修改环境变量,供后续执行的程序使用。export的效力仅限于该次登录操作(就是说你下次登录操作系统的时候,上次登录时的export就不能用了)

参数:

-f  代表[变量名称]中为函数名称。

 -n  删除指定的变量。变量实际上并未删除,只是不会输出到后续指令的执行环境中。

 -p  列出所有的shell赋予程序的环境变量。

一般修改PATH的方法有三种 (参考https://blog.csdn.net/weixin_30783629/article/details/95968295)

1、直接用export命令:

#export PATH=$PATH:/opt/au1200_rm/build_tools/bin

查看是否已经设好,可用命令export查看:

2、修改profile文件:

#vi /etc/profile
在里面加入:
export PATH="$PATH:/opt/au1200_rm/build_tools/bin"
  1. 修改.bashrc文件:
# vi /root/.bashrc
在里面加入:
export PATH="$PATH:/opt/au1200_rm/build_tools/bin"

后两种方法一般需要重新注销系统才能生效

$ 最常用于显示变量值,例如

name=1
$name
1

其后可跟{},(),(()),其中${name}与$name功能相同,$()可用于执行命令。

另外,(())与() 和‘ ’类似,不过在(())中能够使bash shell实现c语言风格到的变量操作,例如:

#I=10
#((I++))

变量说明:

$$ ——Shell本身的PID(ProcessID)

$! ——Shell最后运行的后台Process的PID

$? ——最后运行的命令的结束代码(返回值)

$- ——使用Set命令设定的Flag一览

$* ——所有参数列表。如"$*"用「"」括起来的情况、以"$1 $2 … $n"的形式输出所有参数。

$@ ——所有参数列表。如"$@"用「"」括起来的情况、以"$1" "$2" … "$n" 的形式输出所有参数。

$# ——添加到Shell的参数个数

$0 ——Shell本身的文件名

$1~$n ——添加到Shell的各参数值。$1是第1参数、$2是第2参数…。

重定向命令

  • 重定向符号

    > 输出重定向到一个文件或设备 覆盖原来的文件

    >! 输出重定向到一个文件或设备 强制覆盖原来的文件

    >> 输出重定向到一个文件或设备 追加原来的文件

    < 输入重定向到一个程序

  • 标准错误重定向符号

    2> 将一个标准错误输出重定向到一个文件或设备 覆盖原来的文件 b-shell

    2>> 将一个标准错误输出重定向到一个文件或设备 追加到原来的文件

    2>&1 将一个标准错误输出重定向到标准输出 注释:1 可能就是代表 标准输出

    & 将一个标准错误输出重定向到一个文件或设备 覆盖原来的文件 c-shell

    |& 将一个标准错误 管道 输送 到另一个命令作为输入

bash 命令执行的过程中,主要有三种输出入的状况,分别是:

\1. 标准输入;代码为 0 ;或称为 stdin ;使用的方式为 <

\2. 标准输出:代码为 1 ;或称为 stdout;使用的方式为 1>

\3. 错误输出:代码为 2 ;或称为 stderr;使用的方式为 2>

例如:

将显示的数据的错误信息输出到 list.err:

向文件中追加标准输出信息

11、argc和argv

属于linux下的c/c++的使用。对于主函数的书写方式:

int main(int argc,char *argv[]) 是 UNIX 和 Linux 中的标准写法,

int main() 只是 UNIX 及 Linux 默许的用法

argc:表示传入函数的参数个数

argv:表示传入函数的参数序列,其中argv[0]为程序的名称,argv[1~n]为函数所使用的参数

因此,据此可以在shell中调用C/C++程序时传入参数。

12、关于字符串变量的截取

参考https://blog.csdn.net/weixin_44244371/article/details/103539800

http://c.biancheng.net/view/1120.html

  1. #号截取,删除左边字符,保留右边字符。代码如下:echo ${var#*//}

    其中 var 是变量名,# 号是运算符,*// 表示从左边开始删除第一个 // 号及左边的所有字符

    即删除 http://

    结果是 :www.aaa.com/123.htm

  2. ##号截取,删除左边字符,保留右边字符。代码如下:echo ${var##*/}

    ##*/ 表示从左边开始删除最后(最右边)一个 / 号及左边的所有字符

    即删除 http://www.aaa.com/

    结果是 123.htm

  3. %号截取,删除右边字符,保留左边字符代码如下:echo ${var%/*}

    %/* 表示从右边开始,删除第一个 / 号及右边的字符

    结果是:http://www.aaa.com

  4. %% 号截取,删除右边字符,保留左边字符代码如下:echo ${var%%/*}

    %%/* 表示从右边开始,删除最后(最左边)一个 / 号及右边的字符

    结果是:http:

  5. 从左边第几个字符开始,及字符的个数代码如下:echo ${var:0:5}

    其中的 0 表示左边第一个字符开始,5 表示字符的总个数。

    结果是:http:

  6. 从左边第几个字符开始,一直到结束。代码如下:echo ${var:7}

    其中的 7 表示左边第8个字符开始,一直到结束。

    结果是 :www.aaa.com/123.htm

  7. 从右边第几个字符开始,及字符的个数。代码如下:echo ${var:0-7:3}

    其中的 0-7 表示右边算起第七个字符开始,3 表示字符的个数。

    结果是:123

  8. 从右边第几个字符开始,一直到结束。代码如下:echo ${var:0-7}

    表示从右边第七个字符开始,一直到结束。

    结果是:123.htm

  9. /或//,用于删除所有匹配的字符串。代码例如:echo ${var//.tif}

Linux常用命令学习笔记——基于CentOS 7的更多相关文章

  1. linux常用命令学习笔记

    1.top命令 作用:该命令可以按CPU使用.内存使用和执行时间对任务进行排序,常用来监控系统中占用CPU或内存较高的程序及CPU和内存的负载. 默认视图: 当想看系统负载时,可观察汇总的%CPU中的 ...

  2. Linux常用命令-学习笔记

    Linux命令格式: 命令 [命令参数] [命令对象] # 命令之间的参数和对象用单个空格进行分割 # "[]"代表可选,{}代表必选其中的一项,|代表或者的关系,<> ...

  3. linux基础命令学习笔记(二)

    linux基础命令学习笔记(二) 1.kill :终止进程  kill pid (唯一标示一个进程) kill -9  强制终止  kill -15 命令未结束不能终止 # ps aux 查看所有进程 ...

  4. mongodb常用命令学习笔记

    mongodb常用命令学习笔记 创建数据库 use DATABASE_NAME eg: use users; 如果数据库不存在,则创建数据库,否则切换到指定数据库.要显示刚刚创建的数据库,需要向数据库 ...

  5. Docker | Docker常用命令学习笔记

    @ 目录 前言 1. 帮助命令: version.info.help 2. 镜像命令: images.search pull.rmi 3. 容器命令: pull.run ps.exit .ctrl+P ...

  6. Linux常用命令学习

    1.ls命令 就是list的缩写,通过ls 命令不仅可以查看linux文件夹包含的文件,而且可以查看文件权限(包括目录.文件夹.文件权限)查看目录信息等等 常用参数搭配: ls -a 列出目录所有文 ...

  7. 【Linux】命令学习笔记和总结

    莫名的想学习一下Linux了,因为对这方面的知识储备为0.对于命令行界面始终是零接触零了解,对一个程序员来说这几乎是致命的,所以简单了解一下. 一.教程参考 参考菜鸟教程即可: Linux 教程 | ...

  8. 五个知识体系之-Linux常用命令学习

    1.ls命令 就是list的缩写,通过ls 命令不仅可以查看linux文件夹包含的文件,而且可以查看文件权限(包括目录.文件夹.文件权限)查看目录信息等等 常用参数搭配: ls -a 列出目录所有文 ...

  9. Linux常用命令学习随笔

    1.ls命令 就是list的缩写,通过ls 命令不仅可以查看linux文件夹包含的文件,而且可以查看文件权限(包括目录.文件夹.文件权限)查看目录信息等等 常用参数搭配: ls -a 列出目录所有文 ...

随机推荐

  1. Spring Authorization Server 0.2.3发布,放出联合身份DEMO

    很快啊Spring Authorization Server又发新版本了,现在的版本是0.2.3.本次都有什么改动呢?我们来了解一下. 0.2.3版本特性 本次更新的新特性不少. 为公开客户端提供默认 ...

  2. Linux C申请内存三种基本方式

    一份代码可以知道具体方式和原理: int main() { int stack_a; int stack_b; static int static_c; static int static_d; in ...

  3. SpringBoot+Vue+mysql 搭建(一)

    一.创建Spring boot maven 项目 Spring initializr 是Spring 官方提供的一个用来初始化一个Spring boot 项目的工具. 在idea中,直接 File-& ...

  4. spring cloud 和dubbo区别?

    1.服务调用方式 dubbo是RPC springcloud Rest Api2.注册中心,dubbo 是zookeeper springcloud是eureka,也可以是zookeeper3.服务网 ...

  5. Java并发机制(6)--阻塞队列

    Java并发编程:阻塞队列整理自:博客园-海子-http://www.cnblogs.com/dolphin0520/p/3933404.html 1.什么是阻塞队列 除了同步容器(Hashtable ...

  6. Mycat新增数据报错can't fetch sequnce in db,sequnce

    Mycat报错 2021-11-08 17:13:01,310 [ERROR][Thread-1] MyCATSequenceProcessor.executeSeq(SesionSQLPair) j ...

  7. 如何在 Windows 和 Linux 上查找哪个线程使用的 CPU 时 间最长?

    使用 jstack 找出消耗 CPU 最多的线程代码

  8. C语言中的 @ 符号是什么意思?

    Global Variable Address Modifier (@address)You can assign global variables to specific addresses wit ...

  9. 使用css实现任意大小,任意方向, 任意角度的箭头

    使用css实现任意大小,任意方向, 任意角度的箭头 网页开发中,经常会使用到 下拉箭头,右侧箭头 这样的箭头. 一般用css来实现: { display: inline-block; margin: ...

  10. CSS的inline、block与inline-block

    基本知识点 行内元素一般是内容的容器,而块级元素一般是其他容器的容器,行内元素适合显示具体内容,而块级元素适合做布局. 块级元素(block):独占一行,对宽高的属性值生效:如果不给宽度,块级元素就默 ...