Linux教程

Linux常用命令

本文主要是介绍Linux常用命令,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

Linux常用命令

文章目录

  • Linux常用命令
    • pwd:printing work directory(打印当前所在路径)
    • mkdir:make directories
    • rmdir:remove empty directories
    • vim:vim - Vi IMproved, a programmer's text editor
    • touch:
    • cat:cat - concatenate files and print on the standard output
    • head:
    • cp:copy
    • mv:move
    • ls(ls - list directory contents)
    • su(su - run a command with substitute user and group ID)
    • 文件属性
      • 第一个字母:
      • 权限(10位)
      • 权限的添加和移除:
      • 文件默认创建权限反掩码
      • 特殊权限
        • `setfacl - set file access control lists`
          • 按用户
          • 按组
          • `setfacl -x g:zhangsan secret`删除允许命令
        • getfacl 查看acl
      • 隐藏权限
      • 硬链接
      • 软硬链接的区别:
    • du 用来统计指定目录下大小(disk usage)
    • 文件时间(stat)
      • stat显示出的其他信息
      • 文件的三个时间
    • date(date - print or set the system date and time)
    • clock和hwclock(query or set the hardware clock (RTC))
    • cal(cal - display a calendar)
      • 思考:1752年9月为什么少了11天?
    • cat(cat - concatenate files and print on the standard output)
    • 文件系统层级结构
    • file(file — determine file type)
    • type(查看命令类型)
      • 变量:
      • 环境变量:
    • alias(别名)
    • hash
      • 小实验:
    • 用户管理
      • 3A认证
      • 用户,组,权限
      • useradd:
    • usermod 修改用户相关信息
      • userdel 删除用户
      • id 查看用户的ID信息,选项同useradd
    • 组管理
      • groupadd 添加一个组
      • groupdel 删除一个组 (不能删除基本组)
      • groupmod 修改一个组
    • chown: change file owner and group
    • 软件安装
    • rpm:rpm - RPM Package Manager
    • tar:tar - an archiving utility
    • RedHat8MySQL安装:

pwd:printing work directory(打印当前所在路径)

basename:

mkdir:make directories

mkdir -p test1/test2/test3 递归创建

rmdir:remove empty directories

只能删除空目录

vim:vim - Vi IMproved, a programmer’s text editor

命令模式:按esc键可回到命令模式

  • dd 删除当前行
  • dw 按单词删除
  • u 撤销当前操作
  • ctrl+r 重做
  • yy 复制光标所在行
  • 2yy 复制光标所在行和光标下一行
  • p 粘贴到光标下一行
  • cc 剪切
  • 行数cc 剪切当前行开始的几行
  • x 删除光标所在位置的内容
  • w, 按单词进行移动光标
  • gg 跳转到文档首部行首
  • dgg 删除光标至文档首部
  • G 跳转到文档尾部行首
  • 串1/字符串1 查找字符
  • $ 行尾
  • ^ 行首
  • j 往下(后)按行移动光标
  • h 往左按字符移动光标
  • k 往上(前)按行移动光标
  • l 往右按字符移动光标
  • H 跳转到当前屏幕输出的最上面一行
  • L 跳转到当前屏幕输出的最下面一行
  • M 跳转到当前屏幕输出的中间那一行

插入模式:

  • i 在光标前插入
  • I在光标所在行行首插入
  • a 在光标后插入
  • A 在光标所在行末尾插入
  • s 删除光标所在位置字符并插入
  • S 删除光标所在行并插入
  • o 在光标所在行下一行插入
  • O 在光标所在行上一行插入

末行模式:

  • :wq 保存退出
  • :q 退出(未修改文件内容才可以退出)
  • :wq! 强制保存退出
  • :q! 强制退出,不保存
  • :set nu 显示行号
  • :set nonu 不显示行号
  • :行号 跳转到指定行号
  • :3,5 d 删除3-5行
  • :r 文件名1 读出文件1的内容到当前文件里
  • :%s/字符串2/字符串3 字符串3替换字符串2
  • :%s/1/2/g 将1替换为2,全局修改
  • :w 文件名1 另存为文件名1

