shell基础命令
浏览Linux 文件系统
Linux 系统目录结构
-
/bin: bin 是 Binaries (二进制文件) 的缩写, 这个目录存放着最经常使用的命令。
-
/boot: 这里存放的是启动 Linux 时使用的一些核心文件,包括一些连接文件以及镜像文件。
-
/dev : dev 是 Device(设备) 的缩写, 该目录下存放的是 Linux 的外部设备,在 Linux 中访问设备的方式和访问文件的方式是相同的。
-
/etc: etc 是 Etcetera(等等) 的缩写,这个目录用来存放所有的系统管理所需要的配置文件和子目录。
-
/home: 用户的主目录,在 Linux 中,每个用户都有一个自己的目录,一般该目录名是以用户的账号命名的
-
/lib: lib 是 Library(库) 的缩写这个目录里存放着系统最基本的动态连接共享库,其作用类似于 Windows 里的 DLL 文件。几乎所有的应用程序都需要用到这些共享库。
-
/lost+found: 这个目录一般情况下是空的,当系统非法关机后,这里就存放了一些文件。
-
/media: linux 系统会自动识别一些设备,例如U盘、光驱等等,当识别后,Linux 会把识别的设备挂载到这个目录下。
-
/mnt: 系统提供该目录是为了让用户临时挂载别的文件系统的,我们可以将光驱挂载在 /mnt/ 上,然后进入该目录就可以查看光驱里的内容了。
-
/opt: opt 是 optional(可选) 的缩写,这是给主机额外安装软件所摆放的目录。比如你安装一个ORACLE数据库则就可以放到这个目录下。默认是空的。
-
/proc: proc 是 Processes(进程) 的缩写,/proc 是一种伪文件系统(也即虚拟文件系统),存储的是当前内核运行状态的一系列特殊文件,这个目录是一个虚拟的目录,它是系统内存的映射,我们可以通过直接访问这个目录来获取系统信息。 这个目录的内容不在硬盘上而是在内存里,我们也可以直接修改里面的某些文件,比如可以通过下面的命令来屏蔽主机的ping命令,使别人无法ping你的机器:
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all
-
/root: 该目录为系统管理员,也称作超级权限者的用户主目录。
-
/sbin: s 就是 Super User 的意思,是 Superuser Binaries (超级用户的二进制文件) 的缩写,这里存放的是系统管理员使用的系统管理程序。
-
/selinux: 这个目录是 Redhat/CentOS 所特有的目录,Selinux 是一个安全机制,类似于 windows 的防火墙,但是这套机制比较复杂,这个目录就是存放selinux相关的文件的。
-
/srv: 该目录存放一些服务启动之后需要提取的数据。
-
/sys:
这是 Linux2.6 内核的一个很大的变化。该目录下安装了 2.6 内核中新出现的一个文件系统 sysfs 。
sysfs 文件系统集成了下面3种文件系统的信息:针对进程信息的 proc 文件系统、针对设备的 devfs 文件系统以及针对伪终端的 devpts 文件系统。
该文件系统是内核设备树的一个直观反映。
当一个内核对象被创建的时候,对应的文件和目录也在内核对象子系统中被创建。
-
/tmp: tmp 是 temporary(临时) 的缩写这个目录是用来存放一些临时文件的。
-
/usr: usr 是 unix shared resources(共享资源) 的缩写,这是一个非常重要的目录,用户的很多应用程序和文件都放在这个目录下,类似于 windows 下的 program files 目录。
-
/usr/bin: 系统用户使用的应用程序。
-
/usr/sbin: 超级用户使用的比较高级的管理程序和系统守护程序。
-
/usr/src: 内核源代码默认的放置目录。
-
/var: var 是 variable(变量) 的缩写,这个目录中存放着在不断扩充着的东西,我们习惯将那些经常被修改的目录放在这个目录下。包括各种日志文件。
-
/run: 是一个临时文件系统,存储系统启动以来的信息。当系统重启时,这个目录下的文件应该被删掉或清除。如果你的系统上有 /var/run 目录,应该让它指向 run。
列出文件和目录
显示基本列表
#遍历目录 ls / #显示吟唱文件 ls -a #递归显示:列出当前目录所包含的子目录的文件 ls -r
显示长列表
ls -l
过滤输出列表
?代表任意单个字符
*代表零个或多个字符
!表示将不需要的排除再外
ls -l h?me ls -l h* ls -l h[!o]me
处理文件
创建文件
touch testone
复制文件
cp testone testtwo #如果目标文件存在相同文件将强制覆盖 cp -i testone testtwo #如果目标文件存在,则询问是否覆盖
使用命令补全
按制表键 teb可以补全文件名,单需要提供足够的文件名信息
链接文件
符号链接(软连接):是一个实实在在的文件指向另一个地方的 另一个文件,以符号连接在一起的文件其内容并不相同。
创建一个软链接,其原文件必须事先存在
in -s test_file shink_test_file
硬链接:创建的是一个独立的虚拟文件,其中包含了原始文件的信息及位置。但两者根本就是同一个文件。
创建一个硬链接,其原文件必须事先存在。
in test_one hlink_test_one
文件重命名(移动文件)mv
mv命令不会修改文件的innode编号和时间戳
mv fall fazll #修改文件名字,由fall修改为fazll, mv /home/fall /home/tep #移动文件fall到tep目录下
删除文件(移除)rm
rm -i fall #删除文件并进行询问,不加-i就不询问,linux无回收站删除后无法找回
管理目录
创建目录 mkdir
mkdir new_dir mkdir -p /home/tep/test/new_dir #-p可以根据根据需要创建目录和子目录
删除目录 rmkdir
rmkdir new_dir #rmkdir只能删除空目录,如果其下有内容无法进行删除 rmkdir -r new_dir #删除 new_dir目录下的子文件并挨个询问 rmkdir -rf new_dir #直接删除指定目录及其所有内容
查看文件类型 file
file myfile
查看整个文件
cat
cat缺点;开始运行后无法控制后续操作
cat test_file cat -n test_file #给所有行加上行号
more
more /home/test_file
more分页查看文件内容,使用空格向前翻页,使用回车逐行查看,按q键退出。
查看部分文件
tail (显示结尾)
tail log_file #默认显示文件最后10行内容 tail -n 20 log_file #-n修改显示行数 查看最后20行内容 tail -f 20 log_file #-f,保持活动状态,并持续的显示添加到文件中的内容。
head(显示开头)
head logfile head -n 20 logfile #-n修改显示行数 查看前20行内容
监测系统及磁盘
监测程序
探测进程
ps
语法
ps [options] [--help]
参数:
-
ps 的参数非常多, 在此仅列出几个常用的参数并大略介绍含义
-
-A 列出所有的进程
-
-w 显示加宽可以显示较多的资讯
-
-au 显示较详细的资讯
-
-aux 显示所有包含其他使用者的进程
-
au(x) 输出格式 :
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
-
USER: 行程拥有者
-
PID: pid
-
%CPU: 占用的 CPU 使用率
-
%MEM: 占用的记忆体使用率
-
VSZ: 占用的虚拟记忆体大小
-
RSS: 占用的记忆体大小
-
TTY: 终端的次要装置号码 (minor device number of tty)
-
STAT: 该行程的状态:
-
D: 无法中断的休眠状态 (通常 IO 的进程)
-
R: 正在执行中
-
S: 静止状态
-
T: 暂停执行
-
Z: 不存在但暂时无法消除
-
W: 没有足够的记忆体分页可分配
-
<: 高优先序的行程
-
N: 低优先序的行程
-
L: 有记忆体分页分配并锁在记忆体内 (实时系统或捱A I/O)
-
-
START: 行程开始时间
-
TIME: 执行的时间
-
COMMAND:所执行的指令
-
查找指定进程格式:
ps -ef | grep 进程关键字
例如显示 php 的进程:
# ps -ef | grep php root 794 1 0 2020 ? 00:00:52 php-fpm: master process (/etc/php/7.3/fpm/php-fpm.conf) www-data 951 794 0 2020 ? 00:24:15 php-fpm: pool www www-data 953 794 0 2020 ? 00:24:14 php-fpm: pool www www-data 954 794 0 2020 ? 00:24:29 php-fpm: pool www
top
语法
top [-] [d delay] [q] [c] [S] [s] [i] [n] [b]
参数说明:
-
d : 改变显示的更新速度,或是在交谈式指令列( interactive command)按 s
-
q : 没有任何延迟的显示速度,如果使用者是有 superuser 的权限,则 top 将会以最高的优先序执行
-
c : 切换显示模式,共有两种模式,一是只显示执行档的名称,另一种是显示完整的路径与名称
-
S : 累积模式,会将己完成或消失的子进程 ( dead child process ) 的 CPU time 累积起来
-
s : 安全模式,将交谈式指令取消, 避免潜在的危机
-
i : 不显示任何闲置 (idle) 或无用 (zombie) 的进程
-
n : 更新的次数,完成后将会退出 top
-
b : 批次档模式,搭配 "n" 参数一起使用,可以用来将 top 的结果输出到档案内
实例
显示进程信息
# top
显示完整命令
# top -c
结束进程
kill
kill [-s <信息名称或编号>][程序] 或 kill [-l <信息编号>]
参数说明:
-
-l <信息编号> 若不加<信息编号>选项,则 -l 参数会列出全部的信息名称。
-
-s <信息名称或编号> 指定要送出的信息。
-
[程序] [程序]可以是程序的PID或是PGID,也可以是工作编号。
使用 kill -l 命令列出所有可用信号。
最常用的信号是:
-
1 (HUP):重新加载进程。
-
9 (KILL):杀死一个进程。
-
15 (TERM):正常停止一个进程。
实例
杀死进程
# kill 12345
pkill
Linux pkill 用于杀死一个进程,与 kill 不同的是它会杀死指定名字的所有进程,类似于 killall 命令。
kill 命令杀死指定进程 PID,需要配合 ps 使用,而 pkill 直接对进程对名字进行操作,更加方便。
语法
pkill [选项] name
参数说明:
-
name : 进程名
选项包含如下几个参数:
-
-o 仅向找到的最小(起始)进程号发送信号 -n 仅向找到的最大(结束)进程号发送信号
-
-P 指定父进程号发送信号
-
-g 指定进程组
-
-t 指定开启进程的终端
实例
# pkill -9 php-fpm //结束所有的 php-fpm 进程
监测空间
Linux 磁盘管理常用三个命令为 df、du 和 fdisk。
-
df(英文全称:disk free):列出文件系统的整体磁盘使用量
-
du(英文全称:disk used):检查磁盘空间使用量
-
fdisk:用于磁盘分区
df(文件目录)
df命令参数功能:检查文件系统的磁盘空间占用情况。可以利用该命令来获取硬盘被占用了多少空间,目前还剩下多少空间等信息。
语法:
df [-ahikHTm] [目录或文件名]
选项与参数:
-
-a :列出所有的文件系统,包括系统特有的 /proc 等文件系统;
-
-k :以 KBytes 的容量显示各文件系统;
-
-m :以 MBytes 的容量显示各文件系统;
-
-h :以人们较易阅读的 GBytes, MBytes, KBytes 等格式自行显示;
-
-H :以 M=1000K 取代 M=1024K 的进位方式;
-
-T :显示文件系统类型, 连同该 partition 的 filesystem 名称 (例如 ext3) 也列出;
-
-i :不用硬盘容量,而以 inode 的数量来显示
du(空间)
Linux du 命令也是查看使用空间的,但是与 df 命令不同的是 Linux du 命令是对文件和目录磁盘使用的空间的查看,还是和df命令有一些区别的,这里介绍 Linux du 命令。
语法:
du [-ahskm] 文件或目录名称
选项与参数:
-
-a :列出所有的文件与目录容量,因为默认仅统计目录底下的文件量而已。
-
-h :以人们较易读的容量格式 (G/M) 显示;
-
-s :列出总量而已,而不列出每个各别的目录占用容量;
-
-S :不包括子目录下的总计,与 -s 有点差别。
-
-k :以 KBytes 列出容量显示;
-
-m :以 MBytes 列出容量显示;
fdisk
fdisk 是 Linux 的磁盘分区表操作工具。
语法:
fdisk [-l] 装置名称
选项与参数:
-
-l :输出后面接的装置所有的分区内容。若仅有 fdisk -l 时, 则系统将会把整个系统内能够搜寻到的装置的分区均列出来。
处理数据文件
数据排序 sort
Linux sort 命令用于将文本文件内容加以排序。
sort 可针对文本文件的内容,以行为单位来排序。
语法
sort [-bcdfimMnr][-o<输出文件>][-t<分隔字符>][+<起始栏位>-<结束栏位>][--help][--verison][文件][-k field1[,field2]]
参数说明:
-
-b 忽略每行前面开始出的空格字符。
-
-c 检查文件是否已经按照顺序排序。
-
-d 排序时,处理英文字母、数字及空格字符外,忽略其他的字符。
-
-f 排序时,将小写字母视为大写字母。
-
-i 排序时,除了040至176之间的ASCII字符外,忽略其他的字符。
-
-m 将几个排序好的文件进行合并。
-
-M 将前面3个字母依照月份的缩写进行排序。
-
-n 依照数值的大小排序。
-
-u 意味着是唯一的(unique),输出的结果是去完重了的。
-
-o<输出文件> 将排序后的结果存入指定的文件。
-
-r 以相反的顺序来排序。
-
-t<分隔字符> 指定排序时所用的栏位分隔字符。
-
+<起始栏位>-<结束栏位> 以指定的栏位来排序,范围由起始栏位到结束栏位的前一栏位。
-
--help 显示帮助。
-
--version 显示版本信息。
-
[-k field1[,field2]] 按指定的列进行排序。
数据搜索 grep
grep 命令用于查找文件里符合条件的字符串。
grep 指令用于查找内容包含指定的范本样式的文件,如果发现某文件的内容符合所指定的范本样式,预设 grep 指令会把含有范本样式的那一列显示出来。若不指定任何文件名称,或是所给予的文件名为 -,则 grep 指令会从标准输入设备读取数据。
语法
grep [-abcEFGhHilLnqrsvVwxy][-A<显示行数>][-B<显示列数>][-C<显示列数>][-d<进行动作>][-e<范本样式>][-f<范本文件>][--help][范本样式][文件或目录...]
参数:
-
-a 或 --text : 不要忽略二进制的数据。
-
-A<显示行数> 或 --after-context=<显示行数> : 除了显示符合范本样式的那一列之外,并显示该行之后的内容。
-
-b 或 --byte-offset : 在显示符合样式的那一行之前,标示出该行第一个字符的编号。
-
-B<显示行数> 或 --before-context=<显示行数> : 除了显示符合样式的那一行之外,并显示该行之前的内容。
-
-c 或 --count : 计算符合样式的列数。
-
-C<显示行数> 或 --context=<显示行数>或-<显示行数> : 除了显示符合样式的那一行之外,并显示该行之前后的内容。
-
-d <动作> 或 --directories=<动作> : 当指定要查找的是目录而非文件时,必须使用这项参数,否则grep指令将回报信息并停止动作。
-
-e<范本样式> 或 --regexp=<范本样式> : 指定字符串做为查找文件内容的样式。
-
-E 或 --extended-regexp : 将样式为延伸的正则表达式来使用。
-
-f<规则文件> 或 --file=<规则文件> : 指定规则文件,其内容含有一个或多个规则样式,让grep查找符合规则条件的文件内容,格式为每行一个规则样式。
-
-F 或 --fixed-regexp : 将样式视为固定字符串的列表。
-
-G 或 --basic-regexp : 将样式视为普通的表示法来使用。
-
-h 或 --no-filename : 在显示符合样式的那一行之前,不标示该行所属的文件名称。
-
-H 或 --with-filename : 在显示符合样式的那一行之前,表示该行所属的文件名称。
-
-i 或 --ignore-case : 忽略字符大小写的差别。
-
-l 或 --file-with-matches : 列出文件内容符合指定的样式的文件名称。
-
-L 或 --files-without-match : 列出文件内容不符合指定的样式的文件名称。
-
-n 或 --line-number : 在显示符合样式的那一行之前,标示出该行的列数编号。
-
-o 或 --only-matching : 只显示匹配PATTERN 部分。
-
-q 或 --quiet或--silent : 不显示任何信息。
-
-r 或 --recursive : 此参数的效果和指定"-d recurse"参数相同。
-
-s 或 --no-messages : 不显示错误信息。
-
-v 或 --invert-match : 显示不包含匹配文本的所有行。
-
-V 或 --version : 显示版本信息。
-
-w 或 --word-regexp : 只显示全字符合的列。
-
-x --line-regexp : 只显示全列符合的列。
-
-y : 此参数的效果和指定"-i"参数相同。
实例
1、在当前目录中,查找后缀有 file 字样的文件中包含 test 字符串的文件,并打印出该字符串的行。此时,可以使用如下命令:
grep test *file
数据压缩 gzip gzcat gunzip
gzip:压缩文件
gzcat:查看文件
gunzip:用于解压文件
数据归档 tar
tar 命令的选项有很多(用 man tar 可以查看到),但常用的就那么几个选项,下面来举例说明一下:
# tar -cf all.tar *.jpg
这条命令是将所有 .jpg 的文件打成一个名为 all.tar 的包。-c 是表示产生新的包,-f 指定包的文件名。
# tar -rf all.tar *.gif
这条命令是将所有 .gif 的文件增加到 all.tar 的包里面去,-r 是表示增加文件的意思。
# tar -uf all.tar logo.gif
这条命令是更新原来 tar 包 all.tar 中 logo.gif 文件,-u 是表示更新文件的意思。
# tar -tf all.tar
这条命令是列出 all.tar 包中所有文件,-t 是列出文件的意思。
# tar -xf all.tar
这条命令是解出 all.tar 包中所有文件,-x 是解开的意思。
忘记密码解决方法
1、重启系统,3s内按下回车按钮,然后输入e
2、第二行后面输入 single,有一个空格。具体方法为按向下尖头移动到第二行,按"e"进入编辑模式
在后边加上single 回车
3、最后按"b"启动,启动后就进入了单用户模式了
4、进入到单用户模式了,你可以更改root密码了。更密码的命令为 passwd
文件基本属性
通常使用以下两个命令来修改文件或目录的所属用户与权限:
-
chown (change owner) : 修改所属用户与组。
-
chmod (change mode) : 修改用户的权限。
在 Linux 中第一个字符代表这个文件是目录、文件或链接文件等等。
-
当为 d 则是目录
-
当为 - 则是文件;
-
若是 l 则表示为链接文档(link file);
-
若是 b 则表示为装置文件里面的可供储存的接口设备(可随机存取装置);
-
若是 c 则表示为装置文件里面的串行端口设备,例如键盘、鼠标(一次性读取装置)