Linux系统小记

本文最后更新于:2021年10月10日 上午

Linux系统小记

系统目录结构

003vPl7Rty6E8kZRlAEdc&690

以下是对这些目录的解释:

  • /bin
    bin 是 Binaries (二进制文件) 的缩写, 这个目录存放着最经常使用的命令。

  • /boot:
    这里存放的是启动 Linux 时使用的一些核心文件,包括一些连接文件以及镜像文件。

  • /dev :
    dev 是 Device(设备) 的缩写, 该目录下存放的是 Linux 的外部设备,在 Linux 中访问设备的方式和访问文件的方式是相同的。

  • /etc:
    etc 是 Etcetera(等等) 的缩写,这个目录用来存放所有的系统管理所需要的配置文件和子目录。

  • /home
    用户的主目录,在 Linux 中,每个用户都有一个自己的目录,一般该目录名是以用户的账号命名的,如上图中的 alice、bob 和 eve。

  • /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。

登陆

一般来说,用户登陆方式有三种:

  • 命令行登陆
  • ssh登陆
  • 图形界面登陆

shutdown:关机

关机指令:shutdown

sync # 将数据由内存同步到硬盘
shutdown # 关机指令,可以使用man shutdown来看一下帮助文档
shutdown -h 10 # 10分钟后关机
shutdown -h now # 马上关机
shutdown -h 10:11 # 10点11分关机
shutdown -h +now # 十分钟后关机
shutdown -r now # 马上重启
shutdown -r +10 # 十分钟后重启
reboot # 重启
halt # 关闭系统

注:关机或重启之前要运行sync命令,把内存中的数据同写到磁盘

ls:列出目录

语法:ls [选项] [目录名称]

选项与参数:

  • -a:显示所有文件及目录,连同隐藏文件(以.开头)

  • -l:使用长格式列出文件及目录信息(包括文件的属性与权限等等数据)

cd:切换目录

cd:是change directory的缩写,该命令的功能是从当前目录切换到指定目录

语法:cd [相对路径或绝对路径]

cd /home # 切换到home目录
cd .. # 返回上一级目录
cd / # 回到根目录
cd ~ # 回到家目录

pwd:显示当前目录

pwd是print working directory的缩写,也就是显示当前工作目录的绝对路径

语法:pwd [参数]

pwd # 显示当前工作目录

mkdir:创建新目录

mkdir是“make directories”的缩写,用来创建目录。

语法:mkdir [选项] [目录]

  • -m:建立目录的同时设置目录的权限
  • -p:递归创建多级目录
mkdir codeanime #创建codenaime目录
mkdir -p test1/test2/test3/test4 #递归创建多层目录
mkdir -m 711 test2 # 创建权限为rwx--x--x的目录

rmdir:删除空目录

rmdir是remove directory的缩写,用来删除空目录

语法:rmdir [选项] [目录]

  • -p:用递归的方式删除指定的目录路径中的所有父级目录,非空则报错
rmdir -p test1 # 删除非空目录
rmdir test2 # 删除空目录

cp:复制文件或目录

cp是copy的缩写,用来复制文件或目录

语法:cp [选项] [文件或目录]

  • -p:保留源文件或目录的所有属性
  • -d:当复制符号连接时,把目标文件或目录也建立为符号连接,并指向与源文件或目录连接的原始文件或目录
  • -r:递归复制文件和目录(recursion)
  • -a:等价于-dpr选项
  • -f:为强制(force)的意思,若目标文件已存在,则会直接覆盖原文件
  • -i:若目标文件已存在,则会询问是否覆盖。(inquire)
  • -l:对源文件建立硬连接,而非复制文件
  • -s:对源文件建立符号连接,而非复制文件,(即捷径)
  • -u:当源文件比目标文件新,或者目标文件不存在时,才执行复制此操作
cp /root/install.sh /tmp/codeanime # 把root目录下的install.sh文件复制到/tmp/codeanime目录下

rm:移除文件或目录

rm是remove的缩写,用来移除文件或目录,即删除。