touch:

touch test.py 创建空文件,如果文件存在,则修改文件创建时间

cat:cat - concatenate files and print on the standard output

  • cat 文件名 查看文件内容内容

  • cat -n 文件名 查看文件内容,并列出行号

head:

  • head 文件名 显示文件头几行(默认显示10行)

  • head -n 20 文件名 显示文件前20行

  • head -n -20 文件名 显示文件最后20行

  • ctrl + c 强制终止查看模式

  • ctrl + l 清屏

cp:copy

  • cp 源文件 目标位置/目标名称 (复制并改名)

  • cp -r 复制目录

  • cp -p 连带文件属性一起复制

  • cp -d 若源文件是链接文件,则复制链接属性

  • cp -a 相当于 cp -pdr

mv:move

  • mv 源文件 目标位置

  • mv /root/test /tmp/ 将/root/下的test文件移动到/tmp/目录下

  • mv /root/test /root/newtest 将/root/下的test文件改名为newtest

ls(ls - list directory contents)

  • ls -l 以长列表方式列出 =ll
  • ls -r 逆序列出
  • ls -d 查看当前目录.
  • ls -ld 长列表列出当前目录的详细信息
  • ls -lh 显示目录或文件大小
  • ls -a 列出隐藏文件,包括.和…
  • ls -A 列出隐藏文件,不包括.和…
  • ls -i 显示文件索引节点号(inode)。一个索引节点代表一个文件,在linux中保存在磁盘分区中的文件都给它分配一个编号,称为索引节点号inode。

注:…表示父目录;.表示当前目录

su(su - run a command with substitute user and group ID)

  • su USERNAME 不切换用户目录
  • su - 切换用户目录
  • su - 切换到root用户
    在这里插入图片描述

文件属性

drwxr-xr-x. 3 1001 1001 18 4月 25 2011 help

第一个字母:

-	普通文件f
d	目录文件directory
l	符号链接文件link;软链接(快捷方式)
b	块文件block(存放文件的格式)随机读,随机存的设备
c	字符设备character(顺序存取)
s	套接字文件socket	(ip+port)
p	管道文件pipe

权限(10位)

rwxr-xr-x.

前三个:该文件拥有者对文件的权限;

再三个:该文件所属组对文件的权限;

后三个:其他人对该文件的权限

对文件来讲:

  • r:对该文件可读
  • w:对该文件可写
  • x:对该文件可执行

对目录文件来讲:

  • r:列出目录下的文件
  • w:可写
  • x:进入

.

权限的添加和移除:

chmod:chmod - change file mode bits

文件默认创建权限反掩码

默认普通文件没有执行权限:666

umask
在这里插入图片描述
在这里插入图片描述

特殊权限

setfacl - set file access control lists

-m, --modify=acl modify the current ACL(s) of file(s)
-x, --remove=acl remove entries from the ACL(s) of file(s)
-b, --remove-all remove all extended ACL entries

按用户

[root@localhost mydata]# setfacl -m u:zhangsan:r secret

按组

[root@localhost mydata]# setfacl -m g:zhangsan:r secret

[root@localhost mydata]# setfacl -m u:zhangsan:r secret 
[root@localhost mydata]# ll
total 4
-rw-r-----+ 1 root root 18 Apr 30 06:54 secret
[root@localhost mydata]# su zhangsan
cat[zhangsan@localhost mydata]$ cat secret 
zhanghaomima
haha
[zhangsan@localhost mydata]$ exit
exit
[root@localhost mydata]# su lisi
[lisi@localhost mydata]$ cat secret 
cat: secret: Permission denied
[lisi@localhost mydata]$ exit
exit
[root@localhost mydata]# setfacl -m g:zhangsan:r secret 
[root@localhost mydata]# su lisi
[lisi@localhost mydata]$ cat secret 
zhanghaomima
haha

