目录操作

Linux 默认目录结构

以下为 Linux 系统默认的目录结构,加粗部分为比较重要的目录,平时应注意不要误删。

  • /bin:bin 是 Binary 的缩写,这个目录存放着最经常使用的命令。
  • /boot:这里存放的是启动 Linux 时使用的一些核心文件,包括一些连接文件以及镜像文件。
  • /dev:dev 是 Device(设备) 的缩写,该目录下存放的是Linux的外部设备,在Linux中访问设备的方式和访问文件的方式是相同的。
  • /etc:这个目录用来存放所有的系统管理所需要的配置文件和子目录。
  • /home:用户的主目录,在Linux中,每个用户都有一个自己的目录,一般该目录名是以用户的账号命名的。
  • /lib:这个目录里存放着系统最基本的动态连接共享库,其作用类似于Windows里的DLL文件。几乎所有的应用程序都需要用到这些共享库。
  • /lost+found:这个目录一般情况下是空的,当系统非法关机后,这里就存放了一些文件。
  • /media:linux系统会自动识别一些设备,例如U盘、光驱等等,当识别后,linux会把识别的设备挂载到这个目录下。
  • /mnt:系统提供该目录是为了让用户临时挂载别的文件系统的,我们可以将光驱挂载在/mnt/上,然后进入该目录就可以查看光驱里的内容了。
  • /opt:这是给主机额外安装软件所摆放的目录。比如你安装一个ORACLE数据库则就可以放到这个目录下。默认是空的。
  • /proc:这个目录是一个虚拟的目录,它是系统内存的映射,我们可以通过直接访问这个目录来获取系统信息。这个目录的内容不在硬盘上而是在内存里,我们也可以直接修改里面的某些文件,比如可以通过下面的命令来屏蔽主机的ping命令,使别人无法ping你的机器:echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all
  • /root:该目录为系统管理员,也称作超级权限者的用户主目录。
  • /sbin:s 就是 Super User 的意思,这里存放的是系统管理员使用的系统管理程序。
  • /selinux:这个目录是 Redhat/CentOS 所特有的目录,Selinux 是一个安全机制,类似于 windows 的防火墙,但是这套机制比较复杂,这个目录就是存放selinux相关的文件的。
  • /srv:该目录存放一些服务启动之后需要提取的数据。
  • /sys:这是 linux2.6 内核的一个很大的变化。该目录下安装了2.6内核中新出现的一个文件系统 sysfs。sysfs 文件系统集成了下面 3 种文件系统的信息:针对进程信息的 proc 文件系统、针对设备的 devfs 文件系统以及针对伪终端的 devpts 文件系统。该文件系统是内核设备树的一个直观反映。当一个内核对象被创建的时候,对应的文件和目录也在内核对象子系统中被创建。
  • /tmp:这个目录是用来存放一些临时文件的。
  • /usr:这是一个非常重要的目录,用户的很多应用程序和文件都放在这个目录下,类似于windows下的program files目录。
    • /usr/bin:系统用户使用的应用程序。
    • /usr/sbin:超级用户使用的比较高级的管理程序和系统守护程序。
    • /usr/src:内核源代码默认的放置目录。
  • /var:这个目录中存放着在不断扩充着的东西,我们习惯将那些经常被修改的目录放在这个目录下。包括各种日志文件。

Linux 特殊目录表示

在 Linux 或 Unix 操作系统中,所有的文件和目录都被组织成以一个根节点开始的倒置的树状结构。

  • /:代表根目录
  • .:代表当前的目录,也可以使用 ./ 来表示
  • ..:代表上一层目录,也可以 ../ 来代表
  • ~:用户默认登录后进入的就是 ~,为用户主目录,一般用来存放用户的文件
  • .目录或文件名:表示这个目录或文件是一个隐藏目录或文件

创建目录

使用 mkdir 命令创建目录,如:

mkdir $HOME/test

