目录
cd ~ 进入当前用户的家目录(任意一个linux用户,用特定用户登录系统时,默认在家目录下)

tree 显示所有文件路径 ---报错----> 安装tree命令
ls -a -l/ls -l -a/ls -al/ls -la
mv src dst 剪切文件/指定文件重命名(dst不是目录或者不存在就是命名)
grep -n "9" log.txt 显示含9的句子且显示行数
grep -i "hello" log.txt 忽略大小写,视为相同
grep -v "hello" log.txt 不符合规定的语句
grep -vi "hello" log.txt 忽略大小写的不符合条件的语句
改变文件的拥有者 chown(chown [参数] 用户名 文件名)
改变文件或目录的所属组 chgrp(chgrp [参数] 用户组名 文件名)
win界面----os开始时,都是黑屏终端+指令操作
Linux也有图形界面----desktop os-----终端+指令操作
alt + enter 全屏 ,退出全屏
clear 清屏
pwd 打印默认所处路径
cd
cd .. : 返回上级目录
cd /home/litao/linux/ : 绝对路径
cd ../day02/ : 相对路径
cd ~:进入用户家目
cd -:返回最近访问目录
cd 进入文件
cd 进入某一文件
cd . 当前目录
cd .. 上级目录
cd ~ 进入当前用户的家目录(任意一个linux用户,用特定用户登录系统时,默认在家目录下)
cd - 在最近所处的路径下使用
rm / rmdir
rmdir 删除目录文件(只能删除空目录)
空目录是指该目录中没有其他的文件或目录,当该目录中存在文件或目录文件,删除不了
rm 删除文件
-p 当子目录被删除后如果父目录也变成空目录的话,就连带父目录一起删除(parent)
-f 即使文件属性为只读(即写保护),亦直接删除 (force)
-i 删除前逐一询问确认(inquire)
-r 删除目录及其下所有文件 (recursive)
rm -f 文件名 强制删除
rm -r 文件名 递归删除
注意:rm -rf / 系统崩溃,要重装系统
rm -rf * 在根目录时也会导致系统崩溃
* 通配符
win也可以多用户使用:可以打开另外的桌面
mkdir
mkdir 创建目录文件
【 mkdir -p 串文件路径 】 递归创建一串文件路径
tree 显示所有文件路径 ---报错----> 安装tree命令
centos yum install -y tree
ubuntu sudo apt-get update
sudo apt-get install tree
which
alias 起别名
命令就是文件
命令本质==可执行文件==写的c/c++程序
运行程序
ctrl+c 终止异常
显示当前目录下的文件(当前用户所处的目录)
用户 whoami
目录 pwd
当前目录下的文件
ls ll ls -l(命令行 命令行选项(可以0个或多个,多个选项用空格隔开))
ls显示文件属性,只有ls就只显示文件名
ls -l 显示更多属性
ls
-a 列出目录下的所有文件,包括以 . 开头的隐含文件。
-d 将目录象文件一样显示,而不是显示其下的文件。 如:ls –d 指定目录
-i 输出文件的 i 节点的索引信息。 如 ls –ai 指定文件
-k 以 k 字节的形式表示文件的大小。ls –alk 指定文件
-l 列出文件的详细信息。
-n 用数字的 UID,GID 代替名称。 (介绍 UID, GID)
-F 在每个文件名后附上一个字符以说明该文件的类型,“*”表示可执行的普通文件;“/”表示目录示符号链接;“|”表示FIFOs;“=”表示套接字(sockets)。(目录类型识别)
-r 对目录反向排序。
-t 以时间排序。
-s 在l文件名后输出该文件的大小。(大小排序,如何找到目录下最大的文件)
-R 列出所有子目录下的文件。(递归)
-l 一行只输出一个文件。
ls -a -l/ls -l -a/ls -al/ls -la
ls -l 默认自己的目录
ls -l 指定目录里的内容
ls -l -d 查看目录本身
ls -l 和 ls -l 路径 相同
. 开头的文件 隐藏文件
touch 创建普通文件
mkdir 创建目录文件夹
stat
touch .文件名 创建隐藏文件
mkdir .文件名 创建隐藏文件
建立一个空文件,该文件也要占据磁盘空间 (文件=内容+属性(大小,类型,名称...))
D:\Adobe Premiere Pro\Premiere Pro 2024(目录或普通文件)
(根目录)/root/113/lesson(目录或普通文件)
Linux的文件结构:是一颗从 根目录/ 开始的一个多叉树
a.叶子结点:一定是普通文件或者空目录
b.非叶子结点:一定是一个非空目录
路径具有唯一性:子节点只有唯一一个父节点
任何一个目录即使为空,系统也默认给该目录自动生成
从根目录/开始定位到目标文件的路径:绝对路径(在配置文件中使用) /home/bit/test.c
以非/为参照位置,定位一个文件:相对路径(日常操作较多,简单)
man指令
上下键 查找历史命令
man手册 从1开始向下找到3
man 3 c语言
man 2 性能调用
同一目录的文件不能同名,不同目录的文件可以同名
cp
-f 或 --force 强行复制文件或目录, 不论目的文件或目录是否已经存在
-i 或 --interactive 覆盖文件之前先询问用户
-r递归处理,将指定目录下的文件与子目录一并处理。若源文件或目录的形态,不属于目录或符号链接,则一律视为普通文件处理
-R 或 --recursive递归处理,将指定目录下的文件及子目录一并处理
拷贝到上级目录
cp 目录 要递归拷贝
echo指令 将后续当字符串打印(默认加换行符)
printf 显示打印
echo和cat的区别
echo后续内容当字符串打印
cat打印指定文件名里的内容
知识点
1.在Linux中,一切皆文件
终端的本质在Linux系统就是一个文件,/dev/pts/xxx
如何理解系统帮我们打开?
系统在执行你的代码之前会先去执行fopen接口,打开文件后再去执行代码
为什么要帮我们打开?
用户默认状态下使用方便
为什么不打开其他的?
默认打开三个就够用了,需要使用其他的再打开就行了
2.重定向操作
写入显示器文件中
把内容显示到文件中----输出重定向
文件不存在---创建文件
文件存在有内容---清空内容,再写入
故可以用">文件名"创建文件(普通文件)
可以清空文件内容
追加重定向“>>文件名”(不清空内容,直接追加内容)
输入重定向"<文件名"(从文件里读,输出到显示器上)
/dev/pts 终端系统 以c开头的文件为字符文件
终端也是文件
表明终端也是文件
文件
-:普通文件,不看后缀(不代表禁止使用后缀),文本,可执行,库,图片,视频...
系统不关心后缀,不代表工具(gcc)不关心后缀
d:目录文件
c:字符文件,键盘,显示器,终端,输入的数据只有顺序性 /dev/pts
b:块设备文件,磁盘 /dev/vda
l:连接文件 /usr/lib
p:管道文件
s:socket文件
mv src dst 剪切文件/指定文件重命名(dst不是目录或者不存在就是命名)
cat 显示器打印
history 查看历史命令(日志)
less 查看日志,可以上下翻阅
tail
-f 循环读取
-n<行数> 显示行数
tail 文件名 查看尾部日志(默认10行)
tail -n 文件名 查看尾部几行日志
head
head 文件名 查看头部日志(默认10行)
head -n 文件名 查看头部几行命令
打印特定的中间行
单词行数统计 wc:单词 -l:行数
时间相关指令
%H : 小时(00..23)
%M : 分钟(00..59)
%S : 秒(00..61)
%X : 相当于 %H:%M:%S
%d : 日 (01..31)
%m : 月份 (01..12)
%Y : 完整年份 (0000..9999)
%F : 相当于 %Y-%m-%d
问题:计算机关机再开机时时间仍然准确?
主板上,纽扣电池让系统主板一直在记录时间
date +%s 时间戳
时间->时间戳:date +%s
时间戳->时间:date -d@1508749502
Unix时间戳(英文为Unix epoch, Unix time, POSIX time 或 Unix timestamp)是从1970年1月1日(UTC/GMT的午夜)开始所经过的秒数,不考虑闰秒
由于时间差,加上了8个小时
时间戳的作用:
1.转化为时间
2.用户->日志->时间
可以进行“区间查找”
时间戳转化为时间
cal 查看日历信息
cal -n 只能查看本年近几月的日历
find命令
grep 搜索字符串
-i :忽略大小写的不同,所以大小写视为相同
-n :顺便输出行号
-v :反向选择,亦即显示出没有 '搜寻字符串' 内容的那一行
grep "9" log.txt 显示含9的句子
grep -n "9" log.txt 显示含9的句子且显示行数
grep -v "9" log.txt 去掉带9的行数
grep -i "hello" log.txt 忽略大小写,视为相同
grep -v "hello" log.txt 不符合规定的语句
grep -vi "hello" log.txt 忽略大小写的不符合条件的语句
zip/unzip指令 打包(文件合并)/压缩(减少体积)
打包:传送拷贝文件时防止文件丢失
压缩:减少体积,节省存储空间,网络传递,可以减少网络传递时间
zip/unzip
安装zip/unzip sudo apt install -y zip unzip
zip --version
zip -r dst.zip src 压缩文件
unzip xxx.zip 解压文件
unzip xxx.zip -d 指定目录 解压到指定目录下
-r 递归处理,将指定目录下的所有文件和子目录一并处理
将Linux上的压缩文件传递给windows
sudo apt install -y lrzsz 先进行安装
sz xxx.zip 将Linux上的文件传到windows上面
rz 从windows页面上传到Linux
tar
tar 选项 xxx.tgz srcdir 打包src成tgz文件
tar打包不需要递归,默认全部打包
tar czf xxx.tgz src 打包
tar xzf xxx.tgz 解压
tar xvzf xxx.tgz 解压的过程展现出来
tar xzf xxx.tgz -C 路径 把文件解压到指定路径
选项
-c :建立一个压缩文件的参数指令(create 的意思);
-x :解开一个压缩文件的参数指令!
-t :查看 tarfile 里面的文件!
-z :是否同时具有 gzip 的属性?亦即是否需要用 gzip 压缩?
-j :是否同时具有 bzip2 的属性?亦即是否需要用 bzip2 压缩?
-v :压缩的过程中显示文件!这个常用,但不建议用在背景执行过程!
-f :使用档名,请留意,在 f 之后要立即接档名喔!不要再加参数!
-C : 解压到指定目录
远程拷贝(linux与linux机器之间)
scp lesson4.tgz whb@公网ip:/home/whb/code/113
scp dst.tgz 用户名@公网ip:目标机器指定的路径
bc指令 计算器
计算器的功能
uname -r 查看体系结构和系统内核版本
uname -a
uname -r
体系结构,芯片内核
1.x86_32 x86_64(x64)
2. 新老内核的问题
-a或–all 详细输出所有信息,依次为内核名称,主机名,内核版本号,内核版本,硬件名,处理器类型,硬件平台类型,操作系统名称
ctrl命令
ctrl+r 搜索历史命令
ctrl+d 退出当前用户
history 查看历史命令
关机
shutdown 选项
shell命令及运行原理
shell感性理解(初步理解)
为什么要存在外壳程序?
1.方便用户操作
2.外壳程序,保护内核
3.外壳程序->进程->新命令到来->创建子程序
linux权限
linux用户 root用户(超级管理员) / 普通用户
超级用户:可以再linux系统下做任何事情,不受限制
普通用户:在linux下做有限的事情。
超级用户的命令提示符是“#”,普通用户的命令提示符是“$”。身份切换
普通用户->超级用户 su 不会影响当前的目录
su - 直接以root目录
超级用户->普通用户 adduser 用户名
passwd 用户名
su 用户名 不需要密码
查明当前用户 ls /home
sudo 以超级用户身份行使
安装软件,安装到系统中,需要管理员root权限
用sudo安装软件,但输入的是普通用户的密码?
以超级用户身份运行
以超级管理员身份在普通用户时以root身份创建文件
第一次输密码之后,会有10分钟左右的免密码时间
安装软件通常放在/usr/bin目录下
在普通用户下,使用sudo命令,出现问题
sudo:用来进行指定的短暂提权的
权限
是什么?
能或不能做什么事
为什么?
1.控制用户的行为,防止错误的发生
2.理解 权限=角色+目标属性
权限首先限制的是角色(人)
权限要求目标必须具备对应的属性
不是拥有组,不是所属组,就是other
什么是所属组?更精细化的权限管理,首先要有更精细化的角色分配
怎么办?
实操
改变文件所属组,拥有者,other的权限 chmod [参数] 权限 文件名
改变文件属性
+:向权限范围增加权限代号所表示的权限
-:向权限范围取消权限代号所表示的权限
=:向权限范围赋予权限代号所表示的权限
用户符号:
u:拥有者
g:拥有者同组用
o:其它用户
a:所有用户
所有用户
根据八进制位改变文件权限
能改任何人的文件权限么?用户只能更改自己的文件权限
用sudo可以更改
没有权限时相应操作会被阻止
确定权限信息时,系统会先确定用户是谁 用户角色确定只有一次
在centos只会按顺序确定,拥有者,所属组,other
改变对应的拥有组,此时按照顺序对应当前用户匹配的组来进行权限的限制
改变文件的拥有者 chown(chown [参数] 用户名 文件名)
改变文件或目录的所属组 chgrp(chgrp [参数] 用户组名 文件名)
-R 递归修改文件或目录的所属组
root用户不受权限约束
如何理解可执行?
可执行权限!=文件可执行
给了执行权限,但文件本身不可执行,故无法执行
当文件可以执行时去掉它的可执行权限,故文件依然不可以执行
改变文件所属或者拥有者
系统默认不允许将文件给别人,想要给别人,必须高权限(sudo/su)
目录权限
如果想进入一个目录,需要什么权限?可执行权限(x)
如果对目录没有r,就无法查看目录里面的文件
如果对目录没有w,就无法在指定目录内部新建文件
默认情况下,新建一个目录,rwx权限默认全都有
如何理解linux多用户之间相互隔离? /home/test 故任何目录无法进入其他用户的家目录
缺省权限
对于普通文件:起始权限666,默认不可执行
对于目录文件:起始权限777,默认携带x
不同系统的初始权限不同(因为系统默认会存在一个叫做权限掩码的概念)
000 000 010
最终权限=起始权限&(~umask)
umask存在的目的?
希望凡是在umask中出现的权限,都不应该在最终权限中出现
为什么要存在umask?
a.默认权限,由OS自主决定,无法在创建前进行修改---系统可配置,可以灵活满足需求的一种表现
b.特殊情况下,配置umask,可以控制文件的默认权限,让我们的代码可控
改变umask,从而改变文件权限
删除文件权限
不可读不可写,但可以删除文件
一个文件是否能被删除,与文件本身无关!与文件所处的目录w权限有关
文件属性
粘滞位
两个普通用户在根目录(公共目录)下创建文件夹,当a用户为了让b有修改文件的权限,放开了other写的权限,不仅b可以修改a创建的文件,还有c,d等等用户均可以修改a创建的文件甚至删除------
共享文件:不想让非文件的拥有者删除(如a创建的文件,b不能删除)
想在文件夹下共享文件,就得在文件夹下新建文件,但是新建文件涉及到文件夹w的权限,即使创建文件的权限,也是删除文件的权限,故使任何人都能在共享目录下新建,但是不能让非拥有者删除----权限标志位:t(粘滞位)只给目录
chmod +t 文件夹名
根目录下存放临时文件:tmp(存在粘滞位的功能)