setfacl -x g:zhangsan secret删除允许命令

suid:u+s:可执行文件所属用户的强制位,作用让进程文件的所属用户不再属于发起者的身份,而是程序文件自身的所属用户。

sgid: g+s:可执行文件所属组的强制位,作用让进程文件的所属组不再属于发起者的身份,而是程序文件自身的所属组

o+t --仅对目录设置(在一个公共目录,删除自己的文件,但不能删除别人的文件)

getfacl 查看acl

[root@localhost mydata]# getfacl secret 
# file: secret
# owner: root
# group: root
user::rw-
user:zhangsan:r--
group::---
group:zhangsan:r--
mask::r--
other::---

隐藏权限

chattr - change file attributes on a Linux file system
在这里插入图片描述

lsattr - list file attributes on a Linux second extended file system查看隐藏属性

硬链接

在这里插入图片描述

硬链接次数

软硬链接的区别:

跨分区

属主属组:

第一个表示的是属于哪个拥有者;第二个表示属于哪个组
在这里插入图片描述

数据和原数据

目录文件本身文件的大小,不是文件内容的大小。

du 用来统计指定目录下大小(disk usage)

在这里插入图片描述

文件时间(stat)

man帮助中找到:stat就是显示文件的状态信息

stat - display file or file system status
在这里插入图片描述

stat显示出的其他信息

Flie:显示文件名
Size:显示文件大小
Blocks:文件使用的数据块总数
IO block:IO块的大小
regular flie:文件类型
Device:设备编号
INode:INode号
links:硬链接次数
Access:文件权限
Uid:文件所有者的id
Gid:文件所有组的Id

文件的三个时间

Access Time:atime,文件访问时间,当文件内容被访问后,更新此时间。

Modify Time:mtime,文件内容修改时间,当文件内容修改后,此时间发生改变。

Change Time:ctime,文件状态时间,当文件状态被改变后,更新此时间。例:文件的链接数、大小、权限、Blocks数。

改变Access Time:
在这里插入图片描述

改变Modify Time:
在这里插入图片描述

改变Change Time:
在这里插入图片描述

将三个时间同步:
在这里插入图片描述

date(date - print or set the system date and time)

查看系统时间

注:一般不会更改系统时间,只需要查看

clock和hwclock(query or set the hardware clock (RTC))

查看硬件时间

cal(cal - display a calendar)

查看日历

用法:
cal [选项] [[[日] 月] 年]

选项:

  • -1, --one 只显示当前月份(默认)
  • -3, --three 显示上个月、当月和下个月
  • -s, --sunday 周日作为一周第一天
  • -m, --monday 周一用为一周第一天
  • -j, --julian 输出儒略日
  • -y, --year 输出整年
  • -V, --version 显示版本信息并退出
  • -h, --help 显示此帮助并退出

思考:1752年9月为什么少了11天?

在这里插入图片描述

cat(cat - concatenate files and print on the standard output)

查看文件

用法:cat [选项]… [文件]…
将[文件]或标准输入组合输出到标准输出。

  • -A, --show-all 等于-vET
  • -b, --number-nonblank 对非空输出行编号
  • -e 等于-vE
  • -E, --show-ends 在每行结束处显示"$"
  • -n, --number 对输出的所有行编号

在这里插入图片描述

文件系统层级结构

