Linux命令的习惯
2022年9月29日大约 16 分钟
Linux命令的习惯
- 命令及参数区分大小写
- 程序可否执行与扩展名无关
- 使用tab键来补全命令
$command [-options] parameter1 parameter2 …
指令 选项 参数1 参数2
说明:
0. 一行指令中第一个输入的绝对是‘指令(command)’或‘可执行文件’
1. command 为指令的名称,例如变换路径的指令为 cd 等等;
2. 中刮号[]并不存在于实际的指令中,而加入参数设定时,通常为 - 号,例如 -h; 有时候完整参数名称会输入 -- 符号,例如 --help;
3. parameter1 parameter2.. 为依附在 option 后面的参数, 或者是 command 的参数;
4. command, -options, parameter1.. 这几个中间以空格来区分,不论空几格 shell 都视为一格;
5. 按下 [Enter] 按键后,该指令就立即执行。
6. 指令太长的时候,可以使用 \ 符号来跳脱 [Enter] 符号, 使指令连续到下一行。注意! \ 后就立刻接特殊字符。
7. 在 Linux 系统中,英文大小写字母是不一样的。举例来说, cd 与 CD 并不同。
查看目录下有什么文件信息
> ls //list查看当前目录下有什么文件
> ls -l //list -list 通过详细内容形式查看目录下的文件内容
用颜色代表不同文件
白色:普通文件
红色:压缩文件
蓝色:目录文件
浅蓝色:链接文件
黄色:设备文件(/dev)
绿色:可执行文件(/bin、/sbin)
粉红色:图片文件
> ls 目录 //查看指定目录下文件名字信息
> ls -l 目录 //以详细列表形式查看指定目录下文件名字信息
> ls -a //list all 查看全部文件,包括隐藏文件
> ls -al //list list all 以详细列表形式查看全部文件,包括隐藏文件
> win dir 查看指定目录下文件名字信息
显示文件和目录树
yum -y install tree
> tree
用法: tree [参数] {文件}
参数: -a 不隐藏任何以.字符开始的条目
-d 只显示目录不显示文件
-f 每个文件都显示路径
-t 根据最后修改时间排序
-L n 只显示n层目录 (n为数字)
-N 解决中文乱码 可以加其他命令 例tree -NL 2
目录切换
> cd 目录名字
> cd .. //向上级目录切换
> cd ~ //快速切换回自己的家目录
查看当前操作位置
> pwd
查看操作者信息(是谁在操作系统)
> whoami
不同用户间的切换
> su - //切换为root用户
> su - root //效果同上
> su 普通用户名称 //向普通用户切换
exit //当前用户退回到之前用户
su多次使用,用户会“累加”,建议“su” 和 “exit”匹配使用
jinnan--->root--->jinnan--->root--->jinnan
查看指令对应的可以执行程序文件位置
> which 指令
目录操作
1)创建目录 make directory
> mkdir newdir
> mkdir -p newdir/newdir/newdir //递归方式创建多级目录
newdir新目录多于1个层次(2/3/4等)就设置-p参数,如果就一个新的目录则无需-p参数
> mkdir dir/newdir
> mkdir dir/dir/newdir
> mkdir -p dir/newdir/newdir
2) 移动(改名字)目录 move
(目录/文件 都可以操作)
> mv dir1 dir2 //dir1移动到dir2目录下,并给改名字为"原名"
> mv dir1 dir2/newdir //dir1移动到dir2目录下,并给改名字为newdir
> mv dir1/dir2 dir3/dir4 //dir2移动到dir4目录下,并给改名字为"原名"
> mv dir1/dir2 dir3/dir4/newdir //dir2移动到dir4目录下,并给改名字为 newdir
> mv dir1/dir2 ./ //dir2移动到 当前 目录下,并给改名字为"原名"
> mv dir1/dir2 ./newdir //dir2移动到 当前 目录下,并给改名字为newdir
3) 复制(改名字)目录 copy
(目录/文件 都可以操作)
//① 复制普通文件
> cp file1 dir1 //file1被复制到dir1目录下一份,并给改名字为“原名”
> cp file1 dir1/newfile //file1被复制到dir1目录下一份,并给改名字为newfile
//② 复制目录 -r参数要求
//recursive递归方式拷贝目录
> cp -r dir1 dir2 //dir1被复制到dir2目录下一份,并给改名字为“原名”
> cp -r dir1 dir2/newdir //dir1被复制到dir2目录下一份,并给改名字为newdir
> cp -r dir1/dir2/dir3 dir4/dir5 //dir3被复制到dir5目录下一份,并给改名字为"原名"
用法: cp [参数] {原文件…} {目标文件}
参数: -r 递归执行 (可复制目录树)
4) 删除 remove
> rm filename //普通文件删除
> rm -r dir //删除目录[无视层次]需要-r参数
> rm -rf 文件 //recursive force 递归强制删除文件 force 避免删除隐藏文件的提示
> rm -rf / //递归强制方式删除系统里边的全部内容
文件操作
1) 查看文件内容
> file [option] filename // file显示文件类型
> cat filename //在终端显示文件全部内容
> more filename //通过"敲回车"方式从第一行逐行查看文件内容
//不支持回看
//q键 退出查看
> less filename //"上下左右"键方式查看文件各个部分内容
//支持回看,q键 退出
> head -n filename //查看文件“前n行”内容
> tail -n filename //查看文件“末尾n行”内容
> wc filename //计算文件行数
2) 创建文件
> touch filename
> touch dir/filename
参数: -d 更改时间戳为定义值 (后面加年月日,格式:20101212)
3) 追加内容(文件不存在会“自动”创建)
> echo 内容 > filename //给文件“覆盖写”方式追加内容
> echo 内容 >> filename //给文件纯追加内容
别名
alias rm='rm -i'
alias cp='cp -i'
alias mv='mv -i'
alias ls='ls --color=auto'
alias ll='ls -lh --color=auto'
alias l='ls --color=auto'
alias grep='grep --color=auto'
debian系统的时候要在/etc/profile里面进行设置
find
find 现值查找目录 选项 选项值 选项 选项值....
[root@www ~]# find [PATH] [option] [action]
选项与参数:
1. 不时间有关的选项:共有 -atime, -ctime 与 -mtime ,以 -mtime 说明
-mtime n :n 为数字,意义为在 n 天之前的『一天之内』被更改过内容的文件
-mtime +n :列出在 n 天之前(不含 n 天本身)被改动过内容的文件;
-mtime -n :列出在 n 天之内(含n 天本身)被更改过内容的文件。
-newer file :file 为一个存在参照物,列出比 file 还要新的文件
![](http://qiniu.oorzc.cn/note/other/201807081751_760.png?imageView2/0/w/880/h/680)
[root@www ~]# find / -mtime 0
# 那个 0 是重点!0 代表目前的时间,所以,从现在开始到 24 小时前,有改动过内容的文件都会被列出来
find / -mtime 3 #3天内改动过的文件
find / -name file –exec ls –l {} \;
文件的 Access time,atime 是在读取文件或者执行文件时更改的。
文件的 Modified time,mtime 是在写入文件时随文件内容的更改而更改的。
文件的 Create time,ctime 是在写入文件、更改所有者、权限或链接设置时随 Inode 的内容更改而更改的。
ls -lc filename 列出文件的 ctime
ls -lu filename 列出文件的 atime
ls -l filename 列出文件的 mtime
find 现值查找目录 选项 选项值 选项 选项值....
具体选项:
① name 根据文件名字查找指定的文件
find 目录 -name 完整文件名称
> find / -name passwd[完整名称] //"递归遍历"系统全部目录查找名字等于passwd的文件
> find /etc -name passwd[完整名称] //递归遍历/etc及内部所有目录查找 名字等于passwd的文件
>find 目录 -name "an*"[部分名称] //模糊查找文件名字以an开始的
② 对查找的目录层次进行限制
-maxdepth 限制查找的最"深"层次
-mindepth 限制查找的最"浅"层次
> find / -name passwd -mindepth 3 -maxdepth 4 //在3到4个层次的目录里边定位passwd文件
③ 根据文件大小进行查找
size 单位
> find ./ -size 50c //在当前目录下查找大小[等于]50个字节的文件
单位:
数量 单位 实际大小
100 -------> 512字节:【100*512字节】
50c -------> 字节 : 【50字节】
50k -------> 千字节: 【50*1024字节】
50M -------> 兆字节 【50*1024*1024字节】
> find ./ -size +50c //在当前目录下查找大小[大于]50个字节的文件
> find ./ -size -50c //在当前目录下查找大小[小于]50个字节的文件
选项
-amin<分钟>:查找在指定时间曾被存取过的文件或目录,单位以分钟计算;
-anewer<参考文件或目录>:查找其存取时间较指定文件或目录的存取时间更接近现在的文件或目录;
-atime<24小时数>:查找在指定时间曾被存取过的文件或目录,单位以24小时计算;
-cmin<分钟>:查找在指定时间之时被更改过的文件或目录;
-cnewer<参考文件或目录>查找其更改时间较指定文件或目录的更改时间更接近现在的文件或目录;
-ctime<24小时数>:查找在指定时间之时被更改的文件或目录,单位以24小时计算;
-daystart:从本日开始计算时间;
-depth:从指定目录下最深层的子目录开始查找;
-expty:寻找文件大小为0 Byte的文件,或目录下没有任何子目录或文件的空目录;
-exec<执行指令>:假设find指令的回传值为True,就执行该指令;
-false:将find指令的回传值皆设为False;
-fls<列表文件>:此参数的效果和指定“-ls”参数类似,但会把结果保存为指定的列表文件;
-follow:排除符号连接;
-fprint<列表文件>:此参数的效果和指定“-print”参数类似,但会把结果保存成指定的列表文件;
-fprint0<列表文件>:此参数的效果和指定“-print0”参数类似,但会把结果保存成指定的列表文件;
-fprintf<列表文件><输出格式>:此参数的效果和指定“-printf”参数类似,但会把结果保存成指定的 列表文件;
-fstype<文件系统类型>:只寻找该文件系统类型下的文件或目录;
-gid<群组识别码>:查找符合指定之群组识别码的文件或目录;
-group<群组名称>:查找符合指定之群组名称的文件或目录;
-help或--help:在线帮助;
-ilname<范本样式>:此参数的效果和指定“-lname”参数类似,但忽略字符大小写的差别;
-iname<范本样式>:此参数的效果和指定“-name”参数类似,但忽略字符大小写的差别;
-inum<inode编号>:查找符合指定的inode编号的文件或目录;
-ipath<范本样式>:此参数的效果和指定“-path”参数类似,但忽略字符大小写的差别;
-iregex<范本样式>:此参数的效果和指定“-regexe”参数类似,但忽略字符大小写的差别;
-links<连接数目>:查找符合指定的硬连接数目的文件或目录;
-lname<范本样式>:指定字符串作为寻找符号连接的范本样式;
-ls:假设find指令的回传值为Ture,就将文件或目录名称列出到标准输出;
-maxdepth<目录层级>:设置最大目录层级;
-mindepth<目录层级>:设置最小目录层级;
-mmin<分钟>:查找在指定时间曾被更改过的文件或目录,单位以分钟计算;
-mount:此参数的效果和指定“-xdev”相同;
-mtime<24小时数>:查找在指定时间曾被更改过的文件或目录,单位以24小时计算;
-name<范本样式>:指定字符串作为寻找文件或目录的范本样式;
-newer<参考文件或目录>:查找其更改时间较指定文件或目录的更改时间更接近现在的文件或目录;
-nogroup:找出不属于本地主机群组识别码的文件或目录;
-noleaf:不去考虑目录至少需拥有两个硬连接存在;
-nouser:找出不属于本地主机用户识别码的文件或目录;-ok<执行指令>:此参数的效果和指定“-exec”类似,但在执行指令之前会先询问用户,若回
答“y”或“Y”,则放弃执行命令;
-path<范本样式>:指定字符串作为寻找目录的范本样式;
-perm<权限数值>:查找符合指定的权限数值的文件或目录;
-print:假设find指令的回传值为Ture,就将文件或目录名称列出到标准输出。格式为每列一个名称,每
个名称前皆有“./”字符串;
-print0:假设find指令的回传值为Ture,就将文件或目录名称列出到标准输出。格式为全部的名称皆在同一行;
-printf<输出格式>:假设find指令的回传值为Ture,就将文件或目录名称列出到标准输出。格式可以自行指定;
-prune:不寻找字符串作为寻找文件或目录的范本样式;
-regex<范本样式>:指定字符串作为寻找文件或目录的范本样式;
-size<文件大小>:查找符合指定的文件大小的文件;
查看命令历史
history
history -c //清空历史命令
管道
grep
-c 只输出匹配行的计数。
-i 不区分大小写(只适用于单字符)。
-h 查询多文件时不显示文件名。
-l 查询多文件时只输出包含匹配字符的文件名。
-n 显示匹配行及行号。
-s 不显示不存在或无匹配文本的错误信息。
-v 显示不包含匹配文本的所有行。
sort -r 反向排序
cut –d ‘分割符’ –f 取第几段
uniq –c 计数
wc –l 统计多少行
ps
1)ps a 显示现行终端机下的所有程序,包括其他用户的程序。
2)ps -A 显示所有程序。
3)ps c 列出程序时,显示每个程序真正的指令名称,而不包含路径,参数或常驻服务的标示。
4)ps -e 此参数的效果和指定"A"参数相同。
5)ps e 列出程序时,显示每个程序所使用的环境变量。
6)ps f 用ASCII字符显示树状结构,表达程序间的相互关系。
7)ps -H 显示树状结构,表示程序间的相互关系。
8)ps -N 显示所有的程序,除了执行ps指令终端机下的程序之外。
9)ps s 采用程序信号的格式显示程序状况。
10)ps S 列出程序时,包括已中断的子程序资料。
11)ps -t <终端机编号> 指定终端机编号,并列出属于该终端机的程序的状况。
12)ps u 以用户为主的格式来显示程序状况。
13)ps x 显示所有程序,不以终端机来区分。
14)ps -l 較長,較詳細的顯示該PID的信息
ps aux | grep -i www | sort -r
![](http://qiniu.oorzc.cn/note/other/201807081809_134.png?imageView2/0/w/880/h/680)
linux中的正则
&&且
||或
几个概念:
1.基本正则表达式 扩展的正则表达式 (由普通字符+元字符组成)
2.通配 (由普通字符+元字符组成)
3.元字符
注意:正则表达式中元字符的意义和通配中元字符的意义有区别的
bash shell本身不支持正则表达式,使用正则表达式的是shell的一些命令和工具,如grep,sed,awk等等
但是bash可以使用正则表达式中的一些元字符实现通配的功能,此时的这些元字符叫通配符。
此时通配中元字符的意义跟正则表达式中元字符的意义就不一样了。
通配是指:将一个包含通配符的非具体的文件名扩展为计算机,服务器,网络上的一批具体的文件名的过程。
基本正则表达式中元字符的意义如下:
1. * 匹配*前面的那一个字符的0次或多次
如hel*o heo helo hello helllo ......
2. . 匹配任意一个字符(只匹配一个,可以是空格)
如ab. abc abd ab3 ab ......
3. ^ 匹配行首,行首的字符序列必须是^后的字符序列
如^suda sudahuhuhuuuuuhuuh sudaokokokokokoko ......
4. & 匹配行尾,行尾的字符序列必须是$前的字符序列
如suda$ jijijijijiiijijsuda lkokokokokjijhuhsuda ......
特殊的 ^$ 匹配一个空行
^.$ 匹配只有一个字符的空行
5. [] 匹配字符集合中的任意一个字符(只匹配一个)
如[1234] [1-4] 匹配1,2,3,4的任意一个字符
注意:^放在[]里面时,不再表示匹配行首,而是取反的意思
[^1234] [^1-4] 匹配不是1,2,3,4的任意一个字符
[a-z][A-Z]* 匹配任意一个英文单词
6. \ 用于转义元字符,使之成为普通字符
如\* 此时*表示一个普通字符
7. \<\> 用于精确匹配
如\<the>\ 表示精确匹配the这个单词,而不是them then等等
8.\{\}系列符号
\{n\} 匹配前面字符的n次
\{n,\} 匹配前面字符的至少n次
\{n,m\} 匹配前面字符的n-m次,至少n次,至多m次
如JO\{3\}B 匹配JOOOB
如JO\{3,\}B 匹配JOOOB JOOOOB ......
如JO\{3,6\}B 匹配JOOOB JOOOOB JOOOOOB JOOOOOOB
扩展的正则表达式中元字符的意义如下:
1. ? 匹配前面的那一个字符的0次或1次
如JO?B 匹配 JB JOB JOOB
2. + 匹配前面的那一个字符的1次或多次
如JO+B 匹配 JOOB JOOOB ......
3. |与()通常结合使用,表示一组可选的字符集合
如re(a|o|e)d 匹配read reod reed
等同于re[aoe]d
通配中的元字符的意义如下:
1. * 表示任意多的任意字符
2. ? 表示一个任意字符
3. ^ 表示取反
4. [] 同正则表达式的用法
5. {} 表示一组表达式的集合 {}中表达式是或的关系
如ls -l {*.cpp , [1234]*.c} 列出满足表达式*.cpp或者[1234]*.c的文件。
权限设置
1) "字母相对方式"设置权限
权限: r读 w写 x执行
用户: u主人 g同组 o其他组
chmod u+/-rwx, g+/-rwx, o+/-rwx 文件
不同用户通过",逗号"分隔
在同一个用户里边,+/-只能用“一个”
"rwx"在同一个用户里边可以设置一个或多个
"ugo" 每次权限操作可以设置一个或多个用户
>chmod u+rw filename //主人增加读、写
>chmod g-rx filename //同组删除读、执行
>chmod u-w,g+x filename //主人删除写,同组增加执行
>chmod o+w,o-x filename //其他组用户“增加写、删除执行”
2) "数字绝对方式" 设置权限
读:4 写:2 执行:1
权限类型:
0: 没有权限
1: 执行
2: 写
3: 写、执行
4: 读
5: 读、执行
6: 读、写
7: 读、写、执行
chmod ABC filename //ABC分别代表主人、同组、其他组用户权限
>chmod 764 filename //主人读、写、执行, 同组读、写, 其他读
>chmod 777 filename //满贯权限
>chmod 000 filename //所有用户没有任何权限
字母和数字方式取舍:
权限修改的比较"少",就使用字母方式
权限修改的比较"多",就使用数字方式
开关机指令
># reboot //重启
># poweroff //关机