语法:rm [选项] [文件或目录]

  • -f:就是force的意思,忽略不存在的文件,不会出现警告信息
  • -i:删除前会询问用户是否操作
  • -r:递归删除(recursion)
rm /tmp/codenaime/install.sh # 删除/tmp/codeanime目录下的install.sh

mv:移动文件与目录(或修改名称)

mv是“move”单词的缩写,可以移动文件或对其改名。

语法:mv [选项]

  • -f:force强制,覆盖已有文件时,不进行任何提示
  • -i:inquire询问,若存在同名文件,则向用户询问是否覆盖
  • -u:当源文件比目标文件新,或者目标文件不存在时,才执行移动此操作
mv install.sh test # 移动当前目录下install.sh到本目录下的test文件夹下

chgrp:更改文件用户组

语法:chgrp [选型] [文件或目录]

  • -R:递归处理,将指定目录下的所有文件及子目录一并处理(recursion)
chgrp -R root install.sh # 更改文件install.sh的组为root

chown:改变文件或目录用户和用户组

语法:chown [选项]

  • -R:对目前目录下的所有文件与子目录进行相同的拥有者变更
chown root install.sh # 更改文件install.sh用户为root

chmod:改变文件或目录权限

语法:chmod [选项] [文件或文件夹]

  • -R:对目前目录下的所有文件与子目录进行相同的权限变更(即以递回的方式逐个变更)
chmod 770 install.sh # 改变install.sh的权限为770,即-rwx-rwx---

cat:由第一行开始显示文本内容

语法:cat [选项] [文件]

  • -n:显示行数(空行也编号)
  • -b:显示行数(空行不编号)
  • -E:每行结束处显示$符号
  • -T:将TAB字符显示为 ^I符号
  • -v:使用 ^ 和 M- 引用,除了 LFD 和 TAB 之外
  • -e:等价于”-vE”组合
  • -t:等价于”-vT”组合
  • -A:等价于 -vET组合
cat -A install.sh # 查看instal.sh

tac:与cat相反

文件内容从最后一行开始显示,可以看出tac是cat倒着写的

tac -A install.sh # 查看instal.sh

nl:添加行号

语法:nl [选项] [文件]

  • -b:指定行号指定的方式。主要有两种:-b a表示无论为空行,也同样列出行号(类似cat -n);-b t如果有空行,空的那一行不要列出行号(默认值)
  • -n:列出行号表示的方式。主要有三种:-n ln:行号在荧幕的的最左方显示;-n rn:行号在自己栏位的最右方显示,且不加0;-n rz:行号在自己栏位的最右方显示,且加0;
  • -w:行号栏位的占用的位数
nl -n ln install.sh
nl -b t install.sh
nl -w 10 install.sh # 行号占位10位

more:显示文本文件内容

语法:more [文件]

# 空格键:向下翻一页
# Enter键:向下翻一行
# /字串:在这个显示的内容中,向下搜寻“字串”这个关键字
# :f:立刻显示出档名中以及显示的行数
# q:立刻离开more,不再显示该文件内容
# b或[ctrl]-b:往回翻页,只对文件有用,对管线无用
# H键:显示帮助屏
# B键:显示上一屏内容
# Q键:退出more命令
# Ctrl+F、空格键:向下滚动一屏
# Ctrl+B:返回上一屏
# =: 输出当前的行号
# V:调用vi编辑器
# !:调用Shell,并执行命令
more install.sh

less:一页一页滚动

语法:less [文件]

# PageUp键向上翻页
# PageDown键向下翻页
# q:退出less程序
# 空格键:向下翻动一页
# /字串:向下搜寻“字串”
# ?字串:向上搜寻“字串”
# n:重复前一个搜寻(与/或?有关)
# N:反向的重复前一个搜寻(与/或?有关)
less install.sh

head:取出文件前面几行

语法:head [选项] [文件]

  • -n后面跟数字,代表显示几行
head -n10 install.sh # 显示文件前十行

tail:取出文件后几行