FHS 文件系统层级结构 非标件 馒头

  • ​ /bin:可执行文件,binary,用户命令
  • ​ /boot:系统启动相关的文件,如内核、initrd以及grub(bootloader)
  • ​ /dev:device设备文件
    • 块设备:可实现随机访问的设备,如磁盘,按数据块访问
    • 字符设备:线性访问的设备,如键盘,以字符为单位
    • 问题?显示器是什么设备?字符设备
    • 设备号:主设备号和次设备号
  • ​ /etc:配置文件,纯文本文件的配置文件
  • ​ /home:家目录,root用户的家目录不在/home目录
  • ​ /lib:library,库文件和内核模块文件
    • 静态库
    • 动态库 在windows中叫dll,在linux中叫so,shared object, vm.so
    • /lib/modules 内核模块文件
    • /lib64
  • /media 挂载点目录,通常挂载光盘,移动硬盘
  • /mnt 挂载点目录,通常挂载其他文件系统
    • 什么是挂载点?光盘放进光驱后,必须要将设备关联到当前文件系统树上的某个节点上,才能进行访问,把某个设备和当前文件系统上某个目录进行关联的这个过程,叫做挂载。
  • /opt optional,可选的目录,其他应用程序的目录
  • /proc process,伪文件系统,该目录保存系统运行时内核的映射文件
  • /root root用户的家目录,在生产环境中不允许用root用户登录
  • /run 进程相关的数据
  • /sbin 管理员命令
  • /srv 系统服务相关数据
  • /sys 伪文件系统,跟硬件设备相关的属性映射文件,可以修改磁盘I/O调度
  • /tmp temp,临时文件目录
  • /usr universal shared read-only,全局只读共享对象,这里存放只读文件;Unix Software Resource自身基本管理
    • /usr/bin
    • /usr/sbin
    • /usr/lib
    • 第三方软件的,不是必须的
    • /usr/local
    • /usr/local/bin
    • /usr/local/sbin
    • /usr/local/lib
  • /var 可变化的文件存放的目录,如/var/log目录,/var/tmp mail

file(file — determine file type)

查看文件类型

在这里插入图片描述

type(查看命令类型)

  • 内置命令(shell内置):bash
  • 外置命令:在文件系统的某个目录下,有个与命令名称相同的文件

变量:

变量是命名的内存空间。

变量赋值:

  • NAME=haha
  • 变量声明的过程就是申请内存使用的过程

在这里插入图片描述

环境变量:

定义当前用户工作环境属性的变量:PATH
在这里插入图片描述

alias(别名)

添加指定命令别名:alias 目标命令名称=‘需要执行的命令串本身’
~/.bashrc

unalias 删除指定的命令别名
在这里插入图片描述

hash

实现缓存管理

缓存,命中率相当高,在hash表中保存了执行过的所有的路径,当缓存很大时,一定比PATH查找速度快吗?

命令:

  • ​ -p /bin/ls haha 添加哈希表
  • ​ -t ls 查看指定命令的哈希表
  • ​ -d ls 删除指定命令的哈希表
  • ​ -r 清空所有的hash表

小实验:

hash既然缓存命令,那我直接修改hash表中的值,变更原来命令;结果是不可行的。

思考:命令是先通过alias进行查找,找到ls后,然后再去查询hash表。
在这里插入图片描述

用户管理

3A认证

  • Authentication: 认证机制,通过某种方案来确认用户是其声称的用户,如密码、生物识别等
  • Authorization: 授权机制,资源使用级别(Linux只有管理员和普通用户两级分配机制,权限)
  • Audition: 审计机制,监督权限的使用 ,log审计凭据—额外审计功能Selinux

用户,组,权限

  • /etc/passwd 用户相关信息
  • /etc/login.defs 设置用户创建时默认相关信息
  • /etc/defualt/useradd 用户添加时会创建的相关信息设置
  • /etc/skel 用户家目录下相关隐藏文件
  • /etc/group 组相关信息
  • /etc/gshadow 组密码
  • /etc/shadow 用户密码
  • /var/spool/mail /var/mail 用户邮箱记录

useradd:

useradd USERNAME or adduser USERNAME

​ -u UID 指定UID

​ -g GID 指定基本组

​ -G GID1,GID2,… 指定附加组

​ -c “注释信息” 指定用户注释信息 chfn

​ -d /path/to/dir 指定某个目录为用户家目录

​ -s /shell 指定用户使用的shell chsh -s

usermod 修改用户相关信息

选项同useradd

​ -u 修改UID

​ -g 修改基本组,基本组必须事先存在

​ -G 这个选项会覆盖之前的附加组,和-a选项配合使用

