前言:最近在linux培训时复习了一下linux系统中一些常用的命令和用法,整理成了笔记,虽然些许零散,但希望对大家有所帮助。
Linux 指令众多,各种指令又具备复杂的参数,对于一些复杂又不太常用的命令,依靠大脑全部记忆是非常困难的事情,因此Linux提供了比较丰富的帮助信息来帮助我们快速了解指令的使用方法。
man 获取帮助手册。例如:
该命令的帮助信息结果和意义如下表:
结构名称 |
代表意义 |
NAME |
命令的名称 |
SYNOPSIS |
参数的大致使用方法 |
DESCRIPTION |
介绍说明 |
EXAMPLES |
演示(附带简单说明) |
OVERVIEW |
概述 |
DEFAULTS |
默认的功能 |
OPTIONS |
具体的可用选项(带介绍) |
ENVIRONMENT |
环境变量 |
FILES |
用到的文件 |
SEE ALSO |
相关的资料 |
HISTORY |
维护历史与联系方式 |
help 提供某个命令的基本语法
由于完整的LInux指令一般具有一个通用的格式:
#指令主体(空格) [选项](空格) [操作对象]
因此help命令也据此提供帮助
shutdown 实质上会给系统计划一个时间关机,是比较安全的正常关机方式。它可以被用于停止(H)、关机§、重启®机器。
init 的进程号始终为1﹐所以发送TERM信号给init会终止所有的用户进程﹑守护进程等。shutdown关机实质上就是调用了init 0,再调用halt或poweroff。init定义了8个运行级别(runlevel),init 0为关机﹐init1为重启。
halt 直接杀死进程停止系统,但仍然保持通电。
poweroff 实质上类似halt,但会发送一个ACPI 信号来通知系统关机,能够实现关机后切断电源。
reboot 重启系统
pwd 查看当前目录(print working directory)
cd 切换当前目录(change directory)
tree 由于不是CentOS7自带的命令,需要先安装。该命令用于以树状图列出目录的内容。
执行tree指令,它会列出指定目录下的所有文件,包括子目录里的文件。
mkdir 创建目录(make directory)
mkdir -p 确保目录名称存在,不存在的就建一个,可用于创建多层级目录
{x…y}可以创建列表,用于批量创建目录
seq 1 2 100
表示1-100之间的所有奇数rmdir 删除目录(remove directory)
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 允许普通用户改变文件所属的组,只要该用户是该组的一员
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指令会从标准输入设备读取数据
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键可随时退出底线命令模式。
grep 用于查找文件里符合条件的字符串
参数比较复杂,其中
-i 或 --ignore-case : 忽略字符大小写的差别
-l 或 --file-with-matches : 列出文件内容符合指定的样式的文件名称。
-L 或 --files-without-match : 列出文件内容不符合指定的样式的文件名称
-d <动作> 或 --directories=<动作> : 当指定要查找的是目录而非文件时,必须使用这项参数,否则grep指令将回报信息并停止动作
-r 或 --recursive : 此参数的效果和指定"-d recurse"参数相同,递归。
除此之外,grep还支持正则表达式,例如:
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、反引号(` `),表示运行其中的指令,并输出运行结果
常用参数有:
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
例如:仅打包,不压缩
打包后用gzip压缩:
查看压缩文件内容:
解压文件:
gzip 用于压缩文件,压缩的文件后缀为.gz
-v或–verbose 显示指令执行过程
-d或–decompress或----uncompress 解开压缩文件
zip 使用广泛的压缩程序,压缩后的文件后缀名为 .zip
**unzip **用于解压缩zip文件
scp Linux 之间复制文件和目录,scp 是 secure copy 的缩写, scp 是 linux 系统下基于 ssh 登陆进行安全的远程文件拷贝命令
scp [可选参数] file_source file_target
如果远程服务器防火墙有为scp命令设置了指定的端口,我们需要使用 -P 参数来设置命令的端口号
scp -P port file_source file_target
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类似,下面两个选项可以锁定和解锁用户
userdel 删除用户
passwd 设置或更换密码
who 用于显示系统中有哪些使用者正在上面,显示的资料包含了使用者 ID、使用的终端机、从哪边连上来的、上线时间、呆滞时间、CPU 使用量、动作等等
上图中,可以看到开启该shell的使用者(jason)
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)
ps 命令用于显示当前进程的状态,类似于 windows 的任务管理器(process status),常用选项:
常搭配grep使用,寻找某一进程
kill 用于删除执行中的程序或工作,可以使用kill命令杀死指定进程PID的进程,如果要找到我们需要杀死的进程,我们还需要在之前使用ps等命令再配合grep来查找进程
kill [-s <信息名称或编号>][程序] 或 kill [-l <信息编号>]
-l <信息编号> 若不加<信息编号>选项,则 -l 参数会列出全部的信息名称。
最常用的信号是:
-s <信息名称或编号> 指定要送出的信息。
[程序] [程序]可以是程序的PID或是PGID,也可以是工作编号。使用 kill -l 命令列出所有可用信号。
pkill 是一个命令行工具,它根据现有标准,给正在运行的程序进程发送信号。进程可以通过他们的完整名字,部分名字,用户进程或者其他属性指定。能够直接杀死运行中的程序而不像kill那样只杀掉单个进程。与之类似的还有killall命令
top 常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况,也类似于Windows的任务管理器
free 显示系统内存的使用情况,包括物理内存、交换内存(swap)和内核缓冲区内存
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"
# vi /root/.bashrc
在里面加入:
export PATH="$PATH:/opt/au1200_rm/build_tools/bin"
后两种方法一般需要重新注销系统才能生效
$ 最常用于显示变量值,例如
name=1
$name
1
其后可跟{},(),(()),其中 n a m e 与 {name}与 name与name功能相同,$()可用于执行命令。
另外,(())与() 和‘ ’类似,不过在(())中能够使bash shell实现c语言风格到的变量操作,例如:
#I=10
#((I++))
变量说明:
$ ∗ ∗ — — S h e l l 本 身 的 P I D ( P r o c e s s I D ) ∗ ∗ ** ——Shell本身的PID(ProcessID) ** ∗∗——Shell本身的PID(ProcessID)∗∗! ——Shell最后运行的后台Process的PID
? ∗ ∗ — — 最 后 运 行 的 命 令 的 结 束 代 码 ( 返 回 值 ) ∗ ∗ ?** ——最后运行的命令的结束代码(返回值) ** ?∗∗——最后运行的命令的结束代码(返回值)∗∗- ——使用Set命令设定的Flag一览
KaTeX parse error: Undefined control sequence: \* at position 1: \̲*̲** ——所有参数列表。如"*“用「”」括起来的情况、以"$1 $2 … n " 的 形 式 输 出 所 有 参 数 。 ∗ ∗ n"的形式输出所有参数。 ** n"的形式输出所有参数。∗∗@ ——所有参数列表。如"$@“用「”」括起来的情况、以"$1" “ 2 " … " 2" … " 2"…"n” 的形式输出所有参数。
$# ——添加到Shell的参数个数
$0 ——Shell本身的文件名
1 ~ 1~ 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:
向文件中追加标准输出信息
属于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++程序时传入参数。
参考https://blog.csdn.net/weixin_44244371/article/details/103539800
http://c.biancheng.net/view/1120.html
#号截取,删除左边字符,保留右边字符。代码如下:echo ${var#*//}
其中 var 是变量名,# 号是运算符,*// 表示从左边开始删除第一个 // 号及左边的所有字符
即删除 http://
结果是 :www.aaa.com/123.htm
##号截取,删除左边字符,保留右边字符。代码如下:echo ${var##*/}
##*/ 表示从左边开始删除最后(最右边)一个 / 号及左边的所有字符
即删除 http://www.aaa.com/
结果是 123.htm
%号截取,删除右边字符,保留左边字符代码如下:echo ${var%/*}
%/* 表示从右边开始,删除第一个 / 号及右边的字符
结果是:http://www.aaa.com
%% 号截取,删除右边字符,保留左边字符代码如下:echo ${var%%/*}
%%/* 表示从右边开始,删除最后(最左边)一个 / 号及右边的字符
结果是:http:
从左边第几个字符开始,及字符的个数代码如下:echo ${var:0:5}
其中的 0 表示左边第一个字符开始,5 表示字符的总个数。
结果是:http:
从左边第几个字符开始,一直到结束。代码如下:echo ${var:7}
其中的 7 表示左边第8个字符开始,一直到结束。
结果是 :www.aaa.com/123.htm
从右边第几个字符开始,及字符的个数。代码如下:echo ${var:0-7:3}
其中的 0-7 表示右边算起第七个字符开始,3 表示字符的个数。
结果是:123
从右边第几个字符开始,一直到结束。代码如下:echo ${var:0-7}
表示从右边第七个字符开始,一直到结束。
结果是:123.htm
/或//,用于删除所有匹配的字符串。代码例如:echo ${var//.tif}