语法:tail [选项] [文件]

  • -n后面接数字,代表显示几行

默认显示最后10行。

tail -n20 install.sh # 显示文件最后20行

ln:为文件创建链接

ln英文全称是“link”,即链接的意思,它的功能是为某一个文件在另外一个位置建立一个同步的链接。 一种是hard link,又称为硬链接;另一种是symbolic link,又称为符号链接。

通俗一点理解,可以把硬链接当成源文件的副本,他和源文件一样的大小,但是事实上却不占任何空间。符号链接可以理解为类似windows一样的快捷方式。

符号链接 :

  • 符号链接以路径的形式存在,类似于Windows操作系统中的快捷方式。
  • 符号链接可以跨文件系统 ,硬链接不可以。
  • 符号链接可以对一个不存在的文件名进行链接,硬链接不可以。
  • 符号链接可以对目录进行链接,硬链接不可以。

硬链接:

  • 硬链接以文件副本的形式存在,但不占用实际空间。
  • 硬链接不允许给目录创建硬链接。
  • 硬链接只有在同一个文件系统中才能创建。

语法格式: ln [选项] [源文件或目录] [目标文件或目录]

  • -b:为每个已存在的目标文件创建备份文件
  • -f:强制创建链接,即使目标文件已经存在
  • -n:把指向目录的符号链接视为一个普通文件
  • -i:交互模式,若目标文件已经存在,则提示用户确认进行覆盖
  • -s:对源文件建立符号链接,而非硬链接
ln -b install.sh # 创建备份文件
ln install.sh install2.sh # 创建install.sh的硬链接文件install2.sh
ln -s install.sh install3.sh # 创建install.sh的符号链接文件install3.sh

useradd:创建用户

语法:useradd [选项] [用户名]

  • -c:添加备注文字(comment)
  • -d:目录,新用户每次登陆时所使用的家目录,如果此目录不存在,则同时使用-m选项,可以创建主目录
  • -g:指定用户对应的用户组
  • -G:定义此用户为多个不同组的成员
  • -m:用户目录不存在时则自动创建
  • -s:Shell文件 指定用户的登录Shell
  • -u:指定用户id
useradd -m codeanime # 创建一个用户为codeanime,其中-m为用户codeanime产生一个主目录/home/codeanime

增加用户账号就是在/etc/passwd文件中为新用户增加一条记录,同时更新其他系统文件如/etc/shadow,.etc/group等。

su:切换用户名

语法:su [用户名]

sudo su # 从普通用户切换到root用户
exit或logout或快捷方式ctrl+d #退回到原来的用户
su - root # 在切换用户时,如果想在切换用户之后使用新用户的工作环境,可以在su和username之间加-
$表示普通用户
#表示超级用户,即root用户

userdel:删除账号

语法:userdel [选项] [用户名]

  • -r:把用户的主目录一起删除

如果一个用户的账号不再使用,可以从系统中删除。

删除用户账号就是要将/etc/passwd等系统文件中的该用户记录删除,必要时还删除用户的主目录。

userdel codeanime # 删除codeanime账户
userdel -r codeanime # 此命令删除用户codeanime在系统文件中(主要是/etc/passwd, /etc/shadow, /etc/group等)的记录,同时删除用户的主目录。

usermod:修改账号

语法:usermod [选项] [账号]

常用的选项包括-c, -d, -m, -g, -G, -s, -u以及-o等,这些选项的意义与useradd命令中的选项一样,可以为用户指定新的资源值。

usermod -s /bin/code -d /home/co –g developer codeanime # 此命令将用户codeanime修改为code,主目录改为/home/co,用户组改为developer。

passwd:修改用户账户密码

语法:passwd [选项] [用户名]

  • -l:锁定用户密码,无法被用户自行修改
  • -u:解开已锁定用户密码,允许用户自行修改
  • -d:删除密码
  • -f:强迫用户下次登录时修改密码
