Linux 初步笔记

来源:互联网 发布:编程培训学校哪个好 编辑:程序博客网 时间:2024/05/24 01:36

Linux 学习之路。这篇博文主要记录博主学习Linux 的点点滴滴,大家可以选择略过也可以作参考。

Linux 目录结构

  • / :根目录,每一个文件和目录从根目录开始,只有root用户具有该目录下的写权限。
  • /bin : 用户二进制文件包含二进制可执行文件。在单用户模式下,你需要使用的常见Linux命令都位于此目录下。系统的所有用户使用的命令都设在这里。
  • /boot :主要放置开关机会使用的文件,包括Linux 内核文件以及开关机菜单与开机所需要的配置文件。
  • /dev :在Linux 系统中所有的设备与接口设备都是以文件的形式存放在这个目录中。只要访问这个目录下的某个文件就相当于访问某个设备。
  • /etc :所有系统管理所需要的配置文件和子目录。比如设置运行级别。
  • /home :存放普通用户的主目录,在Linux 系统中每个用户都有一个独立的目录,一般该目录名以账号用户名命名。
  • /lib :系统开机所需要的最基本的动态链接共享库,功能类似于Windows 中的DLL 文件。几乎所有的应用程序都需要用到这些共享库。
  • /lost + found :这个目录一般是空的,当用户非法关机后会保存一些文件。
  • /misc :挂载外部设备
  • /media :Linux 系统会自动识别一些设备,例如U 盘、光驱等,当识别后Linux 会把识别的设备挂在这个目录下。
  • /mnt :为了让用户临时挂载别的文件系统,我们可以将光驱挂在在该目录中。
  • /opt :给主机安装额外软件所摆放的目录。默认情况下是空的。比如我们可以将数据库安装在这个目录下。
  • /proc :这个目录上是一个虚拟的目录,它是系统内存的映射,我们通常可以访问这个目录来获取系统信息。
  • /root :该目录为系统管理员的主目录。
  • /sbin :Super Bin的意思, 系统二进制文件,就像/bin,/sbin同样也包含二进制可执行文件。但是,在这个目录下的linux命令通常由系统管理员使用,对系统进行维护。
  • /selinux :这个目录是Redhet 与CentOS 所特有的目录,是一个安全机制,类似于防火墙。
  • /srv :service 的缩写,该目录存放一些服务启动之后需要提取的数据。
  • /sys :该目录下安装了2.6 内核中新出现的一个文件系统sysfs。
  • /tmp :该目录用来存放一些临时文件。
  • /usr :很重要的一个目录,用户的很多应用程序和文件都放在这个目录下。类似于Windows 中的program files 目录。
  • /var :这个目录存放着在不断被扩充的文件。我们习惯将那些经常需要被修改的文件放在该目录下,比如一些日志文件等。

简单命令积累

=======================关机重启与用户管理命令===========================

shutdown -h now || [指定时间] 、poweroff 、init 0 ->关机命令
shutdown -r now 、reboot 、init 6 ->立即重新启动计算机
logout -> 退出登录
useradd [×××] ->添加用户×××
passwd [×××] ->给××× 用户修改或者添加密码
userdel [×××] ->删除用户×××但是不删除该用户的目录
userdel -r [×××] ->删除用户及用户的目录

=======================文件目录处理命令===========================

ls -a ->显示隐藏文件
ls -l ->显示长列表格式
pwd ->显示当前所在的目录
cd 、cd ~ -> 进入当前用户的家目录
cd - ->进入上次目录
cd .. ->进入上一级目录
cd . ->进入当前目录
mkdir -p [×××] ->可以递归创建目录×××
rmdir [×××] ->删除目录×××
cp -r [源文件] [目标文件] ->递归持续复制包括目录及为文件
rm -rf [文件或目录] ->递归强制删除目录和文件
mv [source] [destination] ->移动文件或目录或者更改文件名(在同一个文件目录下为改名操作)

=======================链接命令===========================

1. 硬链接:ln [源文件] [目标文件]

  1. 拥有相同的i 节点号和存储block 块,可以看做是同一个文件
  2. 可以通过i 节点识别
  3. 不能跨分区
  4. 不可以针对目录使用

2.软链接: ln -s [源文件] [目标文件]

  1. 类似于Windows 的快捷方式
  2. 软链接拥有自己的i 节点和block 块,但是数据块中只保存源文件的文件名和i 节点号,并没有实际的文件数据
  3. 修改任意文件,另一个文件都会随之改变
  4. 删除源文件,软链接不能使用

=======================文件搜索命令===========================