$HOME~ 用户主目录,一般用户的主目录在 /home 下,比如用户 user 的主目录就是 /home/user,可以用 ~user 表示;而系统管理员的主目录在 /root
可以 echo $HOME 查看当前的 $HOME 目录是什么。

切换目录

使用 cd 命令切换目录

  • 切换到指定目录:cd $HOME/test
  • 切换到上一级目录:cd ../cd ..
  • 进入根目录/cd /
  • 进入用户主目录~:cd ~

移动目录

使用 mv 命令移动目录

mv $HOME/test /var/tmp

前面为要移动的目录位置,后面为要移动到哪个目录下。

删除目录

使用 rm -rf 命令删除目录,如:

rm -rf /var/tmp/testFolder

参数:

  • -f : 强制删除文件或目录,不进行提醒
  • -r-R :递归处理,将指定目录下的所有文件与子目录一并处理
  • -i:删除已有文件或目录之前先询问用户

查看目录下的文件

使用 ls 命令查看目录下所有文件和文件夹

  • 查看当前目录下的文件和文件夹:ls
  • 查看指定目录下的文件和文件夹:ls $HOME/test
  • 查看目录下的文件和文件夹和详情(包括权限,时间等):ll;即 ls -l 命令的缩写

文件操作

创建文件

使用 touch 命令创建文件

touch $HOME/test/testFile

复制文件

使用 cp 命令复制文件,如:

cp $HOME/test/testFile $HOME/test/testFile2

在 test 目录下复制了一份 testFile,命名为 testFile2

删除文件

使用 rm 命令删除文件, 输入 y + 回车确认删除,如:

rm $HOME/test/testFile

查看文件内容

使用 cat 命令查看文件内容,如:

cat ~/.bash_history

.bash_history 文件存储执行过的命令的历史记录。

过滤,管道,重定向

过滤

过滤类似于搜索,使用过 grep 命令进行过滤。
例如,过滤出 /etc/passwd 文件中包含 root 的记录:

grep 'root' /etc/passwd

前面是要过滤出来的内容,后面是要过滤的文件。

递归地过滤出 /var/log/ 目录中包含 linux 的记录:

grep -r 'linux' /var/log/

即递归查找出 /var/log/ 目录下所有文件中存在 linux 的记录,会列出所有符合的文件及匹配到的内容。

管道

Linux 中管道的作用是将上一个命令的输出作为下一个命令的输入,像 pipe 一样将各个命令串联起来执行,管道的操作符是 |

比如,我们可以将 catgrep 两个命令用管道组合在一起,

cat /etc/passwd | grep 'root'

该命令类似于 grep 'root' /etc/passwd;这里拆成了组合命令,前面部分 cat /etc/passwd 查看了 passwd 文件内容,然后将文件内容作为下半部分的输入,在文件内容中过滤出存在“root”的地方。

又比如,过滤出 /etc 目录中名字包含 ssh 的目录(不包括子目录):

ls /etc | grep 'ssh'

前半部分列出了 etc 目录下的文件和文件夹,将这部分内容作为后半部分的过滤条件,过滤出包含 ssh 的(只是名字包含)。

重定向

可以使用 >< 将命令的输出重定向到一个文件中,如:

echo 'Hello World' > ~/test.txt

以上命令,往 ~/test.txt 文件中写入了“Hello World”。

运维常用命令

ping 命令

www.example.com 发送 4 个 ping 包,检查与其是否联通:

ping -c 4 www.example.com

netstat 命令

netstat 命令用于显示各种网络相关信息,如网络连接,路由表,接口状态等等。

列出所有处于监听状态的 tcp 端口:

netstat -lt

查看所有的端口信息,包括 PID 和进程名称

netstat -tulpn

ps 命令

ps命令用于报告当前系统的进程状态。
例如,过滤得到当前系统中的 ssh 进程信息:

ps -aux | grep 'ssh'

总结

参考资料