Linux命令大致可以分为三类:
- 文件目录类命令
- 进程控制类命令
- 用户及权限管理类命令
命令格式:
命令名称 --选项 参数
ls --all /etc
命令名称 -选项缩写 参数
ls -a /etc
文件目录操作
浏览目录
ls 浏览目录子文件
命令英文原意:list
ls 选项[-ald] [文件或目录]
-a 显示所有文件,包括隐藏文件
-l 详细信息显示
-d 查看目录属性
pwd 展示当前所在的路径
命令英文原意:print working directory
pwd
目录操作命令
cd 切换目录
命令英文原意:change directory
cd /
cd ..
mkdir 创建目录
命令英文原意:make directory
mkdir [目录名]
mkdir newdir
rmdir 删除空目录
命令英文原意:remove directory
rmdir [目录名]
rmdir newdir
文件操作命令
cp 拷贝文件或者目录
英文原译, copy
cp [参数] <源文件路径> <目标文件路径>
-p :连同文件的属性一起复制,而非使用默认方式,常用于备份
-i :若目标文件已经存在时,在覆盖时会先询问操作的进行
-r :递归持续复制,用于目录的复制行为
-u :目标文件与源文件有差异时才会复制
将test1.txt复制成test2.txt:
cp test1.txt test2.txt
将test3.txt复制到/tmp目录中:
cp test3.txt /tmp (目录)
目录拷贝:
cp –r test1(目录) test2(目录)
rm 删除文件或者目录
英文原意,remove
rm [参数] <目标文件路径>
-f :就是force的意思,忽略不存在的文件,不会出现警告消息
-i :互动模式,在删除前会询问用户是否操作
-r :递归删除,最常用于目录删除,它是一个非常危险的参数
删除某个文件: rm myfiles(文件名)
删除当前目录下的所有文件:rm *
递归删除某个目录(包含该目录下所有文件及子目录): rm -r myfolder(目录名)
强迫删除所有后缀名为txt文件:rm –f *.txt
删除当前目录下的所有文件:rm –i * (删除文件时会询问,可按Y或N键表示允许或拒绝删除文件)
mv 移动文件和目录
mv 文件1 文件1新位置(新位置如果是目录则移入目录,如果是文件名则移动并改名)
find(文件搜索命令)
find [搜索范围] [搜索条件]
- 避免大范围搜索,会非常消耗系统资源
- 可以使用通配符匹配
- *匹配任意内容
- ?匹配任意一个字符
- []匹配任意一个括号内的字符
- 完全匹配
- 时间
- -mtime +10:查找10天前修改的文件
- -mtime 10:查找10天前当天修改的文件
- -mtime -10:查找10天内修改的文件
- 类型
- -atime 文件访问时间
- -ctime 改变文件属性
- -mtime 修改文件内容
- 其他选项
- -iname test:不区分要搜索的test大小写格式
- -user root:搜索属于root用户的文件
- -nouser:搜索没有所属者的文件,liunx中,每个文件都有所属者,如果没有,有可能有以下几种情况:垃圾文件、内核产生的文件(proc/,sys/)、外来文件(U盘拷入)
- -size:文件大小用小写k和大写M
- -a 表示and
- -o 表示or
find /etc -size +20k -a -size -50k -exec ls -lh {} \
;
-exec {} \; 固定格式,表示直接对前面的搜索结果进行后面的命令处理
locate(在数据库中搜索文件)
locate : 定位
locate [文件名]
- 因为搜索数据库,所以搜索速度非常快
- 数据库文件的位置在
/var/lib/mlocate
,这个数据库中包含了所有的文件名 - 该数据库文件每天更新一次,当我们作新建文件,或是其他等操作,系统不会主动更新数据库,需要 使用
updatedb
命令更新 - locate命令搜索遵循
/etc/updatedb.conf
配置文件#是否开启搜索限制 PRUNE_BIND_MOUNTS="yes" # 搜索时,不搜索的文件类型 # PRUNENAMES=".git .bzr .hg .svn" # 搜索时,不搜索的文件路径 PRUNEPATHS="/tmp /var/spool /media /home/.ecryptfs" # 搜索时,不搜索的文件系统 PRUNEFS="NFS nfs nfs4 rpc_pipefs afs binfmt_misc proc smbfs autofs iso9660 ncpfs coda devpts ftpfs devfs mfs shfs sysfs cifs lustre tmpfs usbfs udf fuse.glusterfs fuse.sshfs curlftpfs ecryptfs fusesmb devtmpfs"
grep 在文件中搜索匹配的字符并进行输出
英文原译:Globally search a Regular Expression and Print
grep[参数] <要找的字串> <要寻找字串的源文件>
-a :将binary文件以text文件的方式查找数据
-c :计算找到“查找字符串”的次数
-i :忽略大小写的区别,即把大小写视为相同
-v :反向选择,即显示出不包含‘查找字符串’内容的那
一行
tar 打包或者压缩
英文原译:tape archive
tar [参数] <文件>
-t :查看打包文件的内容含有哪些文件名
-c :新建打包文件
-x :解打包或解压缩的功能,可以搭配-C(大写)指定解压的目录,注意-c,-t,-x不能同时出现在同
一条命令中
-j :通过bzip2的支持进行压缩/解压缩
-z :通过gzip的支持进行压缩/解压缩
-v :在压缩/解压缩过程中,将正在处理的文件名显示出来
-f filename :filename为要处理的文件
-C dir :指定压缩/解压缩的目录dir
将当前目录的所有文件打包成test.tar:tar -cvf test.tar *
将当前目录的所有文件打包成test.tar,再用gzip命令压缩: tar -czvf test.tar.gz *
查看test.tar文件中包括了哪些文件: tar -tf test.tar
将test.tar解打包:tar -xvf test.tar
将foo.tar.gz解压缩并解打包:tar -xzvf foo.tar.gz
浏览文件
cat 连接文件并打印到标准输出设备上
命令英文原意:concatenate and display files
-E 在每一行的末尾显示$
-n 为显示行添加行号
cat m1 (在屏幕上显示文件ml的内容)
cat m1 m2 (同时显示文件ml和m2的内容)
more 分页显示文件内容
more [文件名]
(空格) 或f 显示下一页
(Enter) 显示下一行
q或Q 退出
less 分页显示文件内容
less [文件名]
(空格) 或f 显示下一页
(Enter) 显示下一行
q或Q 退出
除此之外,还可以使用方向键上下滚动文件
head 显示文件前几行的内容
head [参数] <文件名>
-n:显示前n行,不指定此参数显示前10行
tail 显示文件后几行的内容
tail [参数] <文件名>
-n:显示后n行,不指定此参数显示后10行
+n:从第n行显示到文件尾
-F:用于跟踪显示不断增长的文件结尾内容
命令搜索命令
whereis(命令搜索命令)
- 用于搜索命令所在的路径以及帮助文档所在的位置,不能搜索用户自己创建的文件等信息。
- 不能看到shell命令(自带的命令,比如cd命令),只能看到外部安装的命令(环境变量中的命令)
- -b:只查找可执行文件
- -m:只查找帮助文件
which(命令搜索命令)
- 与whereis命令类似,但是还可以看到命令文件的所在位置
进程控制命令
ps 查看进程信息
英文原意:process status
ps命令是用来显示系统瞬间的进程信息,它可以显示出在用户输入ps命令时系统的进程及进程的相关信息。
ps [参数]
l 长格式输出
u 按用户名和启动时间的顺序来显示进程
j 用任务格式来显示进程
f 用树形格式来显示进程
a 显示所有用户的所有进程(包括其它用户)
e 显示所有用户的所有进程(包括其它用户)
x 显示无控制终端的进程
r 显示运行中的进程
权限和chmod命令
-rw-r--r--
:
– | rw- | r– | r– |
---|---|---|---|
文件类型(-文件 d目录 l软连接) | u(user)所有者 | g(group)所属组 | o(other)其他人 |
r 读取权限 read
w 写入权限 write
x 执行权限 excute
所有者,当前登陆用户所拥有的权限
所属组,当前登陆用户所在的用户组的拥有的权限
其他,非当前用户,用户组,即其他用户所拥有的权限
chmod命令
change mode, 修改权限
chmod [选项] 模式 文件名
选项:
-R 递归
模式:
[ugoa][+-=][rwx]
[mode=421]
修改权限:
chmod u+x cangls.av #给文件所有者添加执行权限
chmod g+w,o+w furong.av #给文件添加所属组和其他人的修改权限
chmod u=rwx,g=rw fengjie.av #直接设置权限,比较方便
chmod a=rwx fengjie.av #设置所有人的权限为读写执行,通常不用
使用数字代表权限修改文件的权限:
权限 | 代表数字 |
---|---|
r | 4 |
w | 2 |
x | 1 |
如果要设置如下权限,则可以使用如下命令rwxr-xr-x
:
rwx=4+2+1=7
r-x=4+1=5
即
chome 755 文件名
常用的权限:
777 最高权限
755 执行权限
644 文件权限,所有者可更改,其他只可读取
权限对文件的作用
读取:cat、more、head、tail
写入:vi、echo,不包含删除权限
执行:可执行
注: echo 111 >> test.txts echo也是一个写入操作
权限对目录的作用
读:可以查看目录下的文件 (ls)
写: 具有修改目录结构的权限 (touch rm mv cp)
执行:可以进入目录(cd)
envsubst(配置文件模板替换)
假设应用程序下有如下配置文件application.properties
:
db.name=mysql
db.user=root
db.password=root
此时如果我想修改数据库用户和密码,需要使用vim打开文件,然后修改值再保存重启。但是如果当前目录下有100个类似的文件,这样的操作就很繁琐了(建议使用配置中心)。
所以,可以使用envsubst
命令,统一替换所有的配置文件,步骤如下:
# 建立application.properties的模板配置文件:application.template
db.name=${dbname}
db.user=${dbusername}
db.password=${dbpassword}
# 建立unified-config.conf文件,用于存放变量值
export dbname=mysql
export dbusername=root
export dbpassword=root
# 执行source unified-config.conf,将这些之定义为环境变量,这是环境变量中就会拥有这些值了
source unified-config.conf
# 执行envsubst命令
# 1. 加载application.template
# 2. 然后处理后再从管道流输出到application.properties中
envsubst < application.template > application.properties