locate [文件名] ->在后台数据库(数据库默认一天一更新)按照文件名进行搜索,速度快,在执行前可以先 updatedb
whereis [文件命令] -> 用于搜索命令所在的位置并显示该命令帮助文档所在的位置
which [文件命令] -> 搜索命令所在的位置并显示别名
grep -n [关键词] [源文件] ->搜索关键字并显示行号
find [搜索范围] [搜索条件] ->在系统中搜索符合条件的文件名,可以使用通配符 *、?、[]
  搜索条件:

  1. -name [搜索文件] : 按照文件名搜索
  2. -iname [搜索文件] : 不区分大小写
  3. -user [用户]: 按照所有者搜索
  4. -nouser : 查找没有所有者的文件
  5. -mtime +10 : 10 天前修改的文件
  6. -mtime 10 : 十天前当天修改的文件
  7. -mtime -10 : 十天内修改的文件
  8. -size -25k : 查找大小小于25k 的文件、也可以使用M 指定查找大小范围
  9. -inum [文件节点号] ->根据文件节点号查找
  10. -size +10k -a -size -50k ->查找大于10k 并且小于 50k 的文件
  11. -size -10k -o -size +50k ->查找小于10k 或者大于 50k 的文件

=======================帮助命令===========================

man [命令] : ->获取指定命令的帮助
man -f [命令] : ->查看命令拥有哪个级别的帮助相当于whatis [命令]
man -k [命令] : ->查看和命令相关的所有帮助 相当于apropos [命令]
[命令] –help : -> 获取指定命令的帮助[中文显示]
help [命令] : -> 用于获取shell 内部的命令 可以使用whereis [命令] 确定是否指shell 内部命令
info [命令] : -> 获得详细命令帮助

=======================压缩与解压缩命令===========================

zip [源压缩件] [源文件] : ->将文件压缩成zip 格式,在进行文件压缩的时候要注意指定压缩后缀名便于区分
zip -r [压缩目录] [源文件] : -> 压缩目录
unzip [压缩文件或目录] : -> 解压缩文件或目录
gzip [源文件] : -> 压缩为.gz 格式的文件,压缩后源文件会消失
gzip -r [源目录] : -> 压缩该目录下的所有文件,但是不压缩目录
gzip -d [压缩文件或目录] : -> 解压缩文件 与gunzip [压缩文件] 同
bzip2 -k [源文件] : -> 压缩之后保留源文件,压缩为.bz2 文件格式,不能压缩目录
bzip2 -d [压缩文件] : -> 解压缩文件,-k 保留压缩文件,与bunzip2 [压缩文件] 同
tar -zcvf [压缩包名].tar.gz [源文件]: -> 将其先打包再压缩为.gz 格式,支持多文件压缩中间用空格隔开
tar -zcvf [文件目录][源文件].tar.gz [压缩包名] : ->指定压缩文件的目录
tar -zxvf [压缩包名].tar.gz: -> 解压缩文件
tar -zxvf [压缩包名].tar.gz -C [解压目录] : -> 将文件解压缩指定的目录下
tar -ztvf [压缩包名].tar.gz: -> 查看压缩文件里的内容不解压
tar -jcvf [压缩包名].tar.bz2 [源文件]: ->压缩为.tar.bz2 格式的压缩文件
tar -jxvf [压缩包名].tar.bz2 : ->解压缩文件

=======================挂载命令===========================

mount : -> 查询系统中已经挂载的设备
mount -a : -> 根据配置文件/etc/fstab 的内容自动挂载
挂载光盘:

  1. mkdir /mnt/cdrome/ : -> 建立挂载点
  2. mount -t iso9660 /dev/sr0 /mnt/cdrome : -> 挂载光盘、-t iso9660 可以省略

umount /mnt/cdrome : -> 卸载命令

=======================输入输出重定向命令===========================

[命令] > [文件] : ->以覆盖的方式,把命令正确执行的结果输出到指定的文件或设备中
[命令] >> [文件] : ->以追加的方式,把命令正确执行的结果输出到指定的文件或设备中
[错误命令] 2>[文件] : ->以覆盖的方式,把命令错误执行的结果输出到指定的文件或设备中
[错误命令] 2>>[文件] : ->以追加的方式,把命令错误执行的结果输出到指定的文件或设备中
[命令] >> [文件] 2>&1: -> 以追加的方式,把正确和错误输出的结果都保存在指定的文件中与 [命令] &>> [文件] 同
[命令] >> [文件1] 2>> [文件2] : -> 执行正确时将结果输出到文件1,错误时将结果输出到文件2
wc [文件名] : -> 输出顺序是行数、单词数、字节数。

=======================组合命令===========================

find [搜索范围] -size +20k -a size -50k -exec ls -lh {} \; -> 将前面的查找结果交给后面的命令进行操作

=======================其他命令===========================

runlevel -> 查看当前系统的运行级别
w [用户名]/也可以不写用户名 -> 查看登录用户信息
who -> 查看当前在线状态的用户
last -> 查询当前登录和过去登录的
lastlog -> 查询所有用户的最后一次登陆时间
echo [变量] -> 变量的显示

