初学Linux(学习笔记)

news2024/11/13 16:20:10

初学Linux(学习笔记)

在这里插入图片描述

前言

本文跳过了Linux前期的环境准备,直接从知识点和指令开始。


知识点:

1.目录==文件夹(Windows)

2.文件=内容+属性

3.在Windows当中区分文件类型是通过后缀,而Linux是通过ls -l后显示的所有信息中第一个信息的首字母来区分,如果是d表示是目录(directory);**-开头的是普通文件;.**开头的文件是隐藏文件。

4.Windows中反斜杠,也就是\,称为路径分割符;Linux下斜杠,也就是/是路径分割符。

两个斜杆之间的一定是目录,但最后一个可能是目录也可能是普通文件。

5.在Linux中任何一个目录(即使空)默认自带.和…目录。.为当前目录;…为上级目录。

6.整个路径最开始的那个/,不是路径分割符,而是Linux根目录。

7.Linux的文件结构,是一颗从根目录/开始的一个多叉树。叶子结点是普通文件或者空目录,非叶子结点一定是一个非空目录。

找到一个文件必须找到一个路径。路径有两种:绝对路径和相对路径。

绝对路径就是从根目录开始的路径。/home/litao/linux/ : 绝对路径

以非根目录为参照点(起点)来定位一个文件的就是相对路径。…/day02/ : 相对路径

不过,比如当我们要ls指定文件时,其实可以直接跟文件名就行,不用绝对路径和相对路径那么复杂。

使用场景的不同:

绝对路径一般用于配置文件,因为路径不会失效(万一相对路径中为参照点的路径不存在了就会出错);相对路径一般日常操作用得多(方便)。

8.所有的操作系统全都是目录结构,文件结构全都是多叉树。在Windows中的C、D盘并不是根目录,它们其实不是盘符,其实是文件夹,真正的根目录是此电脑

9.命令本质上就是系统当中的文件,而且是普通文件。更进一步说,命令的本质就是可执行文件,也就是我们写的C/C++程序。

我们把自己写的程序拷贝到/usr/bin/后,也能像ls这样不需要写出路径,像命令一样使用了:cp mycmd /usr/bin/

10.cat显示的是文件里面的内容,echo是后面的内容当作字符串,printf类似echo但有格式化控制。

11.文件

我自己建的文件;

键盘;

显示器;

显示器

printf是往显示器打印,也就是说本质上往文件里打印。

任何文件操作必须先被打开。所以这些设备文件也必须先被打开。但是我们没有手动打开就能直接用printf等,因为系统在启动程序时自己打开了。

  • 如何理解系统帮我们打开?为什么要帮我们打开?为什么不打开其他文件?

​ 程序在启动时,默认要打开3个文件:stdin/stdout/stderr(键盘、显示器、显示器)(类型是FILE*)。为什么在使用printf等时没有使用到这几个文件?因为printf等函数进行了封装。而fprintf就可以指定流。

​ 程序在系统运行起来时要做很多工作。(学进程时理解)系统执行时在main函数之前会调用一些接口……

​ 为什么帮我们打开?方便操作。否则要自己打开显示器键盘等。

​ 为什么只打开这三个?因为一般来说就够用,其他的自己打开。

12.重定向操作——只看操作

比如echo “helloworld” > hello.txt

本来应该写入到显示器文件的内容写到了我们指定的一个普通文件(创建出了我们指定的这个文件)。

这就是输出重定向

而且如果我们此时再echo “hello” > hello.txt,hello.txt里的内容就会被替换成hello,也就是说>的特点:如果后续文件不存在,就新建;如果后续文件已存在,把原始内容先清空再写入。

  • 而这说明了很关键的一点,也就是后续我们再新建普通文件时不用再touch,可以直接用>:>log.txt, 这样就创建出来log.txt了。
  • 如果我们想把文件清空,就可以>hello.txt(一个已经存在的文件)

如果我们不想情况再写入,而是想新增到后面,就改为两个大于符号>>。这种叫做追加重定向。

<则是输入重定向(往下看cat部分)

通过man fopen,我们可以看到文件相关的内容:

