banner
Barry

Barry

偶尔摆烂,经常偶尔.
twitter
github
tg_channel
medium
email
steam_profiles

步入Linux的现代方法

基于Frank's Linux 课程的笔记

0.0 系统的认识#

  • 什么是系统?
  • 鼠标能点、键盘能输入东西、阅读看电影,还可以拓展安装一些软件, 简单来说就是人机交互所依赖的东西,开机依赖系统

0.1 Linux 操作系统认识,以及开源的提出:Linux 的千奇百怪的版本#

  • 目前世界上流行的电脑系统:
  • Windows- Bill Gates (比尔・盖茨)
  • GNU/Linux-Linus Benedict Torvalds (林納斯・托瓦茲)- 开源
  • Unix (Linux 的爸爸)- 湯普遜和里奇合 - 给政府机关、公司等机构付费使用
  • Linux 发行版本:Ubuntu Centos Red Hat Kali ……

0.2 开源的含义#

  • 公开、分享、共同进步
  • 开源不一定免费

0.3 Linux 的用途,各类发行版本#

  • Linux 主要运用在服务器上
  • Linux 严格来说是单指操作系统的内核,因操作系统中包含了许多用户图形接口和其他实用工具
    只要遵循 GNU 通用公共许可证(GPL),任何个人和机构都可以自由地使用 Linux 的所有底层源代码,也可以自由地修改和再发布
    Linux 衍生:
  • Debian—Ubuntu,Deepin,Raspberry Pi OS,Knopix
    Fedora—RedHat,Centos,Moblin
    OpenSUSE—GeckoLinux,openSUSE EcoLab Spin

1.1 Vmware 虚拟机#

安装系统的方式

  • 实体机

  • 双系统

  • 虚拟机

1.2 VMware 16#

  • 软件版本,大多数人追求新版本,企业里更多需要的是稳定,我们应该根据企业标准去学习,企业要什么我们学什么

1.3 关于从 15 更新到 16 的说法#

  • Vmware15 不支持 Ubuntu20.04

    更新版本并不会影响虚拟机的还原

2.1 先尝试 Ubuntu#

详见:Linux (Ubuntu) 零基础体验教学

PS:查看软件安装过执行内容,有助于学习

2.2 VMware Tools#

  • 配置 Ubuntu 镜像源
  • VMware Tools 安装
tar zxvf VMwareTools-10.3.22-15902021.tar.gz \
cd vmware-tools-distrib/
ls
sudu ./vmware-install.pl

2.3 Ubuntu 20.04 设置#

详见 2.1 视频链接

2.4 Linux 其他发行版本的安装指导#

  • 商业发行版
  • 社区发行版

2.5 下载指导#

  • 从官网下载

3.1 Linux 究竟需要我们学习什么?——Linux 四大组成部分#

Linux 入门不是学 “Linux”,先体验各发行版 Linux,比较和其他系统的不同和相同点,Linux 究竟学习的是 Shell

Linux 操作系统四个部分

  • Linux Kernel 内核
  • GNU (“GNU’s Not Unix!”) 工具
  • GUI Desktop 环境
  • Application 应用
  • PS:IT 术语,它并不是遵循通常的英语音标,而是专业术语

3.2 Linux 是命令还是图形界面?——GUI 是什么? 那 GNU 是什么东西?GNU/Linux 和 Linux 有什么区别?#

Linux 内核基于

  • GUI - 界面

  • GNU - 命令、系统工具

3.3 Linux 内核组成部分#

Linux Kernel

  • 1. 硬件设备的管理
  • 2. 软件程序 (系统)、操作软件
  • 3. 系统内存
  • 4. 文件管理

3.4 文件系统#

文件系统就是读、写标准

  • Linux 中分区概念 ext ext2 ext3 ext4
  • Windows 磁盘文件管理概念 FAT32 NTFS exFAT

3.5 GNU 核心: coreutils and shell#

GNU 组织
Unix 上具有的一些软件,Linux 内核本身没有,所以 GNU 他们模仿 Unix,为 Linux 写了一些必要的软件