命令行常用快捷键

  • Ctrl + c : 强制终止当前命令
  • Ctrl + l : 清屏
  • Ctrl + a : 将光标移动到命令行首
  • Ctrl + e :将光标移动到命令行尾
  • Ctrl + u :从光标所在的位置一直删除到行首
  • Ctrl + z : 将命令放入后台执行
  • Ctrl + r : 在历史命令中搜索

Linux 运行级别

  • 命令init [0-6],最常用的运行级别是3 和 5,可以对/etc/inittab 文件进行编辑修改运行级别
  • 0:关机
  • 1:单用户
  • 2:多用户状态没有网络服务
  • 3:多用户状态有网络服务
  • 4:系统未使用保留给用户
  • 5:图形界面
  • 6:系统重启

可以修改 /etc/inittab 文件的内容来指定系统启动时启动的运行级别。

VIM编辑器

其实在Linux 命令行界面下的文本编辑器有很多比如Emacs、pico、nano、Joe、与vim 等。既然有这么多命令行下的文本编辑器为什么我们一定要学习vim 呢?主要是它有以下的优点:

  • 所有的UNIX Like 系统都内置vim 编辑器,其他的文本编辑器不一定存在
  • 很多软件的编辑接口都会主动调用vi
  • vim 具有程序编辑能力,可以主动以字体颜色辨别语法的正确性,方便程序设计
  • 编辑速度快速

vi 下的三种模式

  • 一般模式:以 vi 打开以一个文件就进入一般模式了(这也是默认的模式)。在这个模式下可以使用左右键移动光标,删除字符或者删除整行,也可以复制粘贴文件的数据。
  • 编辑模式:一般模式下可以进行复制、粘贴和删除等的操作,但是是无法编辑文本内容的,按下”i,I,o,O,a,A” 等任何一个字母之后才会进入编辑模式。在这个模式下除了[Esc] 这个按键之外所有的其他按键都可以视为一般输入了,所以离开编辑模式时要按下[Esc]键才可以离开编辑模式进入到一般模式。
  • 命令行模式:在一般模式下输入“: / ?” 中的任何一个符号就可以将光标移动到最下面的一行。在这里你可以对你的文件进行读取、保存等一些功能。

vim 中的一些命令

vim [文件名]: -> 如果文件存在则打开文件,不存在创建文件
vim + : -> 打开文件时光标在最后一行
vim +3 : -> 指定vim 打开文件时光标所在的行号
vim +/[搜索的关键字] [源文件] : ->打开文件将光标锁定在第一次出现关键字所在行号,可以按n 切换关键字所在行号

vim 的环境设置可以写入 ~/.vimrc 文件中,比如进行简单的配置显示行号:set nu。

vim编辑器编写Java 程序步骤在安装好jdk 的情况下)

  1. vim ××.java
  2. 输入 i 进入输入模式
  3. 按Esc 按键完成输入
  4. 输入: wq [表示退出并保存] 、 :q! [表示退出不保存]
  5. 编译程序
  6. 运行

用户与用户组

Linux 系统中每个文件都有相当多的属性与权限,其中有一个很重要的概念就是文件所有者。
文件所有者:
      由于Linux 是一个多用户、多任务的系统,所以在实际开发过程中可能有很多人同时使用一台主机进行工作,为了考虑每个人的隐私权限以及每个人的喜好的工作环境,因此“文件所有者”这个概念就相当重要了。
用户组:
      在Linux 系统下可以对用户进行划分,比如在实际开发的过程中一共有两个团队,每个团队下都有若干个用户,那么可以创建两个用户组,把每个团队中的用户划分到对应的用户组中。多个用户组之间可以设置权限,当然用户组中的每个用户之间也可以设置权限。

在/etc/group 中存储着当前系统中所有用户组信息,以查到的一个用户组为例:

 Jas    :    x    :    500    :组名称    组密码占位符  组编号    组中用户名列表

在/etc/passwd 中存储当前系统中所有用户信息,以查到的一个用户为例:

 Jas    :    x    :   500    :    500    :   Jas Zhang   :  /home/Jas  :    /bin/bash用户名    密码占位符    用户编号    组编号    用户注释信息     用户主目录    shell 类型

用户与用户组下常用的命令

groupadd [用户组名]: -> 创建一个用户组
groupadd -g [用户组编号] [用户组名]:-> 创建一个指定用户组编号的用户组
groupmod -n [新用户组名] [原用户组名] : -> 修改用户组的名称
groupmod -g [用户组编号] [原用户组名] : -> 修改用户组的编号
groupdel [用户组名] :-> 删除一个用户组(在该用户组中不能有用户)
useradd -g [用户组名] [用户名] :-> 在指定的用户组中添加用户
userdel -r [用户名] -> 删除用户并删除该用户下的文件

