系统操作命令
主要介绍基本的操作命令,用来进行日常的文件管理和使用操作。
-
ls:列举当前目录或者指定目录的文件列表
ls [options] <目录名称> -a(--all),列举所有文件,包括隐藏文件和../、./ -l(--list),长数据串行格式输出,包含档案属性等属性 -h(--human-readable),使用KB、MB、GB的单位输出 -s(--size),使用档案大小内容排序 -F(--classify),同时标示出档案、目录信息。*代表可执行、/代表目录、=代表socket档案、|代表FIFO档案 -R(--recursive):连同子目录内容一同输出 ls -alh #列举当前文件夹所有文件,并优化显示单位
-
cp:拷贝文件或目录,可以创建连接文件
cp [options] <源地址> <目的地址> cp [options] <目的目录地址> <源地址> ? -r(--recursive),迭代拷贝,同时拷贝目录下的所有文件 -a(--archive),拷贝的同时同步文件的基础信息、文件特性 -i(--interactive),拷贝覆盖源文件时会询问是否覆盖 -f(--force),当已存在相同文件时,先移除已有文件再拷贝 -l(--link),创建硬链接文件 -s(--symbolic-link),创建符号链接 cp -ri <源目录文件> <目标目录文件> #拷贝目录文件,覆盖前询问 cp -l <源文件> <目标文件> #创建文件的硬链接,目录文件不可以创建硬链接 cp -s <源文件> <目标文件> #创建文件的符号链接,目录文件也可以创建符号链接
-
rm:移除目标文件或目录
rm [options] <文件或目录> -f(--force),强制移除,若目标文件已存在则直接赋值 -i(--interactive),若文件已经存在,目标或变得越来越近,不会询问导致互相覆盖 -r(--recursive),递归删除 -v,显示执行细节 rm -rf <文件> #强制移除文件或文件夹
rmdir:移除空目录
rm [options] <目录文件> -p,递归执行,移除某个只含有空目录的空目录 -v,显示执行细节
-
mv:移动文件
mv [options]
-f(--force),强制移动,会直接覆盖同名的文件 -i,若存在同名文件则询问是否覆盖 -u,若存在同名文件则比较文件的更改时间,保留最新的 [mv无法移动目录,因为本身不具备迭代参数]
-
tar:基本压缩、解压命令(-c、-x、-t是三个不同功能;-j、-z是两个不同压缩引擎;注意不要混用)
tar [options] -f <压缩后文件> <压缩前文件> tar [options] -f <解压前文件> -C <解压后目录> -c,打包文件 -x,解打包或解包 -t,查询包中的文件内容 -j,通过bzip2进行压缩解压缩(后缀.bz2) -z,通过gzip进行压缩解压缩(后缀.gz) -v,显示压缩和解压执行细节 -f,指定压缩文件(压缩后文件或未解压文件) -C,指定目的文件路径 tar -cv<压缩引擎j/z>f <压缩后文件> <压缩前文件> #将文件压缩到指定路径 tar -xv<压缩引擎j/z>f <解压前文件> -C <解压后文件目录> #将文件解药到指定目录 tar -tv<压缩引擎j/z>f <压缩文件> #查看某压缩文件的内容 tar -cvjf ./test1.tar.bz2 ./test1 #将test压缩到test.tar.bz2 tar -xvzf ./test2.tar.gz -C ./ #将test2.tar.gz解压到当前目录下 tar -tvzf ./test3.tar.gz #查看test3.tar.gz压缩文件的内容
-
chmod:更改目录和文件的权限
linux的文件有三种不同的用户分别有三种不同的权限,不在此处讨论。
chmod [options]
file -R,递归执行 -v,输出执行细节 chmod -R +wx ./dir #为./dir这个目录文件递归地添加写入和执行权限 -
chown:更改文件或目录的所有者(change owner)
chown [options]
: -R,递归执行 -v,显示执行细节 chown -R root:root ./dir/ #将./dir目录的所以文件的拥有者和群组更改为root:root chown root ./file #将./file文件的拥有者更改为root [chgrp更改群组命令类似]
-
touch:创建新的空文件或修改文件的时间标签
若文件本身存在,则会自动切换为更换时间的功能
touch [options]
-a ,改变atime和ctime为当前时间 -t -
test:shell中常用的测试条件表达式
test也可以用中括号
[ ]
代替,他们是等价的,但是要注意参数之间要空格(test的参数非常多,此处介绍常用的一些)test [options] <目标> [ [options] <目标> ] #逻辑判断: -a,前后表达式同时成立,相当于逻辑与 -o,前后表达式满足一个,相当于逻辑或 #数值判断(整数): -eq,相等 -ge,大于等于 -le,小于等于 -gt,大于 -lt,小于 -ne,不等于 #字符串判断: -z,字符串长度为0 ==,相同 !=,不相同 #文件判断: -ef,判断两个文件是否指向同一个inode,判断同一个文件或硬链接 -nt,判断前者比后者新 -ot,判断前者比后者旧 -e,判断文件是否存在 -rwx,判断文件可读、可写、可执行 test 2 -gt 1 -a 1 -eq 1 #结果为True [ ! -z "nihao" -a -z "111" ] #结果为True
-
vim的常用快捷键
vim是在linux中十分常用的文本编辑器,因为其强大的功能以及复杂的配置,需要相当长时间的学习和使用才能真正掌握,此处只简单列举一些常用指令,方便我们简单地使用vim编辑工具。
先简单描述下vim,使用vim打开一个文本文件会有三种模式:一般模式、编辑模式、命令行模式。只有在编辑模式中我们才能修改和增添文本的内容,另外两个模式中会将输入作为某些命令执行。
- 一般模式:其他模式按
ESC
即可进入;光标可以在文本中移动,但是不可以编辑文本,键盘输入全部转换为内部命令并执行 - 编辑模式:一般模式按
i
即可进入;光标可以在文本中移动,可以编辑文本,不可以执行内部命令 - 命令模式:一般模式按
Shift + :
进入;光标在最底下的输入框内,不能移动光标,可以执行编辑器相关的命令(保存、退出、查找等命令)
[主要的常用快捷键都在一般模式中]
# 一般模式: d :删除光标所在上下左右的字符(方向键控制,上下会删除两行,左后会删除一个) dd :删除光标所在的一行 ndd :删除光标所在行及以下共n行 y :复制光标选中字符(同d方向键控制) yy :复制光标所在的一行 nyy :复制光标所在行及以下共n行 p :粘贴 v :选中字符,通过方向键控制选中范围 u :撤回 Ctrl + r:重做 0(zero) :移动到本行的开头 $ :移动到本行的尾部 / :向下搜索模式,进入搜索模式之后再输入搜索的关键字 ? :向上搜索模式,进入搜索模式之后再输入搜索的关键字 n :搜索模式查找下一个 N :搜索模式查找上一个 # 命令模式,部分可以组合使用 w :写入文件,可理解为保存 q :退出编辑器,默认不保存退出 e :将文件回退为未编辑状态 ! :强制执行(wq!为强制保存退出) w
:文本保存到另一个文件中,可理解为另存为 r :再当前光标下导入另一个文件的内容 set nu :显示行号 set nonu:不显示行号 - 一般模式:其他模式按
系统信息相关命令
主要介绍操作系统相关参数的命令,可以查看ip和端口连接状态、磁盘、cpu、内存等信息、相关服务信息的。
-
ifconfig:查看网卡配置信息
route:查看和设置linux的静态路由表
route [options] -C,查看Linux核心的路由缓存 -v,详细模式 -n,不执行DNS反查,直接显示数字形式的IP地址
route的路由设置
route add [路由条目] #添加一条静态路由 route del [路由条目] #删除一条存在的路由 -net [路由表],表示到一个网络的路由表 -host [路由表],表示到一个主机的路由表 netmask <掩码>,设置掩码 target <目标网络或主机>,目标网络或目标主机 gw <网关>,设置默认网关 dev <网卡>,指定网络接口 #为设备添加一条从某网卡到达192.168.0.0/24的路由 route add -net 192.168.0.0 netmask 255.255.255.0 dev <网卡> #为设备添加一条屏蔽172.16.0.0/16的规则 route add -net 172.16.0.0 netmask 255.255.0.0 reject #为设备删除一条屏蔽172.16.0.0/16的规则 route del -net 172.16.0.0 netmask 255.255.0.0 reject #为设备添加一个网关为192.168.0.254的规则 route add default gw 192.168.0.254
-
ps:显示当前运行的进程信息以及pid、cpu、内存信息(截取当前时间点的状况输出)
默认参数下只包含当前终端、当前用户的进程信息
ps [options] -a,显示所有终端的执行程序,和其他参数结合可以扩展其他参数范围 -u,显示当前用户的所有进程 -g,显示当前群组的所有进程 -c,显示当前进程相关的所有进程 -x,显示所有进程,不以终端机区分 -H,显示进程间的相互关系,树结构 ps -aux #显示所有正在内存中的程序,最常用的ps用法 ps -aHp
#显示某个pid程序的所有相关进程 对上面参数做简单的说明:
user :该进程属于哪个用户 PID :进程号 %CPU :占用CPU百分比 %MEN :占用物理内存百分比 VSZ :占用虚拟内存大小(KB) RSS :占用固定内存大小(KB) TTY :运行终端,?表示与终端无关(后台);tty表示本机的登入者;pts等其他表示网络连接进入的程序 STAT :表示进程的状态 START :表示进程触发时间 TIME :表示进程实际使用CPU的时间 COMMAND :表示该进程的实际指令
-
top:实时显示系统的资源占用情况,Linux常用的性能分析工具。点击
q
退出top [options] -H,开启线程查看,查看线程之间的相互关系 -p,指定某个pid的进程(-p
) -u,指定某个用户的进程(-u ) top #常用指令,不加任何参数 top -Hp #表示该pid的所以依赖进程 对上面参数做简单的说明:
第一个红色区块: 当前时间 登录的用户数量 系统平均负载:取1、5、15分钟系统平均负载 任务总数 running进程 sleeping进程 stoped进程 zombie进程 占用CPU:us(用户空间占用CPU) sy(内核占用CPU) ni id wa hi si st 物理内存占用:总量 空闲内存 使用中内存 缓存的内存量 Swap内存占用:总量 空间交换区内存 使用中交换区内存 缓冲的交换区内存量 第二个红色块区: PID :进程号 USER :进程所有者 PR :优先级 NI :nice值 VIRT :进程使用的虚拟内存量 RES :进程使用的未被换出的物理内存量 SHR :共享内存大小 S :进程状态 %CPU :占用CPU百分比 %MEM :占用物理内存百分比 TIME+ :进程使用的CPU时间合计 COMMAND :该进程的实际指令
-
netstat:显示linxu中的网络系统状态信息,可以查看端口和ip的连接状态
netstat [options] -a,显示所有连线中的Socket -t,显示tcp协议的连接状况 -u,显示udp协议的连接状况 -l(listening),显示监控中的服务器socket -p,显示每个socket对应的正在使用的程序名称 -n,直接使用ip+端口表示(默认使用域名+服务名) -r,显示routing table netstat -tunlp #显示所有正在侦听的tcp、udp连接,使用IP地址显示,并显示相关程序名称 netstat -an #列出所有连线中端口,包括所有类型侦听和非侦听端口情况,使用IP端口形式表示 netstat -r #显示路由表信息
-
stat:显示文件的状态信息
可以显示包括文件大小、占块大小、硬链接数量、权限、uid、最近访问、最近变更、最近改动时间
- 访问(atime):最后一次访问文件内容。
- 变更(mtime):文件内容被修改。
- 改动(ctime):文件目录被修改、文件所有者和权限被修改。
stat [options]
-L,支持符号链接,查看的是符号链接的文件状态(默认下回通过符号链接查看原文件状态) -f,显示文件系统状态而非文件状态 -t,简洁模式显示,直接列举各种参数,没有说明和排版,方便作为函数返回调用 -
df:显示系统磁盘设备信息
df [options] -a,包含所有文件系统 -h,使用易读方式输出结果 df -ah #易读方式显示系统的整体磁盘信息(文件系统、搭载目录、占用情况等)
du:对某个文件或目录查看磁盘空间占用情况(可查看多个文件或目录并统信息)
du [options] <文件或目录> -a,同时统计目录下的文件与目录容量 -h,易读方式显示 -s,仅列出总量 du -sh file1 file2 file3 #输出file1 2 3的磁盘占用统计信息 du -ah file1 dir1 #输出file1的磁盘占用信息和dir1的目录及内部统计信息
-
free:显示linux中空闲、已用的物理内存情况及swap内存信息
free [options] -b -k -m -g,以Byte、KB、MB、GB单位显示 -t,显示内存总和 free -m #显示内存和swap内存情况,使用MB单位表示
-
kill:向进程发送信号,可以用于终止进程
kill [-num]
-1(HUP),终端挂断 -2(INT),中断;同Crtl+c -3(QUIT),退出;同Ctrl+\ -9(KILL),强制终止 -15(TERM),正常终止 -18(CONT),继续;对应-19暂停 -19(STOP),暂停;对应-18继续 kill -19 2334 #暂停pid为2334的进程 kill -9 3455 #强制终止pid为3455的进程 [kill的默认参数是15,也就是正常终止]
用户相关命令
用户账号、口令、创建新用户等相关命令。
-
useradd:建立用户账号
useradd
[options] -g,指定用户所属群组 -G,指定加入的次要组 -u,指定用户id -m,自动建立用户的登入目录 -p,指定登录口令 -s,指定用户登录使用的shell useradd yonghu -g root -u 23333 -mp yonghu -s /bin/bash #建立一个新用户yonghu,设置uid为2333、群组为root、口令为用户,使用shell为/bin/bash,且自动建立用户家目录 #一个正常的用户起码需要有用户名、用户口令、家目录、群组、shell;即是至少需要pmgs这几个参数 [useradd在没有任何参数的情况下建立的是三无账号,无家目录、无密码、无系统shell;但是useradd可以通过参数补充相关信息]
[设置群组前先确认群组存在] -
usermod:修改用户信息
可以修改用户的各种信息
usermod [options] <用户名> -l <更改后用户名>,修改用户名 -L / -U,锁定/解锁用户,锁定后无法登入 -u <更改后uid>,修改uid -s
,更改用户shell -g <目标组群>,更改组群 -d <目标目录>,更改家目录,需要些完整路径 usermod -d /Documetn/test yonghu #将用户yonghu的家目录更改为/Documnet/test -
userdel:删除用户信息
userdel [options] <用户> -f,强制删除用户,删除用户相关的一切内容(一个危险参数不建议使用) -r,删除用户的家目录和邮件池
-
passwd:设置用户密码
passwd [options] <用户> -d,删除密码,只有系统管理员有权限 -f,强制执行 -l / -u,锁定/解锁密码 -s,列出密码相关信息
-
sudo:用其他身份执行之后的命令,默认使用root执行
sudo [options]
-u <用户>,指定执行命令的用户身份 -s,指定执行命令使用的shell -H,将HOME环境变量设置为新身份的环境变量 -b,后台执行命令 sudo -u yonghu -s /bin/bash move ./a ./b #使用yonghu身份通过bash执行move命令
搜索相关命令
linux中常用的搜索命令:which、whereis、locate、find
-
which:查找命令的绝对路径,只能找到PATH内所规范的目录的命令,bash内建命令和其他目录命令无法找到
which [options]
which pwd #查找pwd命令的路径 which java #查找java命令的路径 [which没有什么会影响搜索的参数]
-
whereis:查找二进制程序、源代码等相关文件路径,通过数据库查找
whereis [options]
-b,查找二进制文件 -B <目录>,查找目录下的二进制文件 -s,查找源代码文件 -S <目录>,查找目录下的源代码文件 -m,查找说明文件 -M <目录>,查找目录下的说明文件 whereis -b python #查找系统中python的二进制文件的路径 whereis svn #查找系统中svn的二进制、源代码和说明文件路径 whereis -B /usr/share tomcat #在/usr/share目录下查找tomcat命令的二进制文件 和find相比,whereis查找的速度非常快,这是因为linux系统会将 系统内的所有文件都记录在一个数据库文件中,当使用whereis和locate时,会从数据库中查找数据,而不是像find命令那样,通过遍历硬盘来查找,效率自然会很高。
但是该数据库文件并不是实时更新,默认情况下一星期更新一次,因此,我们在用whereis和locate 查找文件时,有时会找到已经被删除的数据,或者刚刚建立文件,却无法查找到,原因就是因为数据库文件没有被更新。
-
locate:文件查找工具,通过数据库查找
locate 让使用者可以很快速的搜寻档案系统内是否有指定的档案。其方法是先建立一个包括系统内所有档案名称及路径的数据库,之后当寻找时就只需查询这个数据库,而不必实际深入档案系统之中了。
locate [options] <目录> <样式> -n
,显示num条输出 -i,忽略大小写 locate /bin/share *.sh 搜索/bin/share目录下所有.sh结尾的文件 -
find:在指定目录下查找文件
用来在指定目录下查找文件。任何位于参数之前的字符串都将被视为欲查找的目录名。如果使用该命令时,不设置任何参数,则find命令将在当前目录下查找子目录与文件。并且将查找到的子目录和文件全部进行显示。
find <目录> [options] -i,忽略大小写 -name <样式>,按文件名查找,可以使用通配符 -type <样式>,按文件类型寻找(fdlsbcp七种文件类型) -size
,按文件大小寻找 -user <样式>,按文件拥有者寻找 -regex <样式>,使用正则表达式作为搜索样式 -maxdepth ,向下深度最大3层 -mindepth ,搜索当前目录至少两个子目录所有文件 ! [options],逻辑非,寻找不符合后面样式的文件 find / -iname "*.pdf" -user "yonghu" -maxdepth 3 #从根目录开始往下3层,搜索pdf结尾,且属于yonghu的文件和目录 [find命令的参数很多,只列举常用几个]