w方式叫做写入,不存在就新建,存在的话就清空。所以echo写入文件其实就是相当于C语言用w或w+的方式把文件打开。

a方式就是在后面追加。

通过man fopen,我们可以看到文件相关的内容:

w方式叫做写入,不存在就新建,存在的话就清空。所以echo写入文件其实就是相当于C语言用w或w+的方式把文件打开。

a方式就是在后面追加。

ll /dev/pts可以看到登录时对应的文件,dev即设备,pts一般是字符设备。当我们打开一个设备时,就会在这个目录下新建一个文件。

文件名叫0,文件类型是c,也就是字符文件。

终端也是文件,如果多打开终端,就会多出这个文件。

有意思的是:假如我们现在新打开一个终端,echo “hello” >/dev/pts/1可以写给自己,echo “hello” >/dev/pts/0可以写给另一个终端

终端的本质就是文件,/dev/pts/xxx,系统帮我们把这个文件打开就可以在键盘、显示器上读写了。

我们还可以nano redir.c,写一段程序:

然后在我们要写入的目标终端:

因为在Linux中一切皆文件,所以在Linux中的很多操作最后都变为文件操作。

15.文件类型

-开头,普通文件;

d开头,目录文件;

c开头,字符文件,键盘,显示器,终端。字符文件的特点是:输入的数据有顺序性。

b开头,块设备文件,磁盘

l开头,链接文件

p开头,管道文件

……

b:

通过ll /dev/vda*,我们可以查看磁盘

把这个文件打开写东西就相当于把物理盘直接打开,很危险。

其实在Windows中只有一块磁盘,C、D是分区。

l:

Windows下的快捷方式就有点像链接文件。

p:

mkfifo pipe就可以建立一个管道文件pipe。

-:

普通文件都有哪些呢?文本、可执行程序、库、图片、视频等。

虽然Linux下区分文件类型不看后缀,但并不代表禁止使用后缀。

同时,系统不关心后缀不代表工具比如gcc不关心。

16.软件领域,大型文件,必须有日志。

不同层面的日志记录的内容不同。

17.补充小知识:

计算机已经关机了为什么开机之后时间还是对的?

并不是从网上查的,也不是因为电脑有电池。是因为主板上有一个纽扣电池。可以维持上两周。让系统主板一直记录时间。


XShell 下的复制粘贴

复制: ctrl + insert (有的 insert可能需要配合 fn 来按)

粘贴: shift + insert。ctrl + c / ctrl + v 是不行的.

clear

顾名思义,就是清理屏幕。

Alt+Enter(回车)

这个操作可以进入或退出全屏。

stat

可以看到文件详细的属性介绍。

可以看到文件的三种时间:access modify change,简称ACM时间。access是最近访问时间,modify和change有什么区别?以后再说。

which

基本作用是查找并显示给定命令的完整路径‌。

alias

作用是给命令取别名。其实,ll就是ls -l的别名:

但注意是一次性的。

ctrl+C

如果在命令行中出现了异常情况,统一尝试ctrl+C来终止异常

*****

ls test.*代表查看test.开头的所有文件

ls *.c代表查看.c结尾的所有文件

要小心 rm -rf *,即把当前目录下所以文件(隐藏文件除外)删掉(尤其是在根目录时)。

printf

可以输出我们指定的内容

比如:

printf “hello %d,hello %s,hello %f\n” 100 “hello momo” 3.14

打印结果:

hello 100,hello hello momo,hello 3.140000

上下键

可以用这个找到我们的历史命令,不用重新输入。

echo

把后续的内容当作字符串直接打印。建议打印内容用单引号括起来。

tac

和cat类似,也是显示文件内容,但是是倒着显式文件内容(从下往上),使用写法如tac redir.c

比如aaaa bbbb会打印成bbbb aaaa

cat的使用场景在哪?

有时我们只想看一下配置文件,并不想修改,所以不用nano,直接用cat看一下,太长的文件不行。

tac的使用场景在哪?

比如日志。因为cat打印日志会从头往后打完,而有时我们想看最开始的时候,就可以用tac来反向打印。

history

可以看历史命令。


ls

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

