Linux学习

文件了解

主文件

Linux下一切皆文件

  • / Linux根目录 最终的

  • /bin 二进制目录,包含GNU工具和ls自带的命令,存放许多用户级

  • /cdrom

  • /bin 系统配置文件

  • /home 主目录,显示所有用户目录

  • /lib 库目录

  • /lost+found

  • /mnt 挂载目录、U盘

    • 挂载——外在的设备和电脑进行连接
  • /proc 伪文件系统

  • /run 运行目录

  • /snap

  • /temp 临时目录

  • /var 可变目录(存储日志等)

  • /boot 启动目录

  • /dev 设备目录

  • /media 媒体目录(存储MP3、MP4等)

  • /opt 可选目录

  • /root root用户主目录(管理员)

  • /sbin 系统二进制目录,GNU高级管理员使用的命令

  • /srv 服务目录,本地服务

  • /usr 用户二进制目录,GNU工具

    • 安装的软件在/usr/bin/里面找
  • FHS 文件系统层级标准

文件类型

Linux 中有7种文件类型

文件类型 类型的字符描述
普通文件类型 f
目录类型 d
软连接类型 l
字符设备类型 c
块设备类型 b
管道类型 p
本地套接字类型 s

命令合集

cd命令

cd命令初学

cd    		# 进入用户主目录;
cd /  		# 进入根目录;
cd ~  		# 进入用户主目录;
cd ..  		# 返回上级目录(若当前目录为“/“,则执行完后还在“/";".."为上级目录的意思);
cd ../..  	# 返回上两级目录;
cd !$  		# 把上个命令的参数作为cd参数使用。
.			# 当前目录

gedit + 文件路径	# 打开文件

cd !$		# 执行上一条命令的最后一个路径

路径问题

前面不加/ 是相对路径,如: Documents/bin
前面加/ 是绝对路径,指向根目录,如: /Documents/bin
/前加. 是相对路径,如: ./Documents/bin

ls命令

ls Documents/ -F -R
ls Documents/ -FR
-F     # 每个目录名加 "/" 后缀,每个 FIFO 名加 "|" 后		     缀, 每个可运行名加“ * ”后缀。
-R     # 递归列出遇到的子目录。

ls -l
ll
# 列出当前目录可见文件详细信息

# 文件扩展匹配符: * ?
ls -l fhs-2.3_*.pdf
ls -l fhs-2.3_copy?.pdf
# 过滤所有带有fhs-2.3_字样的pdf文件
# * 表示多个可变字符,? 表示一个可变字符

# 元字符通配符: []
ls -l f[a-x]ck.txt
# 列出fack.txt到fxck.txt的所有txt文件

操控文件(touch、cp)

touch lianxi.txt
# 在当前目录下创建一个空的lianxi.txt文件
# 存在的文件可以更新更改时间

cp lianxi.txt lianxi2.txt
# 将源文件或目录复制到目标文件或目录中
# 将lianxi.txt复制到lianxi2.txt中
# 若lianxi2.txt存在内容,会强制覆盖,且无提示,不推荐使用

cp -i lianxi.txt lianxi2.txt
-i:覆盖既有文件之前先询问用户,推荐使用

cp -r Documents/doc Downloads/doc
-R/r:递归处理,将指定目录下的所有文件与子目录一并处理;


快捷方式(ln)

  • Windows中的链接文件

    • 快捷方式(.lnk)文件
  • Linux中的链接文件

    • 符号链接(软链接)——快捷方式
    • 硬链接 —— 副本,原本的文件必须是存在的
ln -s lianxi.java lianxi

# 创建lianxi.java的软链接
# s——symbol 创建软链接

ln lianxi.java lianxi2
# 创建lianxi.java的硬链接

mv重命名

mv ——move

mv lianxi.java lianxi2.java
# 将lianxi.java重命名为lianxi2.java

mv ./test.c ~/Documents/program/
# 将当前目录下的test.c文件移动到~/Documents/program/下

rm删除

rm ——removing

