1.目录处理命令(上)
创建目录命令
mkdir -p 【目录名】
-p用来递归创建
mkdir -p outerdir/innerdir
desktop Jeff$ ls
$RECYCLE.BIN Learning_Python Thumbs.db outerdir 实习小结.md A*算法 SSH设置 myBooks 毕业规范
切换目录命令
cd 【目录名】
cd ~
和cd
回到家目录cd -
回到上次所在目录cd ..
回到上一级目录cd .
进入当前目录
另外control+L
清屏快捷键
绝对路径和相对路径
下面是Mac OS X的目录结构
JeffsMacBook-Pro:~ Jeff$ pwd
/Users/Jeff
JeffsMacBook-Pro:~ Jeff$ cd ..
JeffsMacBook-Pro:Users Jeff$ cd ..
JeffsMacBook-Pro:/ Jeff$ ls
Applications home Library installer.failurerequests Network net System private Users sbin Volumes tmp bin usr cores var dev 用户信息 etc
按两下tab键目录/命令补全
2.目录处理命令(下)
删除空目录
rmdir【目录名】
删除非空目录或文件
rm -rf 【目录/文件】
-r
删除目录-f
强制
单纯rm
或者rm -r
会问你真的要删文件或者目录吗?
千万别打rm -rf /
会删掉根目录下的所有文件!!!
复制命令
cp 【选项】【原文件/目录】【目标目录】
-r
复制目录-p
连带文件属性复制-d
若原文件是链接文件,则复制链接属性-a
相当于-pdr,保证和原文件属性一模一样!
cp -r japan/ /Users/Jeff/Documents //复制japan目录下的目录到文稿目录下
cp -r japan /Users/Jeff/Documents //复制japan目录到文稿目录下
另外,ll
就是ls -l
命令!
剪切或改名命令
mv 【原文件或目录】【目标目录】
在同一目录下就是改名
3.其他帮助命令
选项帮助
命令 --help
,如ls --help
shell内部命令帮助
help shell内部命令
如whereis cd
用来确定是否是shell内部命令,help cd
用来获取内部命令帮助
详细命令帮助
info 命令
不推荐使用!!-回车
进入子帮助页面-u
up进入上层页面-n
next进入下一个帮助小节-p
previous进入上一个帮助小节-q
quit退出
4.输出重定向
标准输入输出
设备 | 设备文件名 | 文件描述符 | 类型 |
---|---|---|---|
键盘 | /dev/stdin |
0 | 标准输入 |
显示器 | /dev/sdtout |
1 | 标准输出 |
显示器 | /dev/sdteer |
2 | 标准错误输出 |
输出重定向
如ipconfig > ~/desktop/test.log
,将内容保存在日志文件中
只要命令有输出就能重定向到文件中
特别注意,错误输出大于号和文件之间不能有空格!!!
正确和错误输出同时保存
3和4作用是一样的!推荐3,4,5!
特别这个文件/dev/null
,被称为『黑洞』,如果把命令重定向到这儿,系统就直接抛弃了
输入重定向
wc【选项】【文件名】
选项:-c
统计字节数-w
统计单词数-l
统计行数
这里首先引入这个例子——wc < test.log
,wc
命令原本的输入是键盘,现在重新定向为文件,当然,其实不需要<
另外一个例子是——wc << ddy
,它会要求你不断输入,知道再遇到ddy
,就会停止并做相关统计,实际工作中基本不会用到
5.通配符
通配符
通配符 | 作用 |
---|---|
? | 匹配一个任意字符 |
* | 匹配0个或任意多个任意字符,也就是可以匹配任何内容 |
[] | 匹配中括号中任意一个字符。例如[abc]代表一定匹配一个字符,或者a或者b或者c |
[-] | 匹配中括号中任意一个字符,-代表一个范围。例如,[a-z]代表匹配一个小写字母 |
[^] | 逻辑非,表示匹配不是中括号内的一个字符。例如[^0-9]代表匹配一个不是数字的字符 |
Bash中其他特殊符号
符号 | 作用 |
---|---|
‘‘ | 单引号。在单引号中所有的特殊符号,如"$"和"`"(反引号)都没有特殊含义 |
"" | 双引号。在双引号中特殊符号都没有特殊含义,但是"$"、"`"和"\"是例外,拥有"调用变量的值"、"引用命令"和"转义符"的特殊含义 |
`` | 反引号。反引号括起来的内容是系统命令,在Bash中会先执行它。和$()作用一样,不过推荐使用$(),因为反引号非常容易看错。 |
$() | 和反引号一样,用来引用系统命令 |
# | 在Shell脚本中,#开头的行代表注释 |
$ | 用于调用变量的值,如需要调用变量name的值时,需要用$name的方式得到变量的值。 |
\ | 转义符,跟在\之后的特殊符号将失去特殊含义,变味普通字符。如\$将输出"$"符号,而不当作是变量引用 |
举例
aa=123
echo $aa
# 输出123
echo ‘$aa‘
# 输出$aa
echo "$aa"
# 输出123
aa=`ls` # 先执行,再赋值,易弄错,不推荐
echo $aa
# 输出ls的输出
aa=$(ls) # 推荐
echo $aa
# 输出ls的输出
echo \$aa # 让特殊符号失去作用
# 输出$aa
6.文件搜索命令
文件搜索命令
locate 文件名
在后台数据库中按文件名搜索,速度更快
这个数据库是/var/lib/mlocate
,它的更新速率默认是一天一次,Linux版本的不同,名字不同,Mac下在/var/db/locate.datebase
可以使用updatedb
命令强制更新数据库,Mac下是sudo /usr/libexec/locate.updatedb
,根据距上次更新后更改的文件数目多少,速度不同
只能通过文件名来搜索
遵守/etc/updatedb.conf
配置文件里的筛选规则,所以即使你更新了数据库也不一定能locate到所要寻找的文件
搜索命令的命令
whereis【选项】命令名
-b
只查找可执行文件-m
只查找帮助文件
Mac用不了这两个选项which 命令名
可以查看别名,Mac也没这个功能cd
命令是shell自带的,找不到,whereis
和which
能找到的都是后来安装的命令
PATH环境变量
Linux从PATH
定义的路径中找寻命令,所有命令不用麻烦打绝对路径echo $PATH
查看路径,:
隔开
文件搜索命令
find【搜索范围】【搜索条件】
-name
按照文件名搜索-iname
文件名不区分大小写
Linux中的通配符
#find是在系统当中搜索符合条件的文件名。如果需要匹配,使用通配符匹配,通配符是完全匹配的。
* 匹配任意内容(任意多个字符)
? 匹配任意一个字符
[] 匹配任意一个中括号内的字符
如find desktop/ -name "ab[cd]"
匹配abc或abd
按照所有者来搜索
-user
按照所有者搜索,如find /root -user root
是找root目录下所有者为root的文件-nouser
是找没有所有者的文件,如find /root -nonuser
是找root目录下没有所有者的文件
按照时间来搜索
find 【搜索范围】 -(X)time (+/-)时间
如find /root -mtime +10
是查找十天前修改的文件+10
10天前修改的文件10
10天当天修改的文件-10
10天内修改的文件atime
访问文件的时间ctime
改变文件属性的时间mtime
修改文件内容的时间
按照大小来搜索
find 【搜索范围】-size (+/-)X(k/M)
小写k
是kB,大写M
是MB
如find /root -size +10k
是查找root目录下大小大于10kB的文件
按照i节点来搜索
find 【搜索范围】-inum 【i节点号】
和ls -i 【文件名】
正好相反
多条件查询
find /root -size +20k -a -size -50k
查找20~50kB大小的文件find /root -size -20k -o -size +50k
查找小于20或者大于50kB的文件find /root -size +20k -a -size -50k -exec ls -lh {}\;
查找20~50kB的文件,并列出详细信息-exec/-ok 命令 {} \;
用来继续处理搜索到的文件find /root -inum 606838 -exec rm -rf {} \;
找到i节点号为606838的文件然后删除
7.压缩命令1
Linux中最常见的压缩格式有:.zip .gz .bz2 .tar.gz .tar.bz2
.zip格式压缩
zip 压缩文件名 原文件
#压缩文件zip -r 压缩文件名 源目录
#压缩目录
JeffsMacBook-Pro:~ Jeff$ zip ~/desktop/install.zip ~/desktop/install.log
adding: Users/Jeff/desktop/install.log (stored 0%)
JeffsMacBook-Pro:~ Jeff$ ls -l ~/desktop
-rw-r--r-- 1 Jeff staff 0 4 13 18:35 install.log
-rw-r--r-- 1 Jeff staff 210 4 15 23:07 install.zip
.zip格式解压缩
unzip 压缩文件
#在哪个目录下操作就解压到那个目录下
.gz格式压缩
gzip 源文件
#压缩后源文件会被删除gzip -c 源文件 > 压缩文件
#源文件被保留
如gzip -c cangls > cangls.gz
gzip -r 目录
#只能压缩目录下所有的子文件,但不能压缩目录
可以使用通配符统一处理多个压缩文件,如rm -rf *.zip
.gz格式解压缩
gzip -d 压缩文件
等价于gunzip 压缩文件
,会把源压缩文件删除
.bz2格式压缩
bzip2 源文件
#压缩后源文件会被删除bzip2 -k 源文件
#源文件被保留
此命令不能压缩目录!
.bz2格式解压缩
bzip2 -d 压缩文件
可以用-k
保留源文件
等价于bunzip2 压缩文件
同样可用-k
8.压缩命令2
通过打包.tar解决.gz和.bz2压缩目录的不便之处
常用压缩格式:.tar.gz
和.tar.bz2
打包命令
tar -cvf 打包文件名 源文件
-c
打包-v
显示过程-f
指定打包后的文件名
如tar -cvf longzls.tar longzls
然后对打包文件进行压缩
解打包命令
tar -xvf 打包文件
-x 解打包
如tar -xvf longzls.tar
.tar.gz格式
tar -zcvf 压缩包名.tar.gz 源文件
压缩tar -zxvf 压缩包名.tar.gz
解压缩tar -ztvf 压缩包名.tar.gz
查看压缩包内容
.tar.bz2格式
tar -jcvf 压缩包名.tar.bz2 源文件
压缩tar -jxvf 压缩包名.tar.bz2
解压缩tar -jtvf 压缩包名.tar.bz2
查看压缩包内容
可以在解压缩命令
后加上-C 指定目录
将解压出来的文件放到其他目录
可以在压缩命令
的源文件处空格分开多个文件一起压缩,如tar -zcvf jp.tar.gz japan install.log
9.用户登录查看命令
查看用户登录信息
w 用户名
(不加用户名也可以)
命令输出:
- USER:登录的用户名
- TTY: 登录终端
- FROM:从哪个IP地址登录
- [email protected]:登录时间
- IDLE:用户闲置时间
- JCPU:指的是该终端连接的所有进程占用的时间。这个时间里并不包括过去的后台作业时间,但却包括当前正在运行的后台作业所占用的时间
- PCPU:是指当前进程所占用的时间
- WHAT:当前正在运行的命令
who 用户名
和w
一样,只不过更简单(不加用户名也可以)
命令输出:
- -用户名
- -登录终端
- -登录时间(登录来源IP地址)
查看过去所有用户的开关机重启信息
last
默认是读取/var/log/wtmp
文件数据,这是一个二进制文件,防止人为修改
命令输出:
- -用户名
- -登录终端
- -登录IP
- -登录时间
- -退出时间(在线时间)
查看所有用户的最后一次登录信息
lastlog
默认读取/var/log/lastlog
文件数据
10.字符串搜索命令
grep 【选项】"字符串" 文件名
#在文件中查找字符串-i
忽略大小写,因为Linux严格区分大小写-v
搜索不包含字符串的文件
grep需要使用正则表达式
进行匹配