只有ls,就只显示文件名。

ls -l则是显示更多的属性。

ls后面可以跟指定的目录,就会打印指定目录里的内容。

ls的选项
ls -l

列出文件的详细信息。

ls -a

a就代表all。列出目录下的所有文件,包括以 . 开头的隐含文件。

我们可以发现比起ls,多出了.和…文件。**.**开头的文件是隐藏文件。

注意,可以写成ls -a -l,ls -l -a,ls -al,ls -la(给了ls两个选项),都不影响。

ls -d

将目录像文件一样显示,而不是显示其下的文件。 如:ls –d 指定目录

pwd

这个指令就是显示用户当前所在的目录。

如果是以root登录,那么打印出来此时应该是/root;如果是以zhangsan用户登录,那么打印出来应该是/home/zhangsan。

cd

change directory

改变工作目录。将当前工作目录改变到指定的目录下。

语法:cd 目录名

cd … : 返回上级目录

cd /home/litao/linux/ : 绝对路径

cd …/day02/ : 相对路径

cd ~:进入用户家目录。任何一个Linux用户,用特定的用户名登录系统时,默认在什么路径下呢?家目录下。

Windows下是否有家目录的概念呢?其实在Windows下可以新建用户。(在C盘的用户目录下可以看)

cd -:返回最近访问目录。可以在最近两个目录之间来回跳转。

mkdir

语法:mkdir [选项] dirname…

功能:在当前目录下创建一个名为 “dirname”的目录

常用选项:

-p, --parents 可以是一个路径名称。此时若路径中的某些目录尚不存在,加上此选项后,系统将自动建立 好那些尚不存在的目录,即一次可以建立多个目录

比如 mkdir -p a/b/c/d/e

除了一层层进去查看外,可以用tree来查看树形结构。

touch

新建一个普通文件。

touch后面跟一个文件名。如touch hello.txt

touch还能去更新一个文件的时间。如touch hello.txt,通过ll可以看到文件时间更新了。

rmdir

删除目录(只能删空目录)

rm

remove

在root账号下,它会询问是否要删除,y代表yes,n代表no。

rm默认只能删普通文件。

rm -f

f代表force,所以这代表强制删除。

这样就可以避开删除时的询问。

rm -r

r代表递归,这样就能把目录删掉。

rm -rf 加上目录名

就能强制删除一个目录。

rm -rf /

这个是把根目录强制删除,如果真的删除了,就只能重装系统了。

man

Linux的命令有很多参数,我们不可能全记住,我们可以通过查看联机手册获取帮助。访问Linux手册页的命令是man

man的语法: man [选项] 命令

比如我们现在不知道which指令怎么用,就可以使用man which

按q可以退出这个界面

手册像书一样,分好几章,如果不指定,默认查的是1里的内容(也就是指令)

如果想查找C语言函数,可以用man 3,比如man 3 printf

cp

普通文件

同一个目录下不能存在同名文件,所以cp hello.txt nohello.txt,就可以把hello.txt的内容拷贝到nohello.txt

也可以拷贝到不是该目录,而是其他路径下,如cp hello.txt …/nohello.txt,就是拷贝到上级目录下。

拷贝到指定路径时,可以不指定拷贝后的文件名,这样就会使用原本相同的文件名。

目录拷贝:

要带上-r选项,比如cp -r dir dirbackup

如果后面跟的是一个已存在的目录,就会拷贝到这个目录内部。比如cp -r dir dirbackup(此时dirbackup已存在,且拷贝结果是在dirbackup内拷贝了一个同样名为dir的目录)

如果不带-f,有重复的会进行询问。而对于超级用户(root),即使带了-f,也可能还是会询问。

cat

默认是把文件内容往显示器里写。

**如果后面什么也不跟,**就会让当前命令行阻塞在这,然后输入什么内容马上就回显什么内容(使用ctr+c来结束):

也就是默认从键盘里读,然后写到显示器里。

cat <

这是输入重定向,后面跟的什么就是从哪里读。

cat后面直接跟文件名

看起来结果和cat<文件名一样,其实并不相同。以后再深入理解。

cat适合去看短文件。

mv指令