sudo rm -rf /*
# 极度危险!!! 会完全删除Linux下所有文件

rm -rf pdf/
# 完全删除pdf下所有文件

-d:直接把欲删除的目录的硬连接数据删除成0,删除该目录;
-f:强制删除文件或目录;
-i:删除已有文件或目录之前先询问用户;
-r或-R:递归处理,将指定目录下的所有文件与子目录一并处理;
--preserve-root:不对根目录进行递归操作;
-v:显示指令的详细执行过程。

# rm 最好搭配 -i 进行删除

操控目录(mkdir)

目录即Windows中的文件夹

mkdir ——make directories

mkdir Java
# 在当前目录下创建Java目录

cp -r *.java ./Java
rm -ir ./*.java
# 将当前目录下的java文件复制到Java文件夹下,再将当前目录下java文件删除


mkdir -p cpp/src/util
# 创建多级文件夹
-Z:设置安全上下文,当使用SELinux时有效;
-m<目标属性>或--mode<目标属性>建立目录的同时设置目录的权限;
-p或--parents 若所要建立目录的上层目录目前尚未建立,则会一并建立上层目录;
--version 显示版本信息。

文件类型(file)

file lianxi
# 查看lianxi的文件格式

-b:列出辨识结果时,不显示文件名称;
-c:详细显示指令执行过程,便于排错或分析程序执行的情形;
-f<名称文件>:指定名称文件,其内容有一个或多个文件名称时,让file依序辨识这些文件,格式为每列一个文件名称;
-L:直接显示符号连接所指向的文件类别;
-m<魔法数字文件>:指定魔法数字文件;
-v:显示版本信息;
-z:尝试去解读压缩文件的内容。

查看文件(cat)

cat lianxi.txt
# 在终端中展示lianxi.txt

-A, --show-all           等价于"-vET"组合选项。
-b, --number-nonblank    只对非空行编号,从1开始编号,覆盖"-n"选项。
-e                       等价于"-vE"组合选项。
-E, --show-ends          在每行的结尾显示'$'字符。
-n, --number             对所有行编号,从1开始编号。
-s, --squeeze-blank      压缩连续的空行到一行。
-t                       等价于"-vT"组合选项。
-T, --show-tabs          使用"^I"表示TAB(制表符)。
-u                       POSIX兼容性选项,无意义。
-v, --show-nonprinting   使用"^"和"M-"符号显示控制字符,除了LFD(line feed,即换行符'\n')和TAB(制表符)。

--help                   显示帮助信息并退出。
--version                显示版本信息并退出。
more lianxi.txt
# 在终端中以全屏方式展现lianxi.txt的内容
# 只允许向后浏览

按 Space 键:显示文本的下一屏内容。
按 Enter 键:只显示文本的下一行内容。
按H键:显示帮助屏,该屏上有相关的帮助信息。
按B键:显示上一屏内容。
按Q键:退出more命令。
less lianxi.txt
# 在终端中以全屏方式展现lianxi.txt的内容
# 只允许向后浏览

/字符串:向下搜索"字符串"的功能
?字符串:向上搜索"字符串"的功能
n:继续向后搜索
N:向前搜索
b: 向后翻一页
d: 向后翻半页
u: 向前滚动半页
y: 向前滚动一行
Q: 退出less 命令
空格键: 滚动一页
回车键: 滚动一行
[pagedown]: 向下翻动一页
[pageup]: 向上翻动一页
G: 移动到最后一行
g: 移动到第一行
tail -n 2 lianxi.txt
# 只看 lianxi.txt 的最后两行

head -n -2 lianxi.txt
# 只看 lianxi.txt 的前面两行


查看任务管理器(top、ps)

top 	# 可以实时动态地查看系统的整体运行情况

ps 		# 报告当前系统的进程状态

ps axo pid,comm,pcpu
# 查看进程的PID、名称以及CPU占用率
pid  -- PID
comm -- 名称
pcpu -- cpu占用率

ps -aux | grep named # 查看named进程详细信息
ps -l				# 将目前属于您自己这次登入的 PID 与相关信息列示出来
  • 什么是PID?

PIDProcess ID 的缩写,也就是 进程编号

每一个正在运行的程序(进程)在 Linux 系统中都会被分配一个唯一的 进程号(PID),它是系统用来管理进程的一个核心标识。

kill

kill 2974
# 结束PID号为2974的进程

挂载(mount、umount、df、du)

挂载即为U盘在操作系统中创造虚拟磁盘的过程

mount 、 umount

mount /dev/hda1 /mnt		# 将mnt下的文件挂载到dev/hda1下
# mount 用于挂载Linux系统外的文件

umount /mnt					# 将mnt下的挂载文件删除 

df 、du

df 
df命令 用于显示磁盘分区上的可使用的磁盘空间。默认显示单位为KB。可以利用该命令来获取硬盘被占用了多少空间,目前还剩下多少空间等信息。

# 常用
df -h
-h或--human-readable:以可读性较高的方式来显示信息;
-H或--si:与-h参数相同,但在计算时是以1000 Bytes为换算单位而非1024 Bytes;

du命令 也是查看使用空间的,但是与df命令不同的是Linux du命令是对文件和目录磁盘使用的空间的查看,还是和df命令有一些区别的。
du -h

sort

sort
对文本文件中所有行进行排序。

sort -n
sort -M
sort -r

-n, --numeric-sort             根据数字排序。
-M, --month-sort               按照非月份、一月、十二月的顺序排序。
-r, --reverse                  将结果倒序排列。

grep

在文件中搜索一个单词,命令会返回一个包含 “match_pattern” 的文本行:

grep match_pattern file_name
grep "match_pattern" file_name
在多个文件中查找:

grep "match_pattern" file_1 file_2 file_3 ...

find

find 是Linux中的一个搜索工具,可以根据属性查找相应的磁盘文件,包括文件名文件类型文件大小

# 语法
find 搜索的路径 -name 要搜索的文件名

# 例:
find ./ -name main.cpp
# 可以使用 * 和 ? 进行模糊查询,不过要用 "" 或 '' 号包起来
find ./ -name "*.cpp" 

# 搜索类型
find ./ -type f

# 搜索文件大小
find 搜索路径 -size [+|-]文件大小
# -size 4k 表示区间(3k,4k]
# -size -4k 表示区间[0k,4k]
# -szie +4k 表示区间(4k,+∞)

压缩与解压缩

gzip 
gzip命令 用来压缩文件。gzip是个使用广泛的压缩程序,文件经它压缩过后,其名称后面会多处“.gz”扩展名。

tar   # 打包
将许多文件一起保存至一个单独的磁带或磁盘归档,并能从归档中单独还原所需文件。

tar -zcvf test.tar.gz ./test
将test打包压缩为test.tar.gz压缩文件
-z   					通过 gzip 过滤归档
-c, --create              创建一个新归档 
-v, --verbose             详细地列出处理的文件
-f, --file=ARCHIVE        使用归档文件或 ARCHIVE 设备

tar -zxvf test.tar.gz ./test   # 解压缩
-x, --extract, --get       从归档中解出文件

父子shell

sleep & jobs&coproc

sleep 10&	# 挂在进程后台,睡眠10s

jobs		# 显示作业的状态
-l	在作业信息中额外的列出PID。
-n	只列出最近一次通知以来状态变更的作业。
-p	只列出PID。
-r	只输出处于运行状态的作业。
-s	只输出处于停止状态的作业。


coproc job1 { sleep 10; } &		# 协程,创建一个子shell,并睡眠10s

快捷键

  • 强制退出

Ctrl+c

  • 复制粘贴

Ctrl+shift+c

  • 自动补全

Tab

  • 跳跃单词

Ctrl+方向键

  • 清空终端

Ctrl+l

  • 删除光标的内容

Ctrl+u

  • 删除光标后的内容

Ctrl+k

  • 重复上次命令

方向键 上

GCC

编译

# gcc 编译
gcc main.c -o main
# g++ 编译
g++ main.cpp -o main