跳到主要内容

Linux 初探

Linux,全称GNU/Linux,是一套免费使用和自由传播的类UNIX操作系统,其内核由林纳斯·本纳第克特·托瓦兹于1991年第一次释出,它主要受到Minix和Unix思想的启发,是一个基于POSIX和Unix的多用户、多任务、支持多线程和多CPU的操作系统。它能运行主要的Unix工具软件、应用程序和网络协议。它支持32位和64位硬件。Linux继承了Unix以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统。Linux有上百种不同的发行版,如基于社区开发的debian、archlinux,和基于商业开发的Red Hat Enterprise Linux、SUSE、oracle linux等

体系架构

简要结构图

linux

完整结构图

linux

系统体系结构图

linux

常见目录含义

目录概述
/bin存放⼆进制可执⾏⽂件(ls,cat,mkdir等),常⽤命令⼀般都在这⾥。
/etc存放系统管理和配置⽂件
/home存放所有⽤户⽂件的根⽬录,是⽤户主⽬录的基点,⽐如⽤户user的主⽬录就是/home/user,可以⽤~user表示
/usr⽤于存放系统应⽤程序,⽐较重要的⽬录/usr/local 本地系统管理员软件安装⽬录(安装系统级的应⽤)。这是最庞⼤的⽬录,要⽤到的应⽤程序和⽂件⼏乎都在这个⽬录。/usr/x11r6 存放x window的⽬录/usr/bin 众多的应⽤程序/usr/sbin超级⽤户的⼀些管理程序/usr/doc linux⽂档/usr/include linux下开发和编译应⽤程序所需要的头⽂件/usr/lib 常⽤的动态链接库和软件包的配置⽂件/usr/man 帮助⽂档/usr/src 源代码,linux内核的源代码就放在/usr/src/linux⾥/usr/local/bin本地增加的命令/usr/local/lib 本地增加的库
/opt额外安装的可选应⽤程序包所放置的位置。⼀般情况下,我们可以把tomcat等都安装到这⾥。
/proc虚拟⽂件系统⽬录,是系统内存的映射。可直接访问这个⽬录来获取系统信息。
/root超级⽤户(系统管理员)的主⽬录(特权阶级^o^)
/sbin存放⼆进制可执⾏⽂件,只有root才能访问。这⾥存放的是系统管理员使⽤的系统级别的管理命令和程序。如ifconfig等。
/dev⽤于存放设备⽂件。
/mnt系统管理员安装临时⽂件系统的安装点,系统提供这个⽬录是让⽤户临时挂载其他的⽂件系统。
/boot存放⽤于系统引导时使⽤的各种⽂件
/lib存放跟⽂件系统中的程序运⾏所需要的共享库及内核模块。共享库⼜叫动态链接共享库,作⽤类似windows⾥的.dll⽂件,存放了根⽂件系统程序运⾏所需的共享⽂件。
/tmp⽤于存放各种临时⽂件,是公⽤的临时⽂件存储点。
/var⽤于存放运⾏时需要改变数据的⽂件,也是某些⼤⽂件的溢出区,⽐⽅说各种服务的⽇志⽂件(系统启动⽇志等。)等。
/lost+found这个⽬录平时是空的,系统⾮正常关机⽽留下“⽆家可归”的⽂件(windows下叫什么.chk)就在这⾥

通用命令

认识终端

  [root@travis ~]#
名称概述
root为当前登录用户
travis主机名
~当前⼯作⽬录,默认是当前⽤户的家⽬录,root就是/root,普通⽤户是 /home/⽤户名
#、$提示符超级⽤户是 #,普通⽤户是$

一般命令格式

命令 [选项][参数]

当有多个选项时,可以写在⼀起

⼀般参数有简化和完整写法两种 -a 与 --all 等效

ls

查询⽬录中的内容

ls [选项][⽂件或者⽬录]

选项

  • -a 显示所有⽂件,包括隐藏⽂件
  • -l 显示详细信息
  • -d 查看⽬录本身的属性⽽⾮⼦⽂件 ls /etc/
  • -h ⼈性化的⽅式显示⽂件⼤⼩
  • -i 显示inode,也就是i节点