1.剪切

mv命令是move的缩写,可以用来移动文件。比如mv redir.c …(移动到上级目录)

mv srcfile dstfile

如果想将整个目录移动到某个目录下:mv dir /(移动到根目录下)

所以srcfile可以是目录也可以是文件,其实在Linux下一切皆文件。

2.重命名

mv src dst

比如mv test.c notest.c

如何区别剪切和重命名,如果dst不是目录,那就是重命名。或者目录dst不存在,也是重命名,所以也可以对目录重命名。

more

more的功能类似于cat,在使用时它会先把一个屏幕打满,然后回车再逐行查看。

但是more不能支持上翻下翻。

按q可以退出。

less

然而比起more,现在我们更推荐使用的是less。

less和more一样,less /var/log/messgaes后也可以查看日志,也是先打满一个屏幕,但是less可以支持上翻和下翻,所以使用更加方便。

head

如果文件太大,我们使用cat,刷到最后的时候,可能都过去5分钟了,如果只想看开头内容,可以使用head。

head /var/log/messages

如果只想看开头的一行内容,可以head -1 /var/log/messages

如果只想看开头的两行内容,可以head -2 /var/log/messages

tail

使用和规则同上。

拿中间部分

怎么查中间?比如我们现在想拿501-510这10行。

可以先把前510行拿到,然后重定向放到文件temp.txt:head -510 log.txt >temp.txt

然后再tail -10 temp.txt

这样我们就拿到了501-510行。

整合成一行版:head -510 log.txt | tail -10

也就是把前一句指令的结果交给后一句处理。

这个竖划线就是管道。一端是灌水的,一端是出水的。这个管道就是文件,前面这句往这个文件里写,后面这句从这个文件里读。

head -510 log.txt | tail -10 | tac

这样我们还可以把这10行进行逆序打印。

head -510 log.txt | tail -10 | tac | wc -l

w代表word,l代表line。

这样我们还可以看结果有多少行


时间相关的指令

date

date

date +%Y——年

date +%Y:%m——年:月

date +%Y-%m——年-月

date +%Y:%m:%d——年:月:日

date +%Y-%m-%d_%H:%M:%S——年-月-日__时:分:秒

date+%s——这是一个很大的数字,随着查看不断增加。大概间隔1s。

这个数字叫做格林威治时间戳。格林威治即世界时间的约定点。

它在每个计算机内部会维持一个线性递增的计数器。每隔一秒让这个计数器++

这个时间会溢出吗?(千年虫)

不用太担心。

这个有什么用呢?

可以通过算法转化成我们平时看的时间。

在用户级别上,日志不想写年月日时间,不是给人读的,是做数据处理的,就用时间戳。每条日志都带上时间戳。就可以按时间戳去查找一个区间的日志。(区间查找)

时间戳怎么转化成标准时间?(以1725974749为例)

date +%Y-%m-%d_%H:%M:%S -d @1725974749

结果:

2024-09-10_21:25:49

date +%Y-%m-%d_%H:%M:%S -d @0

我们就可以得到1970-01-01_08:00:00(这个8点是因为时差,因为我们在东八区)

cal(少用)

可以查看日历:

cal:

cal 2024:

cal -3

就是查看这个月、上个月和下个月的日历:


查找相关的命令

之前的which就是查找相关的命令。

但是which只是用于在指定的目录下去查找指定的命令。一般都是去/usr/bin/

whereis(少用)

whereis man

用于查找文件。

该指令会在特定目录中查找符合条件的文件。这些文件应属于原始代码、二进制文件,或是帮助文件。

该指令只能用于查找二进制文件、源代码文件和man手册页。

也就是,会去系统,非自己文件地方查找。

find

是在Linux的树形结构里去查。

find ~ -name *.c

就可以去找根目录下以.c结尾的文件:

find ~ -name ls

就会很卡,因为会拿着给的名字,在整个系统从根目录开始去查。是一种深度和广度遍历的方式,不断去做字符串匹配。

find选项很多,先掌握-name


本文到此结束。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2140269.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于spring的ssm整合