passwd # 修改密码
passwd codeanime # 修改codeanime用户密码
passwd -d codeanime # 删除codeanime用户的密码,下次用户codeanime登陆时,系统不再允许codeanime用户登陆
passwd -l codeanime # 锁定codeanime用户,使其不能登陆

groupadd:新建工作组

用户组的管理涉及用户组的添加、删除和修改。组的增加、删除和修改实际上就是对/etc/group文件的更新

语法:groupaddd [选项] [用户组]

  • -g:指定新建工作组的id
  • -o:允许添加组ID号不唯一的工作组
groupadd group1 # 向系统增加了一个group1新组,新组的组标识号是在当前已有的最大组标识号的基础上加1
groupadd -g 101 group2 # 此命令向系统中增加了一个新组group2,同时指定新组的组标识号是101

groupdel:删除用户组

语法:groupdel [选项] [群组名称]

groupdel group1 # 删除用户组group1

groupmod:更改群组识别码或名称

语法:groupmod [选项] [用户组]

  • -g:设置欲使用的群组识别码
  • -o:重复使用群组识别码
  • -n:设置欲使用的群组名称
groupmod -g 102 group2 # 此命令将组group2的组标识号修改为102
groupmod –g 103 -n group3 group2 # 将组group2的标识号改为103,组名修改为group3

newgrp:登入另一个群组

newgrp命令类的英文全称为“new group”,该命令类似login指令,当它是以相同的帐号,另一个群组名称,再次登入系统。欲使用newgrp指令切换群组,您必须是该群组的用户,否则将无法登入指定的群组。

单一用户要同时隶属多个群组,需利用交替用户的设置。若不指定群组名称,则newgrp指令会登入该用户名称的预设群组

语法:newgrp [选项]

newgrp root # 将当前用户切换到root用户组,前提条件是root用户组确实是该用户的主组或附加组

df:显示磁盘空间使用情况

df命令的英文全称即“Disk Free”,顾名思义功能是用于显示系统上可使用的磁盘空间。默认显示单位为KB,建议使用“df -h”的参数组合,根据磁盘容量自动变换合适的单位,更利于阅读

语法:df [选项] [目录或文件]

  • -a:显示所有系统文件
  • -k:以 KBytes 的容量显示各文件系统
  • -m:以 MBytes 的容量显示各文件系统
  • -h:以容易阅读的方式显示
  • -H:以1000字节为换算单位来显示
  • -T:输出时显示文件系统类型
  • -i:显示索引字节信息,不用硬盘容量,而以 inode 的数量来显示
df -h # 以容易阅读的方式显示
df -aT # 将系统内的所有特殊文件格式及名称都列出来
df -h /etc #  将 /etc 底下的可用的磁盘容量以易读的容量格式显示

du:查看空间

du命令的英文全称是“Disk Usage”,即用于查看磁盘占用空间的意思。但是与df命令不同的是du命令是对文件和目录磁盘使用的空间的查看,而不是某个分区,与 df 不一样的是,du 这个命令其实会直接到文件系统内去搜寻所有的文件数据

语法:du [选项] [文件]

  • -a:显示目录中所有文件大小
  • -h:以易读方式显示文件大小
  • -s:仅显示总计
  • -S:不包括子目录下的总计,与 -s 有点差别
  • -k:以KB为单位显示文件大小
  • -m:以MB为单位显示文件大小
du # 直接输入 du 没有加任何选项时,则 du 会分析当前所在目录的文件与目录所占用的硬盘空间
du -a # 将文件的容量也列出来
du -sm /* # 检查根目录底下每个目录所占用的容量,通配符 * 来代表每个目录

mount:文件系统挂载

语法:mount [选项]

mount /dev/hdc6 /mnt/hdc6 # 将 /dev/hdc6 挂载到 /mnt/hdc6 上面

umount:卸载文件系统

语法:umount [选项] [装置文件名或挂载点]

  • -f:强制卸除!可用在类似网络文件系统 (NFS) 无法读取到的情况下
  • -n:不升级 /etc/mtab 情况下卸除
umount /dev/hdc6 # 卸载/dev/hdc6