默认当前⽬录下的⽂件列表

-l 显示详细信息

drwxr-xr-x . 1 root root 800 Sep 16 00:19 logs
drwxr-xr-x.1rootroot800Sep 16 00:19logs
⽂件类型和权限ACL 权限硬链接引⽤计数所有者所属组文件大小最后修改时间文件名

⽂件类型和权限

-rw-r--r--

  • ⽂件类型 - ⽂件、d ⽬录、l 软链接⽂件
  • u(所有者)、g(所属组)、o(其他⼈)
  • r(read) 读取、w(write) 写⼊、x(execute) 执⾏

文件处理命令

mkdir

建⽴⽬录 mkdir

  • make directory

  • mkdir -p [⽬录名]

    • -p 递归创建

cd

切换所在⽬录 change directory

  • cd [⽬录]
    • ~ 家⽬录
    • 家⽬录
    • -上次⽬录
    • . 当前⽬录
    • .. 上级⽬录
  • 相对路径是参照当前所在⽬录
  • 绝对路径是从根⽬录开始
  • 按TAB键可以补全命令和⽬录

pwd

显示当前⽬录 pwd

rmdir

删除目录 rmdir

  • 删除⽬录 remove empty directory
  • rmdir [⽬录名]

rm

删除⽂件或者⽬录 remove

  • 删除⽂件或者⽬录 remove
    • rm [⽂件或者⽬录]
    • -r 删除⽬录
    • -f 强制删除
  • rm -rf [⽂件或者⽬录] 递归强制删除所有⽬录

cp

copy 复制命令

  • copy 复制命令
  • copy [源⽂件或者⽬录][⽬标⽂件]
    • -r 复制⽬录,默认是复制⽂件
    • -p 连带⽂件属性复制
    • -d 若源⽂件是链接⽂件,则复制连接属性
    • -a 相当于 -rpd

mv

  • 移动⽂件或者改名 move
  • mv [源⽂件或者⽬录][⽬标⽂件]

in

链接命令,⽣成链接⽂件 link

硬连接特征

  • 拥有相同的i节点和存储block块,可以看作是同⼀个⽂件
  • 可以通过i节点访问
  • 不能跨分区
  • 不能针对⽬录使⽤
  • ⼀般不使⽤

软链接特征

  • ln -s [源⽂件][⽬标⽂件]
    • -s 创建软链接
  • 类似Windows快捷⽅式
  • 软链接拥有⾃⼰的i节点和Block块,但是数据块中只保存源⽂件的⽂件名和i节点号,并没有实际的⽂件数据
  • lrwxrwxrwx l 软链接 软链接的⽂件权限都是 777
  • 修改任意⼀个⽂件,另⼀个都会改变
  • 删除源⽂件,软链接不能使⽤
  • 软链接源⽂件必须写绝对路径

⽂件搜索命令

locate

  • 在后台数据库中按⽂件名搜索,速度⽐较快
  • 数据保存在 /var/lib/mlocate 后台数据库,每天更新⼀次
  • 可以 updatedb 命令⽴刻更新数据库
  • 只能搜索⽂件名
/etc/updatedb.conf

建⽴索引的配置⽂件

  • PRUNE_BIND_MOUNTS = "yes" 全部⽣效,开启搜索限制
  • PRUNEFS 不搜索的⽂件系统
  • PRUNENAMES 忽略的⽂件类型
  • PRUNEPATHS 忽略的路径 /tmp

whereis

  • 搜索命令所在路径以及帮助⽂档所在位置
  • whereis 命令名
whereis ls
  • -b 只查找可执⾏⽂件
  • -m 只查找帮助⽂件

which

  • 可以看到别名 which ls
  • 能看到的都是外部安装的命令
  • ⽆法查看Shell⾃带的命令,如 which cd

echo $PATH

/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin
  • 定义的是系统搜索命令的路径
  • echo $PATH

find

  • ⽂件搜索命令
  • find [搜索范围][搜索条件]

按名称搜索

避免⼤范围的搜索,会⾮常消耗系统资源

find / -name aaa.log