目录 基于spring的ssm整合 Spring 框架 SpringMVC 框架 MyBatis 框架 1.创建项目 2.导入依赖 3.导入sql 4.创建jdbc.propries文件 1&#xff09;mysql8以下 2&#xff09;mysql8以上的 5.创建mybatis-config.xml配置文件 6.创建spring-Config.xml文件 7.创建项目所需包和类 1&a…

C语言——错误处理机制errno

前言 在C语言中&#xff0c;错误处理主要是通过全局变量 errno 和相关的错误处理函数来实现的。errno 是一个全局整型变量&#xff0c;用于存储最近发生的系统调用或库函数调用失败的原因。当一个系统调用或库函数调用失败时&#xff0c;通常会设置 errno 的值&#xff0c;并返…

ROS笔记3.路径规划1

在 Rviz 中可视化路径规划move_base 节点的基本概念什么是Global Planner&#xff1f;什么是Global Costmap&#xff1f; 在 Rviz 中可视化路径规划 对于本章&#xff0c;您基本上需要使用 RViz 的 3 个元素&#xff1a; Map Display (Costmaps)Path Displays (Plans)2D 工具 …

Linux 系统盘空间不足,想要将 Docker 镜像和容器数据迁移到数据盘

摘要&#xff1a;大家在Linux上用Docker部署项目的时候&#xff0c;有时候会部署多个项目&#xff0c;系统盘空间不足&#xff0c;数据盘又挂载有很多空间&#xff0c;这时候就会想要将 Docker 镜像和容器数据迁移到数据盘&#xff0c;本文主要讲解迁移步骤和迁移过程中遇到的一…

轮转数组 给定一个整数数组 nums,将数组中的元素向右轮转 k 个位置,其中 k 是非负数

示例 1: 输入: nums [1,2,3,4,5,6,7], k 3 输出: [5,6,7,1,2,3,4] 解释: 向右轮转 1 步: [7,1,2,3,4,5,6]向右轮转 2 步: [6,7,1,2,3,4,5] 向右轮转 3 步: [5,6,7,1,2,3,4]示例 2: 输入&#xff1a;nums [-1,-100,3,99], k 2 输出&#xff1a;[3,99,-1,-100] 解释: 向右…

Spring-IOC容器-ApplicationContext

IOC:Inversion of Control 控制反转&#xff0c;是一种设计原则&#xff0c;spring 中通过DI&#xff08;dependency Injection&#xff09;来具体实现。 比如原本对象的实例化&#xff0c;是通过程序主动New出来&#xff0c;IOC中的对象实例交给Spring框架来实例化&#xff0…

形而上学(Metaphysics)

讯飞星火 形而上学&#xff08;Metaphysics&#xff09;是哲学的一个门类&#xff0c;主要研究世界的本质、存在者的存在原因及本源等问题。它旨在探讨超越物理世界的抽象概念和原则 。 形而上学最早由亚里士多德提出&#xff0c;被称为“第一哲学”或“第一科学”。这个术语…

基于R语言的统计分析基础:使用dplyr包进行数据操作

dplyr是R语言中一个功能强大且流行的数据操作包&#xff0c;它提供了一系列用于数据清洗、转换、汇总和可视化的工具。这些工具包括选择列、过滤行、排序、添加或修改列、汇总数据以及分组和合并数据集的函数。dplyr的设计使得数据操作变得简单直观&#xff0c;同时保持高性能&…

鹏哥C语言自定义笔记重点(67-)

67. 68. 69. 70. 71.结构体内容 72.理解结构体的字节数 73. #pragma once //头文件中使用&#xff0c;功能是:防止头文件被多次引用 74.结构体传参 结论:结构体传参时&#xff0c;要传结构体地址。 75.位段 76.static是只能在该文件中看到&#xff0c;其他地方看不到 77.…

Linux 文件 IO 管理(第一讲)

Linux 文件 IO 管理&#xff08;第一讲&#xff09; 回顾 C 语言文件操作&#xff0c;提炼理解新创建的文件为什么被放在可执行文件的同级目录下&#xff1f;上述 log.txt 何时被创建&#xff1f;又是谁在打开它&#xff1f;那文件没有被打开的时候在哪里&#xff1f;一个进程可…