GNU 核心 Coreutils
指原本在 Unix 上的一些命令和工具,被移植到了 Linux 上,供 Linux 使用的一套工具、coreutilities 软件包,包括:

  • 用来处理文件的工具

  • 用来操作文本的工具

  • 用来管理进程的工具

  • GNU 核心 Shell

  • 提供给用户使用的软件,用户拿它使用电脑,实现交互

  • 命令行壳层提供一个命令行界面(CLI)

  • 图像壳层提供一个图形用户界面(GUI)

3.6 Shell:CLI 和 GUI,命令和界面#

Shell 类型:bash,zsh,korn,tcsh,oh-my-zsh

3.7 GUI Desktop#

Xwindows,KDE,GNOME,Unity
结束语:经验介绍
重点在于 Shell
画思维图总结 Linux 操作系统关系

4.1 CLI 准备#

  • CLI 相关设置,选择 Preferences
  • Theme Variant 主题变换
    Open new terminals in 打开一个新终端的方式,Tab 代表在同一窗口下创建新终端,Window 代表开一个新窗口打开新终端
    New tab position 新终端位置,默认为上一次位置
  • 快捷方式设置,Ctrl+Alt+T 打开新终端

4.2 CLI Terminal#

yeats@yeats-virtual-machine:~$
  • 用户名 @机器名:当前所在目录 $ 表示等待用户输入
  • ~ 表示用户 home 目录
  • /home是存放所有用户文件的根目录

Settings 中 About 可以查看机器名与相关信息

4.3 搞定 Linux 命令参数,得心应手使用各类命令 —— 授之于渔 先拿 ls 开张#

  • ls命令 用来显示目标列表,在 Linux 中是使用率较高的命令
  • ls -l 的缩写就是 ll ,列出当前目录可见文件详细信息,输出的信息从左到右依次包括文件名、文件类型、权限、硬链接数、所有者名、组名、大小(byte)
  • man命令是 Linux 下的帮助指令,通过 man 指令可以查看 Linux 中的指令帮助、配置文件帮助和编程帮助等信息

推荐:Linux 命令搜索

Linux 命令搜索

4.4 Linux 根目录,它们和 Windows 有什么区别#

  • Windows 盘符,文件目录 \ 反斜线
  • Linux 一切皆文件,文件目录 / 斜线

4.5 Linux 根目录解析,fhs 权威论文,搞定所有的发行版本文件夹分布#

  • / linux根目录
  • /bin 二进制目录 GUN 工具 命令
  • /cdrom 光盘
  • /etc 系统配置文件
  • /home 用户主目录
  • /lib 库目录 存放库文件
  • /lost+found 当系统发生错误时,将一些遗失的片段放置在这个目录下
  • /mnt 挂载(外在的设备和电脑进行连接)目录
  • /proc 伪文件系统
  • /run 运行目录
  • /snap 包管理,软件包安装管理方式
  • /tmp 临时目录
  • /var 可变目录
  • /boot 启动目录
  • /dev 设备目录
  • /media 媒体目录
  • /opt 可选目录
  • /root root 用户的主目录 管理员
  • /sbin 系统二进制目录,GNU 高级管理员使用的命令或工具
  • /srv 服务目录
  • /usr 用户二进制目录,GNU 工具
  • 详见:FHS 文件系统层级标准

FHS 文件系统层级标准

4.6 cd 命令#

  • cd 进入用户主目录
  • cd.. 切换到上一层
  • cd – 返回到上一次的工作目录。

4.7 Ctrl + C? 拉到吧,在 Linux 上可不是复制#

  • Ctrl+c (kill foreground process) 发送 SIGINT 信号给前台进程组中的所有进程,强制终止程序的执行
  • Ctrl+l 清屏

4.8 绝对路径#

  • 全路径 D:\Study\Frank_FuckPPT\Linux

4.9 相对路径#

  • 不全路径 \Frank_FuckPPT\Linux

4.10 Linux 上的路径与 Windows 上的路径#

  • gedit /Doucument/doc/1.txt 操作根目录 绝对路径
  • gedit ~/Document/doc/1.txt 当前目录 相对路径
  • gedit ./Document/doc/1.txt 当前目录 相对路径
  • gedit Document/doc/1.txt 当前目录 相对路径

4.11 如何练习?经验课#

  • 单点符号。当前文件
  • 双点符号.. 当前目录的父目录