通配符

  • find是在系统当中搜索符合条件的⽂件名,如果需要匹配,使⽤通配符匹配,通配符是完全匹配
  • 通配符
    • *匹配任意内容
    • ? 匹配任意⼀个字符
    • [] 匹配任意⼀个中括号内的字符
find . -name "ab[cdef]"

不区分⼤⼩写 -i

find / -iname "ab[cdef]"

按所有者进⾏搜索 -u

find /root -user root
find /root -nouser

grep

  • 在⽂件当中匹配符合条件的字符串
  • grep "10" access.log
    • -i 忽略⼤⼩写
    • -v 排除指定字符串
  • find命令,在系统当中搜索符合条件的⽂件名,如果需要匹配,使⽤通配符匹配,通配符是完全匹配
  • grep命令 在⽂件当中搜索符合条件的字符串,如果需要匹配,使⽤正则表达式进⾏匹配,正则表达式时包含匹配

网络管理

ifconfig & ip

查看和配置网络基本信息

tracerout

排查网络故障

ss | netstat

找到占用网络端口的进程

netstat -an | grep ':80'

nslookup

nslookup www.baidu.com

压缩

.zip` `.gz` `.bz2` `.tar.gz` `.tar.bz2

zip

  • 压缩⽂件 zip 压缩⽂件名 源⽂件
  • 压缩⽬录 zip -r 压缩⽂件名 源⽬录
  • 解压 unzip 压缩⽂件名
mkdir book
touch book/1.txt
touch book/2.txt
zip -r book.zip book
unzip book.zip

gzip

命令示例含义
gzip 源⽂件gzip a.txt压缩为.gz格式的压缩⽂件,源⽂件会消失
gzip -c 源⽂件 > 压缩⽂件gzip -c yum.txt >yum.txt.gz压缩为.gz格式的压缩⽂件,源⽂件不会消失
gzip -r ⽬录gzip -r xx压缩⽬录下的所有⼦⽂件,但是不压缩⽬录
gzip -d 压缩⽂件名gzip -d yum.txt.gz解压缩⽂件,不保留压缩包
gunzip 压缩⽂件gunzip yum.txt.gz解压缩⽂件,不保留压缩包
  • 压缩是压缩⽬录下的⽂件

bz2

命令示例含义
bzip2 源⽂件bzip2 1.txt压缩为.bz2格式的⽂件,不保留源⽂件
bzip2 -k 源⽂件zip2 -k 1.txt压缩为.bz2格式的⽂件,保留源⽂件
bzip2 -d 压缩⽂件名bzip2 -d 1.txt.bz2解压压缩包
bunzip2 压缩⽂件名bunzip2 1.txt.bz2解压压缩包
  • bzip2 不能压缩⽬录

tar

  • 打包命令
  • tar -cvf 打包⽂件名 源⽂件
    • -c 打包
    • -v 显示过程
    • -f 指定打包后的⽂件名
tar -cvf book.tar book
gzip book.tar
bzip2 book.tar
  • x 解打包
tar -xvf book.tar

关机重启

w

查看登录⽤户信息

  • USER 登录的⽤户名
  • TTY 登录的终端 tty1 本地终端 pts/0远程终端
  • FROM 登录的IP
  • LOGIN 登录时间
  • IDLE ⽤户闲置时间
  • JCPU 该终端所有进程占⽤的时间
  • PCPU 当前进程所占⽤的时间
  • WHAT 正在执⾏的命令

who

查看登录⽤户信息

  • USER 登录的⽤户名
  • TTY 登录的终端 tty1 本地终端 pts/0远程终端
  • LOGIN 登录时间(登录的IP)

last

查看当前登录和过去登录的⽤户信息 默认读取 /var/log/wtmp ⽂件

  • ⽤户名
  • 登录终端
  • 登录IP
  • 登录时间
  • 退出时间(在线时间)

lastlog

查看所有⽤户的最后⼀次登录时间

  • ⽤户名
  • 登录终端
  • 登录IP
  • 最后⼀次登录时间