​ usermod -a -G 追加附加组

​ -c 修改用户注释信息

​ -s 修改用户shell

​ -l 修改登陆名

userdel 删除用户

​ userdel USERNAME

​ -r 删除用户时删除用户家目录和用户的邮箱

id 查看用户的ID信息,选项同useradd

​ -u 显示UID

​ -G 显示附加GID

​ -g 显示GID

组管理

groupadd 添加一个组

​ -n

​ -g GID

​ -r 添加系统组

groupdel 删除一个组 (不能删除基本组)

groupmod 修改一个组

​ -g GID

​ -n GRPNAME 修改组名

chown: change file owner and group

  • chown 用户名 文件名 改变文件属主

  • chown user1 aa user1必须存在

  • chown user1:user1 aa 改变属主同时改变属组

软件安装

rpm:rpm - RPM Package Manager

  • rpm -ivh 包名.rpm 安装 i表示安装,v表示列出安装过程,h表示写进哈希表里面。
  • rpm -e 包名 卸载 只需要写报名就可以 了。
  • rpm -qa 查看系统上安装了哪些rpm包
  • rpm -qa | grep tree 查看是否安装了tree包
  • rpm -ql 包名 装包时装了什么文件
  • rpm -qf 文件名 查看文件由那个安装包产生

yum:dnf: DNF is the next upcoming major version of YUM

配置yum仓库:
在这里插入图片描述

dnf install 安装

yum install

dnf remove 卸载

yum install

tar:tar - an archiving utility

linux上常见的压缩命令就是gzip与bzip2

压缩文件gzip: gzip 文件名(原文件不存在)

gzip -c 文件名1 >文件名1.gz (保留原文件)

解压文件: gzip -d 文件名.gz(不保留)

gunzip 文件名.gz

gzip -cd 文件名2.gz >文件名2(保留原文件)

查看压缩过的文本文件内容:zcat 文件名.gz

压缩文件bzip2(用法同gzip):bzip2 文件名

bzip2 -c 文件名1 >文件名1.bz2(保留原文件)

解压文件: bzip2 -d 文件名.bz2(不保留原文件)

bunzip2 文件名.bz2

bzip2 -cd 文件名2.bz2 > 文件名2(保留原文件)

查看压缩过的文件内容:bzcat 文件名.bz2

文件的归档即打包文件:tar [主选项+辅选项] 文件或目录 tar

主选项:只能出现一个主选项

c— create 创建一个新归档文件 (打包文件)

x— 从归档文件中提取文件出来

t— 列出归档文件的内容,查看已经打包了哪些文件,重点在查看文件名

辅选项

z—通过gzip的支持进行压缩/解压缩,一般格式为*.tar.gz

​ j— 通过bzip2的支持进行压缩/解压缩,一般格式为*.tar.bz2

J—通过xz的支持进行压缩/解压缩,一般格式为*.tar.xz

v— 归档或解包过程中显示被打包的文件

C—这个参数用在解压缩时,若要在特定目录解压缩,可以使用这个参数

f— 输出结果到文件,必须写该选项

–exclude=FILE在打包的过程中,不要将 FILE 打包! --排除某个文件打包

常见的两种压缩方式:jcvf zcvf

打包、压缩文件1和2并重命名:tar zcvf 新文件名 文件名1 文件名2 文件名3 文件名4

解压:tar xvf 文件名 该命令会自动判断归档文件的压缩格式,自动调用相关程序进行解压缩

解压到指定路径:tar xvf 文件名 -C 目标路径

tar -xjv -f filename.tar.bz2 -C 欲解压缩的目录

查看已压缩文件:tar tf 文件名

创建 xz 格式文件

方法一:

也是用到两步命令,首先利用 tar 命令将 linux-3.12 文件夹打包成 linux-3.12.tar,其次用 xz-utils 的 xz 命令将 linux-3.12.tar 压缩成 linux-3.12.tar.xz。

tar -cf linux-3.12.tar linux-3.12/