4.12 ls 进阶用法:文件夹下各种匹配过滤符号#

  • *号替代多个符号
  • 号替代一个符号
  • -a,,--all 列出目录中所有文件,包括以 “.” 开头的文件
  • -l, --format=long,--format=verbose除每个文件名外,增加显示文件类型、权限、硬链接数等信息
  • -F,--classify, --file-type在每个文件名后附上一个字符以说明该文件的类型

4.13 touch 命令#

touch命令 两个功能

  • 一是用于把已存在文件的时间标签更新为系统当前的时间(默认方式)
  • 二是用来创建新的空文件

4.14 cp 命令#

  • cp命令 将源文件或目录复制到目标文件或目录中
  • 源文件:制定源文件列表。默认情况下,cp 命令不能复制目录,如果要复制目录,则必须使用 - R 选项
  • 目标文件:指定目标文件。当 “源文件” 为多个文件时,要求 “目标文件” 为指定的目录
  • cp 你想复制的文件? 你想复制到哪?
  • -i 覆盖既有文件之前先询问用户
  • -R/r递归处理,将指定目录下的所有文件与子目录一并处理

4.15 cp 递归练习技巧#

pwd 显示当前工作目录

cp -R ./*.java ~/Documents/temp/

4.16 Linux 终端光标移动技巧#

  • Tab 自动补全
  • Ctrl + E 跳到行尾
  • Ctrl + B 光标向左移动
  • Ctrl + H 删除光标前一个字符 相当于退格
  • Ctrl + T 把光标前一个字符往后移动
  • Ctrl + R 搜索之前用过的命令
  • Ctrl + W 删除光标前一个单词
  • Ctrl + U 删掉光标前面的内容
  • Ctrl + K 删掉光标后面的内容

4.17 lnk 链接文件的介绍#

  • .lnk 快捷方式

  • Linux 链接文件

  • 1. 符号链接 (软链接)

    指快捷方式 原来的文件 / 文件夹必须存在

  • 2. 硬链接

    指副本 原来的文件 / 文件夹必须存在

4.18 符号链接和硬链接#

  • ln命令 用来为文件创建链接,链接类型分为硬链接和符号链接两种,默认的链接类型是硬链接。如果要创建符号链接必须使用 "-s" 选项
  • ln 原文件名 链接的文件名
  • ls -l 查看
  • 软链接:有指向,是一个单独的文件,不同介质
  • 硬链接:无指向,同一介质
  • 软链接复制的是链接文件

4.19 注意事项#

  • 符号链接 Symbolic links
  • 软链接 Soft links

4.20 mv 命令#

  • mv 命令 用来对文件或目录重新命名,或者将文件从一个目录移到另一个目录中
  • 做重命名,mv 重命名谁 命名成什么

4.20 移动和骚操作#

  • 做移动,mv 移动的文件 移动到的目录
  • 输入完之后,cd !$
  • !$ 是列出并执行你的命令历史里面最近的一条记录

4.21 rm—— 最佳年度删库跑路#

  • sudo rm -rf /* 该命令极度危险
  • rm 命令可以删除一个目录中的一个或多个文件或目录,也可以将某个目录及其下属的所有文件及其子目录均删除掉。对于链接文件,只是删除整个链接文件,而原有文件保持不变
  • rm -i 有提示
  • rm -i -rf 无提示
  • 注意: linux 没有回收站

4.22 创建文件夹以及删除文件夹#

  • mkdir 用来创建目录
  • rmdir 用来删除空目录

4.23 文件类型#

  • file用来探测给定文件的类型
  • Windows 文本是 txt
  • linux 文本是 text

4.24 cat ,more ,less#

  • cat 连接多个文件并打印到标准输出,适用于短文本
  • -n, --number 对所有行编号,从 1 开始编号
  • more 显示文件内容,每次显示一,以全屏方式显示
  • b 上一页 space 下一页 q 退出
  • less分屏上下翻页浏览文件内容
  • less命令允许用户向前或向后浏览文件,而more命令只能向前浏览。
  • less命令显示文件时,用 PageUp 键向上翻页,用 PageDown 键向下翻页。要退出 less 程序,应按 Q 键
  • 浏览文件中输入 / 用于搜索

4.25 tail 和 head 命令#

  • tail 在屏幕上显示指定文件的末尾若干行

    tail -n 2 demo.c
    
  • head 显示文件的开头部分

    head -n 2 demo.c
    

5.1 任务管理器#

  • 进程、性能、用户、服务
  • 服务:监测用户行为,为用户服务

5.2 ps 和 top 命令#

  • top 可以实时动态地查看系统的整体运行情况,是一个综合了多方信息监测系统性能和运行信息的实用工具
  • ps (process status) linux 最复杂的命令之一,是最基本同时也是非常强大的进程查看命令,使用该命令可以确定有哪些进程正在运行和运行的状态、进程是否结束、进程有没有僵死、哪些进程占用了过多的资源等等,总之大部分信息都是可以通过执行该命令得到的
  • ps axo pid,comm,pcpu # 查看进程的 PID、名称以及 CPU 占用率
  • ps -aux | grep named # 查看 named 进程详细信息

5.3 kill 命令#

配合ps -aux | grep named # 查看 named 进程详细信息
kill pid 杀死进程

5.4 挂载的含义#

详见:linux 挂载的作用 (https://blog.csdn.net/qq_35583154/article/details/86569903)

插入新硬盘,分了新磁盘区 sdb1,但它现在还不属于 /, 把新硬盘的区 sdb1 挂载到工作目录的 / Share / 文件夹下,之后访问这个 / Share / 文件夹就相当于访问这个硬盘的 sdb1 分区了,对 / Share / 的任何操作,都相当于对 sdb1 里文件的操作

5.5 mount#

  • mount 用于挂载 Linux 系统外的文件
  • /mnt 为自动挂载点
  • sudo fdisk -l 查看硬盘及分区信息
  • sudo mount /dev/sdc1 /mnt
  • sudo umount /mnt
  • 自动挂载的目录不能卸载

5.5 挂载的意义 —— 尝试使用 U 盘?自动播放黑客恶意?#

  • 企业里不自动挂载,防止恶意播放脚本 auto 病毒

5.6 安卓设备连接挂载#

  • 安卓链接协议 (SMB) 挂载路径 /run/suer/1000/gvfs

5.7 df 和 du#

  • df 用于显示磁盘分区上的可使用的磁盘空间。默认显示单位为 KB。可以利用该命令来获取硬盘被占用了多少空间,目前还剩下多少空间等信息
  • h--human-readable:以可读性较高的方式来显示信息
  • du 也是查看使用空间的,但是与df命令不同的是 Linux du 命令是对文件和目录磁盘使用的空间的查看,还是和 df 命令有一些区别的

5.8 sort 命令#

  • sort 对文本文件中所有行进行排序
  • 默认对每一行第一个字符排序,并展示出来,并不会改变原来的文件
  • -n--numeric-sort 根据数字排序
  • -M--month-sort 按照非月份、一月、十二月的顺序排序
  • -r--reverse 将结果倒序排列

5.9 grep 基础认识、搜索文件#

  • grep (global search regular expression(RE) and print out the

    line,全面搜索正则表达式并把行打印出来)是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来

  • grep 543 ~/Templates/1.txt

5.10 打包、压缩、归档、解压缩 它们究竟区别在哪?#

  • tar 打包、压缩
  • tar -cvf 1.tar 1.txt 仅打包,不压缩
  • tar -zcvf 1.tar.gz 1.txt 打包后,以 gzip 压缩
  • tar -zxvf /opt/soft/test/1.tar.gz 将 tar 包解压缩

6.1 父子 shell 的概念#

  • bash
  • ps-f
  • ps –forest

6.2 分号在命令里有什么作用#

  • 命令之间带分号 ; 依次执行
  • 创建一个子 shell 去执行

6.3 sleep 和 jobs#

  • sleep 将目前动作延迟一段时间 ,后面可接 s 为秒,m 为 分钟,h 为小时,d 为日数

    挂在后台,如果要干掉,则用kill命令

  • jobs 显示作业的状态,-l 在作业信息中额外的列出 PID

6.4 后台#

  • 后台执行 tar -zxvf ……;&

6.5 coproc 协程#

  • Liunx 协程处理命令。协程可以同时做两件事。在后台生成一个子 shell,并在子 shell 中执行命令
  • coproc sleep 10
  • coproc frank_av{ sleep 10; sleep 300;}
  • 一定要分号结尾,大括号内空格

6.6 外部命令和内建命令#

  • Shell 执行的命令可以分为内建命令(built-in)和外部命令(external) 前者是构建在 shell 内部
  • 后者是一个独立的文件(可以是二进制文件,也可以是一个脚本) 内建命令由当前 shell 本身来执行,例如 echo, cd 等等
  • 外部命令的执行 shell 进程会 fork 一个子进程,父进程随后挂起,然后在子进程中 exec 加载外部文件,子进程返回后,父进程才继续执行

6.7 alias 别名#

  • alias 定义或显示别名。
  • type 显示指定命令的类型。
  • alias li=’ls -li’
  • 但是关闭当前 shell 就不能用了

7.1 什么是环境变量?彻底搞清楚究竟什么是环境变量!!!!!#

  • 环境变量(environment variables)一般是指在操作系统中用来指定操作系统运行环境的一些参数,如:临时文件夹位置和系统文件夹位置等
  • 文件夹写入的环境变量,意味则可以在任何位置访问该文件夹,相当于告诉系统这个目录在哪里

7.2 全局环境变量和局部环境变量#

  • windows: 系统变量与用户变量
  • linux: 全局环境变量和局部环境变量
  • 全局环境变量printenv
  • printenv USER
  • echo $USER
  • cd $HOME

7.3 用户和局部变量的定义#

  • 局部变量只能在当前 shell 执行,子 shell 或者退出后就不能用了
  • 注意 定义局部变量不要大写
  • 全局变量用大写,下划线命名法

7.4 定义全局变量#

  • export 为 shell 变量或函数设置导出属性。
  • 可以子 shell 里执行,但关闭后仍失效

7.5 默认的环境变量#

  • set

7.6 为啥要用环境变量#

  • 配置开发环境需要使用
  • 临时环境变量
  • PATH=$PATH:/home/yeats/Templates/

7.7 永久配置环境变量?#

  • 启动文件:开机的时候默认执行的环境变量

  • bash shell

  • 1 登录 shell

  • 2 非登录就打开 shell

  • 3 运行脚本非交互 shell

  • cat /etc/profile

  • ~/.bashrc

  • ~/.bash_profile

  • ~/.profile

  • ~/.bash_login

  • cat bashrc

  • 加入全局环境变量 (需学习 vim)

8.1 PMS 系统和软件安装的介绍#

  • PMS Package Management System
  • 解决工具依赖问题
  • apt install
  • apt-get install
  • apt-cache
  • aptitude(已淘汰)

8.2 安装、更新、卸载#

  • apt -h
  • 更新 sudo apt update
  • 升级 sudo apt upgrade
  • 卸载 sudo apt remove oneko

8.3 其他发行版本?#

8.4 安装第三方软件案例:例如 github 开源软件的指导#

9.1 用户权限的含义和作用#

  • 用户与权限
  • 不可能让所有人有所有的权限 - 不安全
  • 避免被入侵
  • 用户 ID UID
  • 系统用户 UID<500
  • cat /etc/passwd
  • sudo cat /etc/shadow

9.2 创建、删除、更改用户#

  • 创建sudo useradd user1
  • 删除sudo userdel user1
  • 更改密码sudo passwd user1
  • chage 修改帐号和密码的有效期限

9.3 group#

  • linux 组 groups

    目的 :共享资源的权限

  • tail /etc/group

  • ubuntu 不允许把所有用户纳入一个组,而是每个用户都有一个单独的组

  • sudo groupadd groupfrank

  • sudo groupdel groupfrank

9.4 文件、文件夹权限#

rwx 文件所有者(Owner)组创始人的权限
r-x 用户组(Group)组下属成员权限
r-x 其它用户(Other Users)其它组成员权限

详见:Linux chmod 命令(Linux chmod 命令 | 菜鸟教程 (runoob.com)

9.5 chmod 命令#

  • usermod命令 用于修改用户的基本信息。
  • usermod 命令不允许你改变正在线上的使用者帐号名称。
  • usermod 命令用来改变 user id,必须确认这名 user 没在电脑上执行任何程序

附上:vi/vim 键盘图#

vi/vim 键盘图

10.1 编辑器简单介绍:vim 编辑器之神; emac 神之编辑器#

  • emacs - 神之编辑器
  • vim - 编辑器之神
  • Vim 是从 vi 发展出来的一个文本编辑器。代码补完、编译及错误跳转等方便编程的功能特别丰富,在程序员中被广泛使用。和 Emacs 并列成为类 Unix 系统用户最喜欢的编辑器
  • vi 编辑器通常被简称为 vi,而 vi 又是 visual editor 的简称 。它可以执行输出、删除、查找、替换、块操作等众多文本操作,而且用户可以根据自己的需要对其进行定制,这是其他编辑程序所没有的
  • Vim 是 vi 的加强版,比 vi 更容易使用。vi 的命令几乎全部都可以在 vim 上

10.2 vim 的简单使用方式#

  • 安装 vim
  • sudo apt install vim

vim 工作模式,国外一般认为两种模式#

  • 普通模式 (命令操作模式):操作文件

  • 插入模式:编辑

  • 编辑模式到普通模式:ESC

国内一般认为三种模式#

  • 一般命令模式:简称一般模式,也是最先进入的工作模式,输入 vi + 文件名可直接进入一般命令模式,在此模式下可进行文本内容的查看、复制、删除、替换等功 能。当不能输入相关文本内容

  • 编辑模式:在一般模式下,输入 i 或 o 或 a 进入编辑模式,在此模式下可输入文本内 容。当输入 i 时,工作界面如图所示,只有此时状态才可以输入文件内容。输 入完成后,可单击 ESC 键退出编辑状态,进入一般模式

  • 命令行模式:在一般模式下,输入:或 / 或?进入命令行模式,在此模式下可输入相关命令当输入:wq 此时命令表示保存退出命令,单击回车键,自动保存文件,并退 出 vi 编辑器或者单击 ESC 键,重新返回一般模式

三种工作模式关系如图所示#

VIM 三种工作模式关系

vim 编辑器的退出,一般分三种情况#

  • :q 表示不保存退出
  • :wq 保存退出
  • :q!强制退出,此时也不保存文件

10.3 移动光标#

  • 上:k
  • 下:j
  • 左:h
  • 右:l
  • 下一行:b
  • 上一行:w
  • 查找上一处字符:N
  • 查找下一处字符:n

10.4 翻页#

  • 上翻页 (BACKWARD):ctrl+B
  • 下翻页 (FORWARD):ctrl+F
  • 上滚:ctrl+E
  • 下滚:ctrl+Y
  • 移动到最后一行:G 或者shift+g
  • 移动到第一行:gg

10.5 不同方式编辑文本、跳跃单词操作技巧#

  • i光标位置的前面插入
  • a 光标位置后面的插入
  • o 直接 enter 到下一行
  • x 删除光标所在字符
  • dd 删除整个一行
  • u 撤销
  • dw 移除当前所在光标往后到单词
  • b 跳跃单词首字母
  • e 跳跃单词最后
  • w 跳跃单词 先跳跃到单词首字母,然后跳跃到单词最后
  • shift+w ;shift+b大跳

10.6 跳跃行首行尾技巧#

  • shift+6 或者0 跳跃到本行到开头
  • shift+4 跳跃到本行末尾

10.7 大括号跳跃函数段落技巧#

  • {}跳跃大括号

10.8 vim 复制剪切粘贴#

  • p粘贴
  • yw复制一个单词
  • y$ 从当前开始往后复制到行末尾

10.9 Visual 可视化模式#

  • v 选择文本
  • V 选择行
  • v G 全选
  • ctrl+v矩阵选择
  • o切换文本首尾
  • vaw快速选择单词
  • vab包括括号
  • vaB包括大括号
  • va< 包括尖括号

10.10 视图模式其它技巧#

  • v shift+<往左缩进
  • v shift+>往右缩进
  • shift+~或者shift+u shift+U大小写转换

10.11 查找和替换#

  • 查找 /
  • 按 n 查找下一个
  • :s /const/let/g 一行 const 替换成 let
  • :%s /const/let/g 所有 const 替换成 let
  • set number 临时显示行号
  • :9,15s /const/let/g 9-15 行 const 替换成 let
  • :%s /const/let/gc 有提示的替换

10.12 vim 的基础配置#

  • touch .vimrc
  • vim .vimrc

将以下代码写入.vimrc 中

set syntax=on
set tabstop=4
set softtabstop=4
set number
set enc=utf-8
set showmatch
  • source .vimrc
Loading...
Ownership of this post data is guaranteed by blockchain and smart contracts to the creator alone.