Linux从入门到跑路

本文详细介绍了Linux操作系统,包括它的定义、发行版本、内核、开机启动流程和系统运行级别。深入探讨了Linux的目录结构,重点讲解了命令行操作,如命令基本用法、shell、帮助文档、命令技巧以及常用命令的使用,如文件管理、硬件信息查看、权限控制等。此外,还介绍了用户和用户组管理,包括用户账户、权限设置和用户组操作。通过本文,读者可以从零开始掌握Linux操作系统。

💖Linux从入门到跑路❤️

文章目录

linux介绍

什么是Linux

Linux是一套免费使用和自由传播的类Unix操作系统,是一个基于POSIX和Unix的多用户、多任务、支持多线程和多CPU的操作系统。它能运行主要的Unix工具软件、应用程序和网络协议。它支持32位和64位硬件。Linux继承了Unix以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统。

img

Linux发行版本

Linux发行版 (也被叫做 GNU/Linux 发行版) 通常包含了包括桌面环境、办公套件、媒体播放器、数据库等应用软件。

目前市面上较知名的发行版有:Ubuntu、RedHat、CentOS、Debian、Fedora、SuSE、OpenSUSE、Arch Linux、SolusOS 等。

img

Linux发行版本又分为稳定版和开发版,两种版本是相互关联,相互循环:

  • 稳定版:具有工业级强度,可以广泛地应用和部署。新的稳定版相对于较旧的只是修正一些bug或加入一些新的驱动程序。
  • 开发版:由于要试验各种解决方案,所以变化很快。

Linux的内核是什么?

Linux系统的核心是内核,内核控制着计算机系统上的所有硬件和软件,在有必要时分配硬件,并根据需要时执行软件。

Linux开机启动过程?

  1. 主机加电自检,加载BIOS硬件信息。
  2. 读取MBR的引导文件
  3. 引导Linux内核。
  4. 运行第一个进程init (进程号永远为1)
  5. 进入相应的运行级别。
  6. 运行终端,输入用户名和密码。

Linux系统运行级别

  1. 关机

  2. 单用户模式

  3. 字符界面(不支持网络)

  4. 字符界面

  5. 未分配使用

  6. 图形化界面

  7. 重启

Linux的目录结构

Linux的目录结构