柳淘鸿美业大健康:开启消费赚钱新时代!

随着消费升级和健康意识的不断提高&#xff0c;柳淘鸿美业大健康正式宣布开启消费赚钱新时代&#xff01;这家引领行业潮流的公司以其创新的商业模式和独特的产品组合&#xff0c;正在改变人们对美业和健康产业的认知。 柳淘鸿美业大健康作为国内领先的新零售赋能中心&#xf…

19. 网络结构搭建实例

网络结构搭建实例 1. 网络结构图 图示为适应 cifar10 数据集的一个网络结构图&#xff0c;本文主要针对于复现如下网络结构&#xff0c;并介绍相关函数的使用 2. 网络结构各层参数分析 复现网络结构前需要对各层的参数进行分析 第一层&#xff1a;Input (3*32*32) --> C…

2024年<9月版>宠物空气净化器推荐,希喂、霍尼韦尔、IAM吸毛吗

宠物空气净化器现在是每个养宠家庭都必不可少的家电&#xff0c;我们可以没有吸尘器、扫地机器人&#xff0c;但绝对不能没有宠物空气净化器&#xff01;有了宠物空气净化器就可以帮我们解决浮毛这一大难题&#xff0c;特别是换季时节&#xff0c;宠物开始换毛&#xff0c;有了…

leetcode hot100_part4_子串

2024/4/20—4/21 560.和为K的子数组 前缀和哈希表&#xff0c;做二叉树的时候也有这个套路。注意细节&#xff0c;遍历到当前前缀和的时候是先找结果个数还是先加入哈希&#xff1f;应该先找结果个数&#xff0c;不然的话&#xff0c;当前位置也算上了&#xff08;因为是前缀和…

【网络安全】-文件上传漏洞

文件操作漏洞包括文件上传漏洞&#xff0c;文件包含漏洞&#xff0c;文件下载漏洞。 文章目录 前言 什么是文件上传漏洞&#xff1f; 文件上传的验证与绕过&#xff1a; 1.前端js验证&#xff1a;   Microsft Edge浏览器&#xff1a; Google Chrome浏览器&#xff1a; 2.后端…

【jvm】记一次hive堆heap内存溢出的排查

先看下java的内存模型 监控jvm工具&#xff1a;visualVM 摘录一下内容&#xff1a; 由c开发的jvm&#xff0c;它巧妙地设计了java的设计理念——即万物皆对象。并设计了这些对象应该如何存储&#xff0c;如何调用&#xff0c;并通过不断迭代设计让对象的存储和回收&#xff0…

最新安装vmware地址(官网找半天没找到)

CDS Repository - /var/www/public/stage/session-120/cds/vmw-desktop 直接走这个点进去&#xff0c;windows点ws&#xff0c;linux和mac点fusion进去下对应版本 win为例子&#xff1a;CDS Repository - /var/www/public/stage/session-50/cds/vmw-desktop/ws/17.6.0/242380…

MyBatis中一对多关系的两种处理方法

目录 1.多表联查&#xff08;通过collection标签的ofType属性&#xff09; 1&#xff09;mapper 2&#xff09;mapper.xml 3&#xff09;测试代码 4&#xff09;测试结果 2.分布查询(通过collection标签的select属性) 1&#xff09;mapper 2&#xff09;mapper.xml 3&#xff0…

铁路输电线路异物检测数据集

铁路输电线路异物检测数据集&#xff0c;共6GB&#xff0c;14000余图像&#xff0c;40000标注&#xff0c;标注鸟巢&#xff0c;塑料袋&#xff0c;气球&#xff0c;漂浮物四大类。coco格式标注。 项目背景&#xff1a; 铁路输电线路是保障铁路运输安全的重要组成部分&#xf…

Golang | Leetcode Golang题解之第405题数字转换为十六进制数

题目&#xff1a; 题解&#xff1a; func toHex(num int) string {if num 0 {return "0"}sb : &strings.Builder{}for i : 7; i > 0; i-- {val : num >> (4 * i) & 0xfif val > 0 || sb.Len() > 0 {var digit byteif val < 10 {digit 0…