Linux 文件权限

以root 用户登录系统,ls -h 列出root 主目录下的文件,以中一个为例:

   -rw-r--r--. 1 root root  102 12月 16 10:27 Hello.java   [1]        [2][3]  [4]   [5]     [6]           [7]      [1]:表示文件权限   [2]:表示连接数   [3]:当前用户   [4]:用户组   [5]:文件大小   [6]:修改日期   [7]:文件名

知道了这些选项是什么意思后再来深入了解一下 “-rw-r–r–” 权限:它也可以被分为如下四个部分

   -     rw-    r--    r--  [1]    [2]    [3]    [4]  [1]: 表示文件类型  [2]: 表示文件所有者的权限,具有可读、可写权限  [3]: 表示通用户组的权限,具有可读属性  [4]: 表示其他非本用户组的权限,具有可读属性

文件类型包括一下几种:

  • - :表示文件
  • d :表示目录
  • l : 表示链接文件
  • b :表示设备文件里面的可供存储的接口设备
  • c :表示设备文件里面的串行端口设备,比如鼠标、键盘等。

所以来总结一下Hello.java 就是它首先是一个文件,用户所有者对它具有可读与可写权限,同用户组的其他成员具有可读权限,非本用户组的其他用户具有可读权限。

修改文件的属性与权限命令

chgrp [组名] [文件或目录] : -> 改变文件所属的用户组,可以使用-R 递归持续更改(放在组名前面使用)
chown [账户名] [文件或目录] : -> 改变文件的所有者,同上
chmod xyz [文件] : -> 修改文件的权限,也可以使用-R 递归修改所有目录下的子文件

要改变文件的权限有两种方式,一种是使用数字修改,一种是使用符号修改权限(这种方式不作具体介绍)。
      数字类型改变权限:用户对文件的权限有三种read、write、execute,分别对应r、w、x。可以使用数字来代表各个权限,r = 4 ,w = 2 ,x = 1。以上面”-rw-r–r–”为例,它对应的权限用数字表示为644。如果我们想让所有的用户都对这个文件具有可读、可写、可执行权限,那么我们可以使用命令chmod 这样做:“chmod 777[文件]”。

权限对文件的作用

  • r :读取文件的内容(cat、more、head、tail)
  • w:编辑、新增、修改文件的内容(vi 、echo),但是不具有删除文件的权限
  • x :可执行

权限对目录的作用

  • r :可以查询文件下的文件名(ls)
  • w :具有修改文件目录结构的权限。比如新建文件和目录,删除此目录下的文件和目录,重命名等(touch rm mv cp)
  • x :可以进入到目录(cd)

默认权限

umask -> 查看默认权限
umask [修改值] -> 临时修改umask 值
vi /etc/profile -> 永久修改umask 值

默认权限:

  • 文件默认不能建立为执行文件,必须手工赋予执行权限
  • 文件默认权限最大为666(rw)
  • 目录默认的最大权限为777(rwx)

Shell

什么是Shell

      Shell 是一个命令行解释器,它为用户提供了一个向Linux 内核发送请求以便运行程序的界面系统级程序,用户可以使用Shell 来启动、挂起、停止以及编写一些程序。Shell 还是一个功能强大的编程语言,易编写、易调试、灵活性较强。Shell 是解释执行的脚本语言,在Shell 中可直接以调用Linux 系统命令。

echo 输出命令

echo [选项] [输出内容] : -> 输出内容
echo -e [输出内容] : -> 支持反斜线控制的字符转换
echo -e “\e[1;35m 你好 \e[0m” : -> 带颜色输出内容

编写第一个脚本文件

       1.vi hello.sh
       2.编写脚本内容:输出一句话

        #!/bin/bash        #第一个脚本文件         echo -e "\e[1;35m Hello Jas\E[0m"

      3.执行脚本文件:bash hello.sh 或者:chmod 755 hello.sh ,/root/hello.sh

多命令执行顺序

  • ->多个命令顺序执行,无论命令对错都会顺序执行
  • && ->逻辑与关系,只有当前面所有命令正确执行时,紧跟后面的命令才会执行
  • || -> 逻辑或关系,如果前面的命令执行后面的命令不执行,如果前面的命令不执行则后面的命令执行

管道符

  • [命令1] | [命令2] … -> 命令1 的正确输出作为命令2 的操作对象

通配符

  • ? -> 匹配任意一个字符
  • * -> 匹配0 个或任意多个任意字符
  • [] -> 匹配括号中的任意一个字符。例如[abc] 表示匹配一个a、b、或者c
  • [-] ->匹配 括号中的任意一个字符。比如[a-z] 表示匹配a-z 中的任意一个字母
  • [^] -> 逻辑非,表示不匹配括号中的字符。比如[^a-z] 表示不匹配a-z 中的任意一个字符
原创粉丝点击