xz -z linux-3.12.tar

方法二(推荐)

tar -Jcf linux-3.12.tar.xz linux-3.12/

1. 解压 xz 格式文件

方法一:

需要用到两步命令,首先利用 xz-utils 的 xz 命令将 linux-3.12.tar.xz 解压为 linux-3.12.tar,其次用 tar 命令将 linux-3.12.tar 完全解压。

xz -d linux-3.12.tar.xz

tar -xf linux-3.12.tar

方法二(推荐)

tar -Jxf linux-3.12.tar.xz

RedHat8MySQL安装:

安装MySQL包

dnf install @mysql:8.0

启动mysqld服务

systemctl enable --now mysql

初始化数据库

mysql_secure_installation

录入初始权限

[root@localhost ~]# mysql_secure_installation

Securing the MySQL server deployment.

Connecting to MySQL using a blank password.

VALIDATE PASSWORD COMPONENT can be used to test passwords
and improve security. It checks the strength of password
and allows the users to set only those passwords which are
secure enough. Would you like to setup VALIDATE PASSWORD component?

Press y|Y for Yes, any other key for No: y

There are three levels of password validation policy:

LOW    Length >= 8
MEDIUM Length >= 8, numeric, mixed case, and special characters
STRONG Length >= 8, numeric, mixed case, special characters and dictionary                  file

Please enter 0 = LOW, 1 = MEDIUM and 2 = STRONG: 0
Please set the password for root here.

New password: 

Re-enter new password: 

Estimated strength of the password: 25 
Do you wish to continue with the password provided?(Press y|Y for Yes, any other key for No) : y
 ... Failed! Error: Your password does not satisfy the current policy requirements

New password: 

Re-enter new password: 

Estimated strength of the password: 50 
Do you wish to continue with the password provided?(Press y|Y for Yes, any other key for No) : y
By default, a MySQL installation has an anonymous user,
allowing anyone to log into MySQL without having to have
a user account created for them. This is intended only for
testing, and to make the installation go a bit smoother.
You should remove them before moving into a production
environment.

Remove anonymous users? (Press y|Y for Yes, any other key for No) : y
Success.


Normally, root should only be allowed to connect from
'localhost'. This ensures that someone cannot guess at
the root password from the network.

Disallow root login remotely? (Press y|Y for Yes, any other key for No) : no

 ... skipping.
By default, MySQL comes with a database named 'test' that
anyone can access. This is also intended only for testing,
and should be removed before moving into a production
environment.


Remove test database and access to it? (Press y|Y for Yes, any other key for No) : no

 ... skipping.
Reloading the privilege tables will ensure that all changes
made so far will take effect immediately.

Reload privilege tables now? (Press y|Y for Yes, any other key for No) : y
Success.

All done! 
[root@localhost ~]# 
[root@localhost ~]# 
[root@localhost ~]# 
[root@localhost ~]# mysql -uroot -pqwer1234
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 11
Server version: 8.0.13 Source distribution

Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> 
mysql> 
mysql> 
mysql> 
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
4 rows in set (0.01 sec)

例:创建数据库,创建数据表,插入数据,查看数据

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
4 rows in set (0.01 sec)

mysql> create database temp;
Query OK, 1 row affected (0.07 sec)

mysql> use temp
Database changed
mysql> create table test1( uname varchar(10) not null default ' ', age smallint not null default 0 )engine myisam charset utf8;
Query OK, 0 rows affected, 1 warning (0.07 sec)

mysql> insert into test1 values ('卢布',23),('曹尼玛',99),('李四',10);
Query OK, 3 rows affected (0.02 sec)
Records: 3  Duplicates: 0  Warnings: 0

mysql> select * from test1;
+-----------+-----+
| uname     | age |
+-----------+-----+
| 卢布      |  23 |
| 曹尼玛    |  99 |
| 李四      |  10 |
+-----------+-----+
3 rows in set (0.00 sec)

mysql> quit
Bye

这篇关于Linux常用命令的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!