vi常用

  • [Esc] 退出编辑模式,回到一般模式中(常用)
  • :w 保存
  • :w! 若文件属性为『只读』时,强制写入该档案。不过,到底能不能写入, 还是跟你对该档案的档案权限有关啊!
  • :q 退出
  • :q! 若曾修改过档案,又不想储存,使用 ! 为强制离开不储存档案。
  • :! 强制保存
  • :ls 列出所有的⽂件
  • :n 下⼀个
  • :N 上⼀个
  • :15 跳转到指定⾏
  • /xxx 从光标位置开始向后搜索 xxx 字符串
  • ?xxx 从光标位置开始向前搜索
  • h 前移光标
  • l 左移光标
  • j 下移光标
  • k 上移光标

全部快捷键

切换用户

su

su root

安装文件

rpm

rpm命令是RPM软件包的管理工具。rpm原本是Red Hat Linux发行版专门用来管理Linux各项套件的程序,由于它遵循GPL规则且功能强大方便,因而广受欢迎。逐渐受到其他发行版的采用。RPM套件管理方式的出现,让Linux易于安装,升级,间接提升了Linux的适用度。

用法: rpm [选项...]

  • -a:查询所有套件;
  • -b<完成阶段><套件档>+或-t <完成阶段><套件档>+:设置包装套件的完成阶段,并指定套件档的文件名称;
  • -c:只列出组态配置文件,本参数需配合"-l"参数使用;
  • -d:只列出文本文件,本参数需配合"-l"参数使用;
  • -e<套件档>或--erase<套件档>:删除指定的套件;
  • -f<文件>+:查询拥有指定文件的套件;
  • -h或--hash:套件安装时列出标记;
  • -i:显示套件的相关信息;
  • -i<套件档>或--install<套件档>:安装指定的套件档;
  • -l:显示套件的文件列表;
  • -p<套件档>+:查询指定的RPM套件档;
  • -q:使用询问模式,当遇到任何问题时,rpm指令会先询问用户;
  • -R:显示套件的关联性信息;
  • -s:显示文件状态,本参数需配合"-l"参数使用;
  • -U<套件档>或--upgrade<套件档>:升级指定的套件档;
  • -v:显示指令执行过程;
  • -vv:详细显示指令执行过程,便于排错。
rpm -ivh your-package                # 直接安装
rpm --force -ivh your-package.rpm # 忽略报错,强制安装

查看进程

ps

  • -e 显示所有进程
  • -f 全格式
  • -u 不显示标题
  • -l 长格式
  • -w 宽输出
  • a 显示终端上所有进程,包含其他用户的进程
  • r 只显示正在运行的进程
  • u 以用户为主的格式来显示程序的状况
  • x 显示所有程序,不以终端机来区分

查看进程: ps -ef

ps -ef 是用标准的格式显示进程的、其格式如下

  • UID //用户ID、但输出的是用户名
  • PID //进程的ID
  • PPID //父进程ID
  • C //进程占用CPU的百分比
  • STIME //进程启动到现在的时间
  • TTY //该进程在那个终端上运行,若与终端无关,则显示? 若为pts/0等,则表示由网络连接主机进程
  • CMD //命令的名称和参数

查看进程: ps aux

ps aux 是用BSD的格式来显示、其格式如下

同ps -ef 不同的有列有

  • USER //用户名
  • %CPU //进程占用的CPU百分比
  • %MEM //占用内存的百分比
  • VSZ //该进程使用的虚拟內存量(KB)
  • RSS //该进程占用的固定內存量(KB)(驻留中页的数量)
  • STAT //进程的状态
  • START //该进程被触发启动时间
  • TIME //该进程实际使用CPU运行的时间

其中STAT状态位常见的状态字符有

  • D //无法中断的休眠状态(通常 IO 的进程)
  • R //正在运行可中在队列中可过行的
  • S //处于休眠状态
  • T //停止或被追踪
  • W //进入内存交换 (从内核2.6开始无效
  • X //死掉的进程 (基本很少见)
  • Z //僵尸进程
  • < //优先级高的进程
  • N //优先级较低的进程
  • L //有些页被锁进内存
  • s //进程的领导者(在它之下有子进程)
  • l //多线程,克隆线程(使用 CLONE_THREAD, 类似 NPTL pthreads)
  • [+] //位于后台的进程组

传输文件

scp

可以简单用scp 命令来实现

查看scp帮助:sup -h

