Linux学习笔记五
type检测是否为外部命令
命令别名设置功能:alias
可以将命令复杂的命令设的成自己想要的命令格式
alias 别名='你的命令'
取消别名的设置可以用unalias 别名
————————————————————————————————————————————————————
变量设置规则:
变量与变量的内容以一个等号来连接
变量名开头不能是数字
变量的内容若有空格可以用 " 或 ' 将变量内容结合起来,但双引号内的 $ 等特殊字符,可以保有原本的特性。
单引号内的特殊字符则仅为一般字符
可用转义符 \ 将特殊符号变成一般字符
在一串命令的执行中,还需要借由其他额外的命令所提供的信息时,可以使用反单引号 ` 或 $ 例如获取内核版本的设置:version=$(uname -r)再echo $version (意思就是,将uname里的内容赋给version)
若该变量为扩增变量内容时,则可用"$变量名称"或${变量}累加的内容,例如:PATH="$PATH":/home/bim或PATH=${PATH}:/home/bin
若该变量需要在其他子程序执行,则需要以export来使变量变成环境变量:export PATH
通常大写字符为系统默认变量,自行设置变量可用使用小写字符,方便判断。
取消变量的方法使用unset:unset 变量名称 例如取消myname的设置 unset myname
————————————————————————————————————————————————————
env查看环境变量
set查看所有变量(环境变量和自定义变量)
子进程仅会继承父进程的环境变量,子进程不会继承父进程的自定义变量
命令ulimit限制用户的某些系统资源,包括可以开启的文件数量,可以使用的CPU时间,可以使用的内存总量等...
变量内容的删除与替换(在用echo查询变量时,echo ${var}):
删除
#从前面删除
${variable#/*local/bin:}符合替换文字的最短的那一个
${variable##/*local/bin:}符合替换文字的最长的那一个
%从后面删除
%与%%跟#和##都是一个意思
替换
/替换两个斜杠中间的字符,后面的是新字符
${variable/sbin/SBIN}把sbin替换为SBIN,但只替换一个
${variable//sbin/SBIN}把sbin替换为SBIN,但全部替换
-若变量没有值,就将-号后面的变量值赋给它
:若变量没有值或者是空字符串,都能够用后面的内容来替换与设置
————————————————————————————————————————————————————
使用history来查看过去使用的命令
history
-n查看过去n条命令
-c将目前shell中的所有history内容全部清除
-w将目前的history记录内容所有history记录
当我们以bash登录Linux主机后,系统会主动地由家目录的 ~/.bash_history读取以前曾经执行过的命令,记录是数据容量与HISTFILESIZE这个变量设置有关。
每次执行过的命令会在,系统注销时,系统就会把在这之前执行的命令更新到~/.bash_history中。也就是说,历史命令在我注销时,会将最近的HISTFILESIZE条记录到我的记录文件当中。-w可以直接写入,记录的条数永远是由HISTFILESIZE那么多,旧的被删除被新的顶替
!number 执行第几号命令
!!执行上一条命令
!command 由最近的命令向前查找(命令串开头为command)的那个命令,并执行。
————————————————————————————————————————————————————
命令查找顺序
1.以相对/绝对路径执行命令
2.由alias找到该命令来执行
3.由bash内置的命令来执行
4.通过$PATH这个变量的顺序查找到的第一个命令来执行
————————————————————————————————————————————————————
/etc/issue你登录bash时显示的语言
/etc/issue.net提供给telnet这个远程登录程序用的,当我们使用telnet连接到主机时,主机的登录画面就会显示/etc/issue.net而不是/etc/issue
/etc/motd让取得用户的信息并且加入到这个文件里
————————————————————————————————————————————————————
login shell:取得时需要完整的登录流程,就称为login shell。例如:你要由tty1~tty6登录,需要输入用户的账号与密码,此时取得的bash就称为login shell
non-login shell:取得bash的方法不需要重复登录的操作。例如:以X Window登录Linux后,再以X的图形化接口启动终端,此时终端没有让你再次登录,该bash环境就被称为non-login shell,第二个bash也是non-login shell
一般来说login shell其实只会读取这两个配置文件:
1./etc/profile:这是系统整体的设置
2/~/.bash_profile 或 ~/.bash_login 或~/.profile:属于用户个人设置,你要添加自己的数据,就写入这里
系统整体设置:
/etc/profile
如果想修改所有用户的整体环境,可以修改这里
该文件设置的变量主要有:
PATH:会根据UID决定PATH变量要不要含有sbin的系统命令目录
MAIL:根据账号设置好用户的mailbox到/var/spool/mail账号名
USER:根据用户的账号设置此变量内容
HOSTNAME:根据主机的hostname命令决定此变量内容
HISTSIZE:历史命令记录条数,CentOs 8.x设置为1000
umask:包括root默认为022而一般用户为002等
外部的配置文件:
/etc/profile.d/*.sh
只要在/etc/profile.d/这个目录下且后缀为.sh的文件都具有r的权限,那么该文件就会被/etc/profile调用。这个目录下面的文件规范了bash操作界面的颜色、语系、ll与ls命令的命令别名、vi的命令别名、which的命令别名等。若需要帮所有用户设置一些共享的命令别名时,可以在这个目录下面自行建立扩展名为.sh文件,并将所需要的的数据写入即可
/etc/locale.conf
这个文件是由/etc/profile.d/lang.sh调用的,决定bash默认使用何种语系的配置文件
/usr/share/bash-completion/completions/*
由/etc/profile.d/bash_completion.sh这个文件加载的
其实login shell情况下所读取的整体环境配置文件只有/etc/profile,但/etc/profile还会调用其他配置文件
个人用户设置
~/.bash_profile
bash在读完整体环境设置的/etc/profile并借此调用其他配置文件后,便开始读取用户的个人配置文件。所读取的个人偏好文件其实主要有三个,依序分别是:
~/.bash_profile
~/.bash_login
~/.profile
————————————————————————————————————————————————————
stty -a 查看所有按键对应的按键内容:例如^C代表关闭程序进程
stty 按键内容 新的按键 给内容设置一个新的按键方式
如果你输入的命令报错了,但是要把正确和错误的信息全部输入到一个文件里面,这个时候要用特殊符号来书写:
find /home -name .bashrc > list 2>list 报错(由于两股数据同时写入一个文件,又没用特殊语法,所以两股数据可能是交叉写入文件中的,就会造成次序混乱。比如abcd被输入成acbd)
find /home -name .bashrc > list 2>&1 正确
find /home -name .bashrc &>list 正确
&将命令变成后台任务,和上面的命令匹配就是,先正确数据的list,在写错误数据的list。因为错误数据的list被放到后台等待执行。
<和<<输入流
<
键盘输入:例cat > filename
用键盘向文件里输入数据
用文件代替键盘的输入 例:cat >filename<~/.bashrc
~/.bashrc里的内容会输入到filename(某个文件)中
<<结束的输入字符
例:cat >filename<<"eof"
当你输入eof时,输入自动结束
————————————————————————————————————————————————————
命令返回值:若前一个命令执行的结果为正确,在Linux下面会返回一个$?=0的值
cmd1&&cmd2
若cmd1执行完毕,并返回了一个$?=0,则开始执行cmd2
若cmd执行错误,没返回一个$?=0,则不执行cmd2
cmd1||cmd2
若cmd1执行完毕,并返回一个$?=0,则不执行cmd2
若cmd1执行错误,没返回一个$?=0,则执行cmd2
————————————————————————————————————————————————————
管道仅能处理经由前面一个命令传来的正确信息(标准输出信息),对于标注错误信息没有处理的能力。
管道后面接的第一个数据一定是命令,并且这个命令必须要能够接受标准输入的数据才行,这样的命令才可为管道命令
例:less、more、head、tail等都是可以接受标准输入的管道命令。
而ls、cp、mv等就不是管道命令
所以管道命令仅会处理标准输出,对于标准错误会予以忽略;
管道命令必须要能够接受来自前一个命令的数据成为标准输入继续处理才行
————————————————————————————————————————————————————
cut为切割命令跟Python的一样,但使用方法不同
-d '分割字符'
-f '分割后的第几段' 与 -d 连用
-c 以字符为单位取出固定字符区间
grep分析一行信息,也就是取出你想要的信息
-a:将二进制文件以文本文件的方式查找数据
-c:计算找到‘查找字符’的次数
-i:忽略大小写的不同,所以大小写视为相同
-n:顺便输出行号
-v:反向选择,亦即显示出没有‘查找字符’内容的那一行
--color=auto:可以将找到的关键字部分加上颜色显示
————————————————————————————————————————————————————
sort 排序
-f:忽略大小写的差异
-b:忽略最前面的空格字符部分
-M:以月份的名字来排序,例如JAN、DEC等的排序方法
-n:使用【纯数字】进行排序
-r:反向排序
-u:就是uniq,相同的数据中,仅出现一行代表
-t:分割符号,默认是tab
-k:以哪个区间来进行排序
uniq将重复的消除
-i:忽略大小写
-c:计数
wc显示输出信息的整体数据
-l:仅列出行
-w:仅列出多少字
-m:多少字符
————————————————————————————————————————————————————前方高能~~~!!!
很重要的tee
双向重定向:tee 同时将数据流分送到文件与屏幕
tee [-a] file
-a:以累加的方式,将数据加入file中
————————————————————————————————————————————————————
tr可以用来删除一段信息当中的文字,或者进行文字信息的替换
tr[-ds] SET1...
-d:删除信息当中的SET1这个字符
-s:替换掉重复的字符
常用的地方:如果dos和Linux的换行符不同可以使用dos2unix与Unix2dos转换。但如果把tab换成空格就可以用这个
col [-xb]
-x:将tab键转换成对等的空格键
join处理两个文件之间的数据,而且主要是在处理【两个文件当中,有相同数据的那一行,才将它加在一起】 这个命令重要
-t:join默认以空格字符分隔数据,并且比对【第一个栏位】的数据,如果两个文件相同,则将两条数据连成一行,且第一个栏位放在第一个
-i:忽略大小写的差异
-1:这是数字1,代表【第一个文件要用哪个栏位来分析】的意思
-2:代表【第二个文件要用哪个栏位来分析】的意思
这里把/etc/passwd和/etc/shadow的相同栏位整合到了一起,可以看root bin daemon 这三个算栏位,两个文件里不同的内容但栏位相同被整合到了一起
这命令一开始我没看懂,但经过观察给我发现一些门道了
用 ':' 做分隔符,-1第一个文件以第4个栏位处理,通过冒号分割,说明每遇见一个冒号就相当于分割出了一个栏位
然后-2第二个文件以第三个栏位处理,相同的栏位被移动到了最前面显示,后面还是正常显示
这样很方便处理文件间的相关性,把有共同点的数据放在一块显示,方便处理
paste直接将两行贴在一起,且中间以[Tab]键隔开而已
-d:后面可以接分割字符,默认是以Tab判断
- :如果file部分写出-,表示来自标准输入的数据 这个很重要
通过 - 你可以看到三个文件的数据都输出到了一行,说明-号把/etc/group显示的数据作为标准输入流,再与其他两个文件进行合并
expand 就是将 tab 转 空格键
————————————————————————————————————————————————————
划分命令:split 学过Python的应该对这个不陌生
可以将大文件依据文件大小或行数来划分,变成小文件
-b:后面可接欲划分成的文件大小,可加单位,例如b、k、m等
-l:以行数来进行划分
PREFIX:代表前缀字符的意思,可作为划分文件的前缀文字(有了前缀字符,划分出来的文件会以xxxxaa、xxxxab、xxxxac等...继续这样来建立小文件)
————————————————————————————————————————————————————
参数代换:xargs 产生某个命令的参数
-0:如果输入的stdin含有特殊字符,例如:`、\、空格等字符时,这个-0参数可以将它还原成一般字符,这个参数可以用于特殊状态
-e:这是EOF的意思,后面可以接一个字符,当xargs分析到这个字符时,就会停止工作
-p:在执行每个命令时,都会询问使用者的意思
-n:后面接次数,每次command命令执行时,要使用几个参数的意思
————————————————————————————————————————————————————
关于【-】的用途
如果某些命令需要用到文件名来进行处理时,该stdin与stdout可以利用减号“-”来代替
举个例子
第一个-号是/home被打包到了stdout里,也就是输出流,第二个-号是输出流把文件全部输出到/tmp/homeback里
所以-号可以代表着输入流或者输出流