常见目录说明:
  • /:根目录,一般根目录下只存放目录,在Linux下有且只有一个根目录。所有的东西都是从这里开始。当你在终端里输入“/home”,你其实是在告诉电脑,先从/(根目录)开始,再进入到home目录。
  • /bin: /usr/bin: 可执行二进制文件的目录,如常用的命令ls、tar、mv、cat等。
  • /boot:放置linux系统启动时用到的一些文件,如Linux的内核文件:/boot/vmlinuz,系统引导管理器:/boot/grub。
  • /dev:存放linux系统下的设备文件,访问该目录下某个文件,相当于访问某个设备,常用的是挂载光驱 mount /dev/cdrom /mnt。
  • /etc:系统配置文件存放的目录,不建议在此目录下存放可执行文件,重要的配置文件有 /etc/inittab、/etc/fstab、/etc/init.d、/etc/X11、/etc/sysconfig、/etc/xinetd.d。
  • /home:系统默认的用户家目录,新增用户账号时,用户的家目录都存放在此目录下,表示当前用户的家目录,edu 表示用户 edu 的家目录。
  • /lib: /usr/lib: /usr/local/lib:系统使用的函数库的目录,程序在执行过程中,需要调用一些额外的参数时需要函数库的协助。
  • /lost+fount:系统异常产生错误时,会将一些遗失的片段放置于此目录下。
  • /mnt: /media:光盘默认挂载点,通常光盘挂载于 /mnt/cdrom 下,也不一定,可以选择任意位置进行挂载。
  • /opt:给主机额外安装软件所摆放的目录。
  • /proc:此目录的数据都在内存中,如系统核心,外部设备,网络状态,由于数据都存放于内存中,所以不占用磁盘空间,比较重要的目录有 /proc/cpuinfo、/proc/interrupts、/proc/dma、/proc/ioports、/proc/net/* 等。
  • /root:系统管理员root的家目录。
  • /sbin: /usr/sbin: /usr/local/sbin:放置系统管理员使用的可执行命令,如fdisk、shutdown、mount 等。与 /bin 不同的是,这几个目录是给系统管理员 root使用的命令,一般用户只能"查看"而不能设置和使用。
  • /tmp:一般用户或正在执行的程序临时存放文件的目录,任何人都可以访问,重要数据不可放置在此目录下。
  • /srv:服务启动之后需要访问的数据目录,如 www 服务需要访问的网页数据存放在 /srv/www 内。
  • /usr:应用程序存放目录,/usr/bin 存放应用程序,/usr/share 存放共享数据,/usr/lib 存放不能直接运行的,却是许多程序运行所必需的一些函数库文件。/usr/local: 存放软件升级包。/usr/share/doc: 系统说明文件存放目录。/usr/share/man: 程序说明文件存放目录。
  • /var:放置系统执行过程中经常变化的文件,如随时更改的日志文件 /var/log,/var/log/message:所有的登录文件存放目录,/var/spool/mail:邮件存放的目录,/var/run:程序或服务启动后,其PID存放在该目录下。

用户目录

位于/home/user,称之为用户的工作目录或家目录。表示方式:

/home/user
~

从 / 目录开始描述的路径为绝对路径,如:

cd /home
ls /usr

从当前位置开始描述的路径为相对路径,如:

cd ../../
ls abc/def

每个目录下都有**.和…**

. 表示当前目录

… 表示上一级目录,即父目录

根目录下的.和…都表示当前目录

文件的颜色含义
蓝色目录
绿色可执行文件
红色压缩文件
浅蓝色链接文件
灰色其他文件

命令行操作

命令基本用法

Linux命令格式:

command  [-options]  [parameter1]

command:命令名称

[-options]:选项,可以用来对命令进行控制,也可以省略,[]代表可选 parameter1 …:传给命令的参数:可以是零个一个或多个。

什么是shell

在这里插入图片描述

shell也被称为Linux命令的解释器

查看系统默认shell

echo $BASH

查看系统各个版本shell

[root@localhost ~]#cat /etc/shells 
/bin/sh
/bin/bash
/usr/bin/sh
/usr/bin/bash
更改命令终端颜色

登录Linux后,默认的系统命令提示符没有个性,无法明显辨别生产和测试环境,而导致错误。

可以通过修改PS1变量实现个性提示符格式,避免命令输错终端错误。

默认的提示符

#Centos默认提示符
[root@localhost ~]#
#Ubuntn默认提示符
[yyc@localhost ~]$

@符合前root 代表时当前登录用户

localhost 代表显示系统名称前几位

~ 代表用户在家目录

# 代表是管理员账号 $代表是普通账户

Centos7以上版本设置

# 默认
[root@localhost ~]# echo $PS1
[\u@\h \W]\$
# 实例
[root@localhost ~]#PS1="\[\e[1;35m\][\u@\h \w]\\$\[\e[0m\]"
#永久保存
echo PS1="\[\e[1;35m\][\u@\hw \w]\\$\[\e[0m\]" > /etc/profile.d/test.sh
#提示  [\e[1;35m\]  35为紫色 可进行更改
[root@localhost ~]#echo $PS1
\[\e[1;35m\][\u@\h \w]\$\[\e[0m\]
# 命令行彩色并显示时间模板
[15:04:41 root@Centos8-2 ~]#PS1="\[\e[1;32m\][\t \[\e[1;33m\]\u\[\e[35m\]@\h\[\e[1;31m\] \w\[\e[1;32m\]]\[\e[0m\]\\$"

查看帮助文档

help

一般是linux命令自带的帮助信息

如:ls --help

man(manual)

man是linux提供的一个手册,包含了绝大部分的命令、函数使用说明

该手册分成很多章节(section),使用man时可以指定不同的章节来浏览。

例:man ls ; man 2 printf

man中各个section意义如下:

  1. Standard commands(标准命令)
  2. System calls(系统调用,如open,write)
  3. Library functions(库函数,如printf,fopen)
  4. Special devices(设备文件的说明,/dev下各种设备)
  5. File formats(文件格式,如passwd)
  6. Games and toys(游戏和娱乐)
  7. Miscellaneous(杂项、惯例与协定等,例如Linux档案系统、网络协定、ASCII 码;environ全局变量)
  8. Administrative Commands(管理员命令,如ifconfig)
    man是按照手册的章节号的顺序进行搜索的。

man设置了如下的功能键:

功能键功能
空格键显示手册页的下一屏
Enter键一次滚动手册页的一行
b回滚一屏
f前滚一屏
q退出man命令
h列出所有功能键
/word搜索word字符串

注意:实际上,我们不用指定第几个章节也用查看,如,man ls

Linux命令小技巧

设置主机名
# 临时生效
hostname testname

# 永久生效
hostnamectl set-hostname testname

注意:修改主机名只可以使用 字母 数字 和横线。

有些软件对主机名有特殊要求

命令为什么要永久生效

临时生效是保存在运行内存,当系统断电或重启命令会失效,

永久保存相当于把这条命令写到了系统文件中重启完系统不会失效。

tab键自动补全

在敲出命令的前几个字母的同时,按下tab键,系统会自动帮我们补全命令。

history游览历史

当系统执行过一些命令后,可按上下键翻看以前的命令,history将执行过的命令列举出来

history保留了最近执行的命令记录,默认可以保留1000。
历史清单从0开始编号到最大值。
常见用法:

history N		显示最近N条命令
history -c		清除所有的历史记录
history -w  xxx.txt	保存历史记录到文本xxx.txt
命令行中的ctrl组合键
  • Ctrl+c 结束正在运行的程序

  • Ctrl+d 结束输入或退出shell

  • Ctrl+s 暂停屏幕输出【锁住终端】

  • Ctrl+q 恢复屏幕输出【解锁终端】

  • Ctrl+l 清屏,【是字母L的小写】等同于Clear

  • 当前光标到行首:ctrl+a

  • 当前光标到行尾:ctrl+e

  • 删除当前光标到行首:ctrl+u

  • 删除当前光标到行尾:ctrl+k

  • Ctrl+y 在光标处粘贴剪切的内容

  • Ctrl+r 查找历史命令【输入关键字,就能调出以前执行过的命令】

  • Ctrl+t 调换光标所在处与其之前字符位置,并把光标移到下个字符

  • Ctrl+x+u 撤销操作

  • Ctrl+z 转入后台运行

Linux命令

执行命令

执行命令过程

输入命令后回车,shell程序找到输入命令对应可执行程序或代码,其由分析后提交给内核分配资源并其运行起来。

shell中可执行的两类命令

内部命令:由系统shell自带的,而且通过某命令形式来提供,用户登录后自动加载和常驻在内存中。

外部命令:在系统文件路径下有对应的可执行程序文件,当执行命令时才从磁盘加载到内存中,执行完毕并从内存中删除。

区别命令时内部和外部命令
type 命令

内部命令

[root@localhost ~]#type cd
cd 是 shell 内嵌

外部命令 后面出现路径就是外部命令

[root@localhost ~]#type ssh
ssh 是 /usr/bin/ssh
# 存放外部命令的路径
[root@localhost ~]#echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
[root@localhost ~]#type -a echo
echo 是 shell 内嵌
echo 是 /usr/bin/echo
# echo 是内部命令命令也是外部命令   内部命令执行优先级高

echo 有内部命令命令了,为什么还要有个外部命令?
echo命令比较重要,本终端有不代表别的终端有echo命令
hash缓存表

系统初始hash表为空,当外部命令执行时,默认会从PATH路径下寻找该命令,找到改命令执行并记录到hash表中,当再次使用该命令时,shell解释器会先查看hash表,存在将执行,如果不存在将会从PATH路径下去寻找,利用hash缓存表可大大提升外部命令调用速率。

  • hash 显示hash缓存
  • hash -d name 清楚name缓存
  • hash -r 清楚全部hash缓存
文件别名

对于经常执行较长的命令,可以将其定义较短或比较容易记住的单词,以方便执行。

# 显示当前shell进程所有可用的命令别称
alias

范例:

alias ho='hostname'
# ho是别名
# hostname是命令
# 扫描新加的磁盘
alias scandisk="echo '- - -' > /sys/class/scsi_host/host0/scan;echo '- - -' > /sys/class/scsi_host/host1/scan;echo '- - -' > /sys/class/scsi_host/host2/scan"
删除别名
ualias  [别名]

注意:在命令行中定义别名,仅对当枪shell进程有效

如果想永久有效,要定义在配置文件中

  • 仅对当前用户:~/.bashrc
  • 对所有用户有效:/etc/bashrc

编辑配置给出的新配置不会立即生效,bash需要重新读取配置文件。

source /etc/bashrc
suorce .bashrc

别名与原始命令重复的话,别名优先级高,想使用的话 ‘原始命令’。

常见硬件信息命令

查看CPU

lscpu命令可以查看CPU信息

cat /proc/cpuinfo 也可以查看到

[20:20:49 root@yyc ~]#lscpu 
Architecture:          x86_64
CPU op-mode(s):        32-bit, 64-bit
Byte Order:            Little Endian
CPU(s):                2
On-line CPU(s) list:   0,1
Thread(s) per core:    1
Core(s) per socket:    2
Socket(s):             1
NUMA node(s):          1
Vendor ID:             GenuineIntel
CPU family:            6
Model:                 85
Model name:            Intel(R) Xeon(R) Platinum 8255C CPU @ 2.50GHz
Stepping:              5
CPU MHz:               2499.990
BogoMIPS:              4999.98
Hypervisor vendor:     KVM
Virtualization type:   full
L1d cache:             32K
L1i cache:             32K
L2 cache:              4096K
L3 cache:              36608K
NUMA node0 CPU(s):     0,1
Flags:                 fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ss ht syscall nx pdpe1gb rdtscp lm constant_tsc rep_good nopl eagerfpu pni pclmulqdq ssse3 fma cx16 pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand hypervisor lahf_lm abm 3dnowprefetch invpcid_single fsgsbase bmi1 hle avx2 smep bmi2 erms invpcid rtm mpx avx512f avx512dq rdseed adx smap clflushopt clwb avx512cd avx512bw avx512vl xsaveopt xsavec xgetbv1 arat avx512_vnni

[20:21:40 root@yyc ~]#cat /proc/cpuinfo 
processor	: 0
vendor_id	: GenuineIntel
cpu family	: 6
model		: 85
model name	: Intel(R) Xeon(R) Platinum 8255C CPU @ 2.50GHz
stepping	: 5
microcode	: 0x1
cpu MHz		: 2499.990
cache size	: 36608 KB
physical id	: 0
siblings	: 2
core id		: 0
cpu cores	: 2
apicid		: 0
initial apicid	: 0
fpu		: yes
fpu_exception	: yes
cpuid level	: 13
wp		: yes
flags		: fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ss ht syscall nx pdpe1gb rdtscp lm constant_tsc rep_good nopl eagerfpu pni pclmulqdq ssse3 fma cx16 pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand hypervisor lahf_lm abm 3dnowprefetch invpcid_single fsgsbase bmi1 hle avx2 smep bmi2 erms invpcid rtm mpx avx512f avx512dq rdseed adx smap clflushopt clwb avx512cd avx512bw avx512vl xsaveopt xsavec xgetbv1 arat avx512_vnni
bogomips	: 4999.98
clflush size	: 64
cache_alignment	: 64
address sizes	: 46 bits physical, 48 bits virtual
power management:

processor	: 1
vendor_id	: GenuineIntel
cpu family	: 6
model		: 85
model name	: Intel(R) Xeon(R) Platinum 8255C CPU @ 2.50GHz
stepping	: 5
microcode	: 0x1
cpu MHz		: 2499.990
cache size	: 36608 KB
physical id	: 0
siblings	: 2
core id		: 1
cpu cores	: 2
apicid		: 1
initial apicid	: 1
fpu		: yes
fpu_exception	: yes
cpuid level	: 13
wp		: yes
flags		: fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ss ht syscall nx pdpe1gb rdtscp lm constant_tsc rep_good nopl eagerfpu pni pclmulqdq ssse3 fma cx16 pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand hypervisor lahf_lm abm 3dnowprefetch invpcid_single fsgsbase bmi1 hle avx2 smep bmi2 erms invpcid rtm mpx avx512f avx512dq rdseed adx smap clflushopt clwb avx512cd avx512bw avx512vl xsaveopt xsavec xgetbv1 arat avx512_vnni
bogomips	: 4999.98
clflush size	: 64
cache_alignment	: 64
address sizes	: 46 bits physical, 48 bits virtual
power management:
查看内存

free 查看内存状态

[20:37:32 root@yyc ~]#free -h
              total        used        free      shared  buff/cache   available
Mem:           3.7G        206M        2.2G        556K        1.3G        3.2G
Swap:            0B          0B          0B

[20:39:31 root@yyc ~]#cat /proc/meminfo
MemTotal:        3880176 kB
MemFree:         2324484 kB
MemAvailable:    3403876 kB
Buffers:          102652 kB
Cached:          1136100 kB
SwapCached:            0 kB
Active:           698468 kB
Inactive:         644276 kB
Active(anon):     112940 kB
Inactive(anon):      268 kB
Active(file):     585528 kB
Inactive(file):   644008 kB
Unevictable:       10356 kB
Mlocked:           10356 kB
SwapTotal:             0 kB
SwapFree:              0 kB
Dirty:               104 kB
Writeback:             0 kB
AnonPages:        114160 kB
Mapped:            51968 kB
Shmem:               556 kB
Slab:             122900 kB
SReclaimable:     109036 kB
SUnreclaim:        13864 kB
KernelStack:        2448 kB
PageTables:         5056 kB
NFS_Unstable:          0 kB
Bounce:                0 kB
WritebackTmp:          0 kB
CommitLimit:     1940088 kB
Committed_AS:     818732 kB
VmallocTotal:   34359738367 kB
VmallocUsed:       12832 kB
VmallocChunk:   34359720444 kB
Percpu:              328 kB
HardwareCorrupted:     0 kB
AnonHugePages:     28672 kB
CmaTotal:              0 kB
CmaFree:               0 kB
HugePages_Total:       0
HugePages_Free:        0
HugePages_Rsvd:        0
HugePages_Surp:        0
Hugepagesize:       2048 kB
DirectMap4k:       67448 kB
DirectMap2M:     3078144 kB
DirectMap1G:     3145728 kB
查看硬盘和分区情况
[20:39:38 root@yyc ~]#lsblk
NAME   MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
sr0     11:0    1 159.1M  0 rom  
vda    253:0    0    60G  0 disk 
└─vda1 253:1    0    60G  0 part /

[20:40:57 root@yyc ~]#cat /proc/partitions 
major minor  #blocks  name

 253        0   62914560 vda
 253        1   62913519 vda1
  11        0     162906 sr0

常见系统信息命令

# 查看系统架构
[21:02:18 root@yyc ~]#arch
x86_64

# 查看发行版本
[21:01:02 root@yyc ~]#cat /etc/redhat-release
CentOS Linux release 7.9.2009 (Core)
[21:13:18 root@yyc ~]#cat /etc/os-release 
NAME="CentOS Linux"
VERSION="7 (Core)"
ID="centos"
ID_LIKE="rhel fedora"
VERSION_ID="7"
PRETTY_NAME="CentOS Linux 7 (Core)"
ANSI_COLOR="0;31"
CPE_NAME="cpe:/o:centos:centos:7"
HOME_URL="https://www.centos.org/"
BUG_REPORT_URL="https://bugs.centos.org/"

CENTOS_MANTISBT_PROJECT="CentOS-7"
CENTOS_MANTISBT_PROJECT_VERSION="7"
REDHAT_SUPPORT_PRODUCT="centos"
REDHAT_SUPPORT_PRODUCT_VERSION="7

# ubuntu 查询系统发行版本
root@ubuntu:~# cat /etc/os-release
NAME="Ubuntu"
VERSION="18.04.6 LTS (Bionic Beaver)"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 18.04.6 LTS"
VERSION_ID="18.04"
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
VERSION_CODENAME=bionic
UBUNTU_CODENAME=bionic

# 查看内核版本
[21:02:14 root@yyc ~]#uname -r
3.10.0-1160.45.1.el7.x86_64
root@ubuntu:~# arch 
x86_64

日期和时间

权限命令

ls

ls :列出目录下内容

Linux文件或者目录名称最长可以有265个字符,“.”代表当前目录,“…”代表上一级目录,以“.”开头的文件为隐藏文件,需要用 -a 参数才能显示。

ls常用参数

参数含义
-a显示指定目录下所有子目录和文件,包括隐藏文件。
-l以列表方式显示文件的详细信息
-h配合 -l 以人性化的方式显示文件大小
[root@yyc ~]# ls -lh
total 24K
-rw-r--r-- 1 root root    0 Mar 19 16:46 1.txt
-rw-r--r-- 1 root root    0 Mar 19 16:46 2.txt
-rw-r--r-- 1 root root    0 Mar 19 16:46 3.txt
-rw-r--r-- 1 root root  12K Mar 19 15:45 httpd.conf
-rw-r--r-- 1 root root 1.2K Mar 19 15:44 passwd
drwxr-xr-x 2 root root 4.0K Mar 19 16:57 tar

列出的信息的含义

img

ls支持通配符

通配符含义
*文件代表文件名中所有字符
ls te*查找以te开头的文件
ls *html查找以html结尾的文件
代表文件名任意一个字符
ls ?.c只找第一个字符任意,后缀为.c的文件
文件访问权限

用户能够控制一个给定的文件或目录的访问程度,一个文件或目录可能有读、写及执行权限:

  • 读权限(r) :对于文件,具有读取文件内容的权限;对于目录,具有浏览目录的权限。
  • 写权限(w) :对于文件,具有修改文件内容的权限;对于目录,具有删除、移动目录内文件的权限。
  • 可执行权限(x): 对于文件,具有执行文件的权限;对于目录,该用户具有进入目录的权限。

通常,Unix/Linux系统只允许文件的属主(所有者)或超级用户改变文件的读写权限。

示例:

img

第1个字母代表文件的类型:

  • “d” 代表文件夹
  • “-” 代表普通文件
  • “c” 代表硬件字符设备
  • “b” 代表硬件块设备
  • “s”表示管道文件
  • “l” 代表软链接文件。

后面9跟个字母分别代表三组权限:文件所有者,用户组,其它用户权限。

chmod

chmod 修改文件权限

chmod 修改权限有有两种使用格式,数字法和字母法。

字母法:chmod u/g/o/a +/-/= rwx 文件

【u/g/o/a】含义
uuser 代表该文件的所有者
ggroup 表示与该文件的所有者属于同一组( group )者,即用户组
oother 表示其他以外的人
aall 表示三者皆是
【+ - =】含义
+增加权限
-减少权限
=设定权限
rwx含义
rread 代表可读,对于一个目录,如果没有r权限,那么就意味着不能通过ls查看这个目录的内容。
wwrite 表示可写入,对于一个目录,如果没有w权限,那么就意味着不能在目录下创建新的文件。
xexcute 表示可执行,对于一个目录,如果没有x权限,那么就意味着不能通过cd进入这个目录。

数字法:“rwx” 这些权限也可以用数字来代替

字母说明
r读取权限,数字代号为“4”
w写入权限,数字代号为“2”
x执行权限,数字代号为“1”
-不具备任何权限,数字代号为“0”

如执行:chmod u=rwx,g=rx,o=r abc.txt 就等于 chmod u=7,g=5,o=4 abc.txt

chmod 751 file:

  • 文件所有者:读写执行权限
  • 用户组:读和执行权限
  • 其它用户:执行权限

chmod 777 file:所有用户拥有读,写,执行权限。

注意:如果想递归所有目录加上相同权限,需要加上参数“-R”。如:chmod 777 test -R 递归 test 目录下所有文件加 777 权限

chown

chowm:修改文件所有者

[root@yyc ~]# ls /abc/abc.sh -l
-rw-r--r-- 1 root root 0 321 20:40 /abc/abc.sh
[root@yyc ~]# chown yyc /abc/abc.sh 
[root@yyc ~]# ls /abc/abc.sh -l
-rw-r--r-- 1 yyc root 0 321 20:40 /abc/abc.sh
chgrd
[root@yyc ~]# ls /abc/abc.sh -l
-rw-r--r-- 1 yyc root 0 321 20:40 /abc/abc.sh
[root@yyc ~]# chgrp yyc /abc/abc.sh 
[root@yyc ~]# ls /abc/abc.sh -l
-rw-r--r-- 1 yyc yyc 0 321 20:40 /abc/abc.sh

文件内容查看

Linux系统中通常使用以下命令来查看文件的内容:

  • cat 由文件第一行开始显示文件
  • tac 从最后一行开始显示
  • nl 显示的时候,输出行号
  • more 一页一页的的显示文件内容
  • less与more类似,但可以往前翻页
  • head 从头行开始查看,默认10行
  • tail 从尾行开始查看,默认10行
基本显示:cat、tac

语法:

cat [-AbEnTv]

选项与参数:

  • -A :相当于 -vET 的整合选项,可列出一些特殊字符而不是空白而已;
  • -v :列出一些看不出来的特殊字符
  • -E :将结尾的断行字节 $ 显示出来;
  • -T :将 [tab] 按键以 ^I 显示出来;
  • -b :列出行号,空白行不标行号
  • -n :列出行号,连同空白行也会有行号
[root@yyc ~]# cat -b test 
     1  he was short and fat.
     2  He was wearing a blue polo shirt with black pants.

     3  The home of Football on BBC Sport online.

     4  the tongue is boneless but it breaks bones.12!
     

tac与cat命令刚好相反,文件内容从最后一行开始显示,可以看出 tac 是 cat 的倒着写!如:

[root@VM_0_9_centos ~]# tac /etc/issue
Kernel \r on an \m
\S
123
显示行号:nl

语法:

nl [-bnw] 文件
1

选项与参数:

  • -b :指定行号指定的方式,主要有两种:
    -b a :表示不论是否为空行,也同样列出行号(类似 cat -n);
    -b t :如果有空行,空的那一行不要列出行号(默认值);
  • -n :列出行号表示的方法,主要有三种:
    -n ln :行号在荧幕的最左方显示;
    -n rn :行号在自己栏位的最右方显示,且不加 0 ;
    -n rz :行号在自己栏位的最右方显示,且加 0 ;
  • -w :行号栏位的占用的位数。
[root@www ~]# nl /etc/issue
     1  CentOS release 6.4 (Final)
     2  Kernel \r on an \m
123
分屏显示:more、less
[root@www ~]# more /etc/man_db.config 
#
# Generated automatically from man.conf.in by the
# configure script.
#
# man.conf from man-1.6d
....(中间省略)....
--More--(28%)  <== 光标在这里等待命令
12345678

more运行时可以输入的命令有:

  • 空白键 (space):代表向下翻一页;
  • Enter :代表向下翻『一行』;
  • /字串 :代表在这个显示的内容当中,向下搜寻『字串』这个关键字;
  • :f :立刻显示出档名以及目前显示的行数;
  • q :代表立刻离开 more ,不再显示该文件内容。
  • b 或 [ctrl]-b :代表往回翻页,不过这动作只对文件有用,对管线无用。
[root@www ~]# less /etc/man.config
#
# Generated automatically from man.conf.in by the
# configure script.
#
# man.conf from man-1.6d
....(中间省略)....
:   <== 这里可以等待你输入命令!
12345678

less运行时可以输入的命令有:

  • 空白键 :向下翻动一页;
  • [pagedown]:向下翻动一页;
  • [pageup] :向上翻动一页;
  • /字串 :向下搜寻『字串』的功能;
  • ?字串 :向上搜寻『字串』的功能;
  • n :重复前一个搜寻 (与 / 或 ? 有关!)
  • N :反向的重复前一个搜寻 (与 / 或 ? 有关!)
  • q :离开 less 这个程序;
取首尾n行:head、tail

head取出文件前面几行

语法:

head [-n number] 文件 

选项与参数:

  • -n :后面接数字,代表显示几行的意思
[root@www ~]# head /etc/man.config

默认的情况中,显示前面 10 行!若要显示前 20 行,就得要这样:

[root@www ~]# head -n 20 /etc/man.config

tail取出文件后面几行

语法:

tail [-n number] 文件 

选项与参数:

  • -n :后面接数字,代表显示几行的意思
  • -f :表示持续侦测后面所接的档名,要等到按下[ctrl]-c才会结束tail的侦测
[root@www ~]# tail /etc/man.config
# 默认的情况中,显示最后的十行!若要显示最后的 20 行,就得要这样:
[root@www ~]# tail -n 20 /etc/man.config

文件管理

输出重定向:>

可将本应显示在终端上的内容保存到指定文件中。

如:ls > test.txt ( test.txt 如果不存在,则创建,存在则覆盖原有内容 )

注意: >输出重定向会覆盖原来的内容,>>输出重定向则会追加到文件的尾部。

管道:|

管道:一个命令的输出可以通过管道做为另一个命令的输入。

“ | ”的左右分为两端,从左端写入到右端。

[root@yyc bin]# ll -h | more
总用量 267M
-rwxr-xr-x  1 root root      41K 1117 2020 [
-rwxr-xr-x  1 root root     106K 23 2021 a2p
-rwxr-xr-x  1 root root      52K 125 22:09 ab
-rwxr-xr-x  1 root root      11K 102 2020 abrt-action-analyze-backtrace
-rwxr-xr-x  1 root root      11K 102 2020 abrt-action-analyze-c
-rwxr-xr-x  1 root root     1.4K 102 2020 abrt-action-analyze-ccpp-local
清屏:clear

clear作为清楚终端上显示的,快捷键:CTRL + L (“ L ”为字母)

切换工作目录:cd

Linux所以的目录和文件名大小写敏感

cd 后面可跟绝对路径,也可以跟相对路径。如果省略目录,则默认切换到当前用户的主目录。

命令含义
cd相当于cd ~
cd ~切换到当前用户的家目录(/home/user)
cd .切换到当前目录
cd …切换到上级目录
cd -进入上此的目录
显示当前所在目录:pwd
[root@yyc ~]# pwd
/root
创建目录:mkdir

mkdir 可以创建一个新目录

注意:新建目录的名称不能于当前目录下的目录或文件重名,并且目录创建者必须对当前目录具有写权限。

语法:

mkdir [-mp] 目录名称

选项与参数:

  • -m:指定被创建目录的权限。而不是根据默认权限(umask)设定
  • -p:递归创建所需要的目录
[root@yyc ~]# mkdir abc1
[root@yyc ~]# mkdir abc1/abc2/abc3
mkdir: 无法创建目录"abc1/abc2/abc3": 没有那个文件或目录
[root@yyc ~]# mkdir -p abc1/abc2/abc3

mkdir 创建的目录权限默认根据umask得到,而-m参数可指定被创建目录的权限。

[root@yyc ~]# ll
总用量 4
drwxr-xr-x 2 root root 4096 325 16:13 a1
[root@yyc ~]# mkdir a2 -m 777
[root@yyc ~]# ll
总用量 8
drwxr-xr-x 2 root root 4096 325 16:13 a1
drwxrwxrwx 2 root root 4096 325 16:14 a2
删除文件:rm

可通过rm删除文件或目录,使用rm命令要小心,因为文件删除后不能恢复。为了防止文件被误删,可以在 rm后使用 -i参数以逐个确认要删除的文件。

常用的参数

参数含义
-i以交互式方式执行
-f强制删除,忽略不存在的文件,没有提示。
-r递归的删除目录下的内容,删除文件夹时必须加此参数。
[root@yyc ~]# rm a1
rm: 无法删除"a1": 是一个目录
[root@yyc ~]# rm -ir a1
rm:是否删除目录 "a1"?y
建立链接文件:ln

软链接:ln -s 源文件 链接文件

硬链接:ln 源文件 链接文件

软链接类似于Windows下的快捷方式,如果软连接文件和源文件不在同一目录,源文件要使用绝对路径,不能使用,相对路径。

硬链接只能链接普通文件不能连接目录,两个文件占用相同大小的硬盘空间,即使删除了源文件,链接文件还是存在,所以-s选项是更常见的形式。

查找文件:find

常用用法:

命令含义
find ./ -name test.sh查找当前目录下叫test.sh的文件
find ./ -name ‘*.sh’查找当前目录下后缀为 .sh的文件
find ./ -name “[A-Z]*”查找当前目录下 以A-Z 开头的文件
find /tmp -size 2M查找 /tmp目录下等于2M的文件
find /tmp -size +2M查找 /tmp目录下大于2M的文件
find /tmp -size -2M查找 /tmp目录下小于2M的文件
find ./ -size +4K -size -5M查找当前目录下大于4K小于5M的文件
find ./ -perm 0777查找当前目录下文件权限等于777的文件

find命令用来在指定目录下来查找文件,任何位于参数之前的字符串都将被视为与查找的目录名。如果使用改命令时,不设置任何参数,则find命令将在当前目录下查找子目录与文件,并且将查找的子目录和文件全部进行显示。

语法

find path -option [ -print ] [ -exec -ok command ] {} \;

常用参数说明

  • -perm xxxx:权限为 xxxx的文件或目录

  • -user: 按照文件属主来查找文件。

  • -size n : n单位,b:512位元组的区块,c:字元数,k:kilo bytes,w:二个位元组

  • -mount, -xdev : 只检查和指定目录在同一个文件系统下的文件,避免列出其它文件系统中的文件

  • -amin n : 在过去 n 分钟内被读取过

  • -anewer file : 比文件 file 更晚被读取过的文件

  • -atime n : 在过去n天内被读取过的文件

  • -cmin n : 在过去 n 分钟内被修改过

  • -cnewer file :比文件 file 更新的文件

  • -ctime n : 在过去n天内被修改过的文件

  • -empty : 空的文件

  • -gid n or -group name : gid 是 n 或是 group 名称是 name

  • -ipath p, -path p : 路径名称符合 p 的文件,ipath 会忽略大小写

  • -name name, -iname name : 文件名称符合 name 的文件。iname 会忽略大小写

  • -type 查找某一类型的文件:

    • b - 块设备文件
    • d - 目录
    • c - 字符设备文件
    • p - 管道文件
    • l - 符号链接文件
    • f - 普通文件
  • -exec 命令名{} \ (注意:“}”和“\”之间有空格)

find实例

显示根目录下以 .txt结尾并且大于2M的文件

find / -name "*.txt" -size +2M

将目前目录其其下子目录中所有一般文件列出

find . -type f

将目前目录及其子目录下所有最近 20 天内更新过的文件列出

find . -ctime -20

查找/var/log目录中更改时间在7日以前的普通文件,并在删除之前询问它们:

find /var/log -type f -mtime +7 -ok rm {} \;

查找前目录中文件属主具有读、写权限,并且文件所属组的用户和其他用户具有读权限的文件:

find . -type f -perm 644 -exec ls -l {} \;

查找系统中所有文件长度为0的普通文件,并列出它们的完整路径:

find / -type f -size 0 -exec ls -l {} \;

从根目录查找类型为符号链接的文件,并将其删除:

find / -type l -exec rm -rf {} \

从当前目录查找用户tom的所有文件并显示在屏幕上

find . -user tom

在当前目录中查找所有文件以.doc结尾,且更改时间在3天以上的文件,找到后删除,并且给出删除提示

find . -name *.doc  -mtime +3 -ok rm {} \;

在当前目录下查找所有链接文件,并且以长格式显示文件的基本信息

find . -type l -exec ls -l {} \;

在当前目录下查找文件名有一个小写字母、一个大写字母、两个数字组成,且扩展名为.doc的文件

find . -name '[a-z][A-Z][0-9][0-9].doc'
拷贝命令:cp

cp命令的功能是将指定的目录或文件复制到另一个文件或目录中。

常用选项说明

选项含义
-a该选项通常在复制目录时使用,它保留链接、文件属性,并递归地复制目录,简单而言,保持文件原有属性。
-f已经存在的目标文件而不提示
-i交互式复制,在覆盖目标文件之前将给出提示要求用户确认
-r若给出的源文件是目录文件,则cp将递归复制该目录下的所有子目录和文件,目标文件必须为一个目录名
-v显示拷贝任务进度
-l
-s
-u
移动文件:mv

mv命令功能是 可以移动文件或目录,也可以给文件或目录改名字。

选项含义
-r禁止交互式操作,如有覆盖也不会给出提示
-i确认交互方式操作,如果mv操作将导致对已存在的目标文件的覆盖,系统会询问是否重写,要求用户回答以避免误覆盖文件
-v显示移动进度

语法

mv [选项]  操作对象  指定目录
归档管理:tar

此命令可以把一系列文件归档到一个大文件中,也可以把档案文件解开以恢复数据。

tar 使用格式 tar [参数] 打包文件名 文件

tar 命令参数很特殊,其参数前面可以使用“-”,也可以不使用。

常用参数

参数含义
-c生成档案文件,创建打包文件
-v列出归档和解档的详细过程,显示进度
-f指定档案文件名称,f后面一定是.tar文件,所有必须放在选项最后。
-t列出档案中包含的文件
-x解开档案文件

注意:除了f需要放在参数的最后,其它参数的顺序任意。

[root@yyc ~]# tar -cvf test.tar test1.txt test2.txt test3.txt 
test1.txt
test2.txt
test3.txt
[root@yyc ~]# ls
test1.txt  test2.txt  test3.txt  test.tar
[root@yyc ~]# rm -rf test1.txt  test2.txt  test3.txt
[root@yyc ~]# ls
test.tar
[root@yyc ~]# tar -xvf test.tar
test1.txt
test2.txt
test3.txt
[root@yyc ~]# ls
test1.txt  test2.txt  test3.txt  test.tar
文件压缩解压:gzip ,bzip2

tar与gzip命令结合使用实现文件打包,压缩。tar只负责打包文件,但不压缩,用gzip压缩tar打包后的文件,其扩展名一般用xxx.tar.gz。

gzip使用格式如下:

gzip [选项] 被压缩文件

常用选项

选项含义
-d解压文件
-r压缩文件
[root@yyc ~]# gzip -r test.tar test.tar.gz
[root@yyc ~]# ls
test1.txt  test2.txt  test3.txt  test.tar.gz
[root@yyc ~]# gzip -d test.tar.gz 
[root@yyc ~]# ls
test1.txt  test2.txt  test3.txt  test.tar

tar命令中-z选项可以调用gzip实现了一个压缩的功能,实行一个先打包后压缩的过程。

压缩用法:tar zcvf 压缩包包名 文件1 文件2 …

例如: tar zcvf test.tar.gz 1.c 2.c 3.c 4.c把 1.c 2.c 3.c 4.c 压缩成 test.tar.gz

[root@yyc ~]# tar zcvf test123.tar.gz test1.txt test2.txt test3.txt 
test1.txt
test2.txt
test3.txt
[root@yyc ~]# ls

解压用法:tar zxvf 压缩包名称

[root@yyc ~]# tar zxvf test123.tar.gz 
test1.txt
test2.txt
test3.txt

解压到指定目录:-C (解压时可以不指定-z选项)

[root@yyc ~]# tar xvf test123.tar.gz -C /test/
test1.txt
test2.txt
test3.txt
[root@yyc ~]# ls /test/
test1.txt  test2.txt  test3.txt

bzip2命令跟gzip用法类似

压缩用法:tar jcvf 压缩包包名 文件…(tar jcvf bk.tar.bz2 *.c)

解压用法:tar jxvf 压缩包包名 (tar jxvf bk.tar.bz2)

文件压缩解压:zip ,unzip

通过zip压缩文件的目标文件不需要指定扩展名,默认扩展名为zip。

压缩文件:zip [-r] 目标文件(没有扩展名) 源文件

解压文件:unzip -d 解压后目录文件 压缩文件 (-d 指定解压的目录)

[root@centos7 ~]# ls
test1.txt  test2.txt  test3.txt
[root@centos7 ~]# zip testzip *.txt
  adding: test1.txt (stored 0%)
  adding: test2.txt (stored 0%)
  adding: test3.txt (stored 0%)
[root@centos7 ~]# ls
test1.txt  test2.txt  test3.txt  testzip.zip

[root@centos7 ~]# ls
testzip.zip
[root@centos7 ~]# unzip -d /root/ testzip.zip 
Archive:  testzip.zip
 extracting: /root/test1.txt         
 extracting: /root/test2.txt         
 extracting: /root/test3.txt         
[root@centos7 ~]# ls
test1.txt  test2.txt  test3.txt  testzip.zip
查找命令位置:which
[root@centos7 ~]# which ls
alias ls='ls --color=auto'
        /usr/bin/ls
[root@centos7 ~]# which cp
alias cp='cp -i'
        /usr/bin/cp
[root@centos7 ~]# which zip
/usr/bin/zip

用户和用户组管理

用户管理包括用户与组账号的管理。

在Unix/Linux系统中,不论是由本机或是远程登录系统,每个系统都必须拥有一个账号,并且对于不同的系统资源拥有不同的使用权限。

Unix/Linux系统中的root账号通常用于系统的维护和管理,它对Unix/Linux操作系统的所有部分具有不受限制的访问权限。

在Unix/Linux安装的过程中,系统会自动创建许多用户账号,而这些默认的用户就称为“标准用户”。

在大多数版本的Unix/Linux中,都不推荐直接使用root账号登录系统。

查看当前用户:whoami

查看当前系统当前等入的用户名,可通过 /etc/passwd/ 查看系统用户信息。

[root@centos7 ~]# whoami 
root
查看登录用户:who

who命令用于查看当前所有登录系统的用户信息。

常用选项:

选项含义
-m只显示运行who命令的用户名,信息等
-q只显示用户的登录账号和登录用户的数量
退出登录账户:exit

如果是图形界面,退出当前终端;

如果使用的ssh远程登录,推出登陆账号;

如果是切换后的登录用户,退出则返回上一个登陆账号。

添加用户账号:useradd

useradd命令的功能是 创一个当前系统的账号,可以为新账号指定家目录和组。

参数含义
-d指定用户登录系统时的主目录
-m自动建立目录,未指定 -d参数时会在/home/{当前用户}目录下建立主目录
-g指定组名称 (没有指定组不会创建)

相关说明:

  • Linux每个用户都要有一个主目录,主目录就是第一次登陆系统,用户的默认当前目录(/home/用户);
  • 每一个用户必须有一个主目录,所以用useradd创建用户的时候,一定给用户指定一个主目录;
  • 如果创建用户的时候,不指定组名,那么系统会自动创建一个和用户名一样的组名。

若创建用户时未指定家目录,后期可通过usermod -d /home/abc abc 指定

命令含义
useradd -d /home/abc abc -m创建abc用户,如果/home/abc目录不存在,就自动创建这个目录,同时用户属于abc组
useradd -d /home/a a -g test -m创建一个用户名字叫a,主目录在/home/a,如果主目录不存在,就自动创建主目录,同时用户属于test组
修改用户:usermod

常用的选项包括-c, -d, -m, -g, -G, -s, -u以及-o等,这些选项的意义与useradd命令中的选项一样,可以为用户指定新的资源值 。

修改用户所在组:usermod -g 用户组 用户名

[root@centos7 ~]# id yyc
uid=1001(yyc) gid=1001(yyc) groups=1001(yyc)
[root@centos7 ~]# usermod -g root yyc2
[root@centos7 ~]# id yyc
uid=1001(yyc) gid=1001(yyc) groups=1001(yyc)

选项-l 新用户名指定一个新的账号,可修改用户名:

[root@centos7 ~]# tail -n1 /etc/passwd
ouou:x:1005:1005::/home/ouou:/bin/bash
[root@centos7 ~]# usermod -l ouou1 -d /home/ouou1 ouou
[root@centos7 ~]# tail -n1 /etc/passwd
ouou1:x:1005:1005::/home/ouou1:/bin/bash 
设置用户密码:passwd

超级用户可以为自己和其他用户指定密码,普通用户只能用它修改自己的密码。命令的格式为:

passwd [选项] 用户名

可使用选项:

  • -l 锁定密码,即禁用账号。
  • -u 密码解锁
  • -d 使用户无密码。
  • -f 强迫用户下次登录时修改自己的密码

普通用户修改自己的密码时,passwd命令会先询问原密码,验证后再要求用户输入两遍新密码,如果两次输入的密码一致,则将这个密码指定给用户;而超级用户为用户指定密码时,就不需要知道原密码。

为用户指定清空密码时,执行下列形式的命令:(Linux系统中用户没有密码是不可以直接登录的)

passwd -d sam

此命令将用户 sam 的密码删除,这样用户 sam 下一次登录时,系统就不再允许该用户登录了。

passwd 命令还可以用 -l(lock) 选项锁定某一用户,使其不能登录,例如:

passwd -l sam
删除用户:userdel
命令含义
userdel abc (用户名)删除abc用户,但不会自动删除,用户的主目录
userdel -r abc删除abc用户,同时删除用户的主目录
切换用户:su

su后面可以加 “-” 会将当前的工作目录转换到切换后的用户主目录。

命令含义
su切换到root用户
su root切换到root用户
su -切换到root用户,同时切换目录到/root
su - root切换到root用户,同时切换目录到/root
su 普通用户切换到普通用户
su - 普通用户切换到普通用户,同时切换普通用户所在的目录

注意:对于ubuntu平台,只能通过sudo su进入root账户。

sudo允许系统管理员让普通用户执行些或者全部的root命令的一个工具。

以root身体执行指令:sudo

sudo命令可以临时获取root权限

使用权限:在/etc/sudoers 中有出现的使用者。

显示出自己(执行 sudo 的使用者)的权限
sudo -l
以root权限执行上一条命令
sudo !!

sudoers文件配置语法

user  MACHINE=COMMANDS
用户 登录的主机=(可以变换的身份) 可以执行的命令  

例子:

允许root用户执行任意路径下的任意命令 
root    ALL=(ALL)       ALL
允许wheel用户组中的用户执行所有命令  
%wheel        ALL=(ALL)       ALL
允许wheel用户组中的用户在不输入该用户的密码的情况下使用所有命令
%wheel        ALL=(ALL)       NOPASSWD: ALL
允许support用户在EPG的机器上不输入密码的情况下使用SQUID中的命令
Cmnd_Alias   SQUID = /opt/vtbin/squid_refresh, /sbin/service, /bin/rm
Host_Alias   EPG = 192.168.1.1, 192.168.1.2
support EPG=(ALL) NOPASSWD: SQUID
添加,删除组账户:groupadd,groupdel

groupadd 新建组账号 groupdel 组账号 cat /etc/group 查看用户组

python@ubuntu:~/test$ sudo groupadd abc
python@ubuntu:~/test$ sudo groupdel abc
python@ubuntu:~/test$ sudo groupdel abc
groupdel:“abc”组不存在
用户组管理:groupmod

修改用户组的属性使用groupmod命令。

groupmd 选项 用户组

常用的选项有:

  • -g GID为用户指定新的组标识号。
  • -o 与 -g选项同时使用,用户组的新GID可以与系统已有用户组的GID相同。
  • -n 新用户组将用户组的名字改为新名字

查看当前用户所在组

groups

查看 指定用户所在组

groups yyc

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值