输出信息如下

scp: illegal option -- h
usage: scp [-346BCpqrTv] [-c cipher] [-F ssh_config] [-i identity_file]
[-J destination] [-l limit] [-o ssh_option] [-P port]
[-S program] source ... target

option

  1. -v 显示进度
  2. -r 递归处理
  3. -C 压缩选项
  4. -P 选择端口

macos 上传

scp -r local_folder remote_username@remote_ip:remote_folder

macos 下载

scp -r remote_username@remote_ip:remote_folder local_folder

更多参数

更多参数可以通过命令 man scp 来查看

查看端口占用

netstat

常见参数: |命令|参数| |:- |:- | |-a或--all | 显示所有连线中的Socket。 |-A<网络类型>或--<网络类型> | 列出该网络类型连线中的相关地址。 |-c或--continuous | 持续列出网络状态。 |-C或--cache | 显示路由器配置的快取信息。 |-e或--extend | 显示网络其他相关信息。 |-F或--fib | 显示FIB。 |-g或--groups | 显示多重广播功能群组组员名单。 |-h或--help | 在线帮助。 |-i或--interfaces | 显示网络界面信息表单。 |-l或--listening | 显示监控中的服务器的Socket。 |-M或--masquerade | 显示伪装的网络连线。 |-n或--numeric | 直接使用IP地址,而不通过域名服务器。 |-N或--netlink或--symbolic | 显示网络硬件外围设备的符号连接名称。 |-o或--timers | 显示计时器。 |-p或--programs | 显示正在使用Socket的程序识别码和程序名称。 |-r或--route | 显示Routing Table。 |-s或--statistics | 显示网络工作信息统计表。 |-t或--tcp | 显示TCP传输协议的连线状况。 |-u或--udp | 显示UDP传输协议的连线状况。 |-v或--verbose | 显示指令执行过程。 |-V或--version | 显示版本信息。 |-w或--raw | 显示RAW传输协议的连线状况。 |-x或--unix | 此参数的效果和指定"-A unix"参数相同。 |--ip或--inet | 此参数的效果和指定"-A inet"参数相同。

查看当前所有tcp端口

[root@localhost ~]# netstat -ntlp

查看所有8000端口使用情况

[root@localhost ~]# netstat -ntulp | grep 8000

更改用户权限

chown

只能是 root 用户更改 用户组和用户所属

  • user : 新的文件拥有者的使用者 ID
  • group : 新的文件拥有者的使用者组(group)
  • -c : 显示更改的部分的信息
  • -f : 忽略错误信息
  • -h :修复符号链接
  • -v : 显示详细的处理信息
  • -R : 处理指定目录以及其子目录下的所有文件
  • --help : 显示辅助说明
  • --version : 显示版本

规则

[root@localhost ~]# chown [-cfhvR] [--help] [--version] user[:group] file...
# 常见
[root@localhost ~]# chown -R user:group file(dir)

chmod

Linux/Unix 的文件调用权限分为三级 : 文件拥有者、群组、其他。利用 chmod 可以藉以控制文件如何被他人所调用

常见参数

参数说明
u表示该文件的拥有者,g 表示与该文件的拥有者属于同一个群体(group)者,o 表示其他以外的人,a 表示这三者皆是。
+表示增加权限、- 表示取消权限、= 表示唯一设定权限。
r表示可读取,w 表示可写入,x 表示可执行,X 表示只有当该文件是个子目录或者该文件已经被设定过为可执行。
-c若该文件权限确实已经更改,才显示其更改动作
-f若该文件权限无法被更改也不要显示错误讯息
-v显示权限变更的详细资料
-R对目前目录下的所有文件与子目录进行相同的权限变更(即以递回的方式逐个变更)
--help显示辅助说明
--version显示版本

用法

[root@localhost ~]# chmod [-cfvR] [--help] [--version] mode file...
# 超级权限
[root@localhost ~]# chmod 777 file(dir)
# 稳定读取
[root@localhost ~]# chmod 600 file(dir)
# 给所有者增加写的权限
[root@localhost ~]# chmod u+w file(dir)
# 递归给权限
[root@localhost ~]# chmod -R 600 file(dir)