Linux基础

Posted 海盗屋

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux基础相关的知识,希望对你有一定的参考价值。

Lunux简介

Linux就是操作系统,如windows、mac。  

LInux是基于Unix的开源免费的操作系统,由于系统的稳定性和安全性几乎成为程序代码运行的最佳系统环境。

Linux是由Linux Torvalds(林纳斯·托瓦兹)期初开发的,由于源代码的开放性,现在已经衍生出了成千上百种不同的Linux系统。

Linux系统的应用非常广泛,不仅可以长时间的运行我们编写的代码,还可以安装在各种计算机硬件设备中,如手机、平板电脑、路由器等。android程序最底层就是运行在linux系统上的。

 

Linux的分类

1.Linux根据市场需求不同,基本分为两个方向:

  1)图形化界面版:注重用户体验,类似windows操作系统,但目前成熟度不够。

  2)服务器版:没有好看的界面,是以在控制台窗口中输入命令操作系统的,类似dos,使我们假设服务器的最佳选择。

2.Linux根据原生程度,又分两种:

  1)内核版本:https://www.kernel.org/ 内核->二次开发后->定制特有功能->发布。

  2)发型版本:一些组织或公司在内核版基础上进行二次开发而重新发型的版本

3.Linux发型版本不同,又可以分为n多种

  图形化的有:ubantu、fedora、 命令行的:CentOS

 

Linux的安装

1.虚拟机-- 在电脑上安装一个软件,在软件中可以模拟一台或多台虚拟的电脑机器。  Parallels Desktop (mac)、VMWare(win)、windows10自带的Hyper-v 默认没有开启 在控制面板 可以开启

2.CentOS 下载 https://www.centos.org/download/

CentOS官网上,提供了三种ISO镜像文件的下载:

  • DVD ISO:标准安装版,一般下载这个就可以了(推荐)
  • Everything ISO:对完整版安装盘的软件进行补充,集成所有软件。(包含CentOS7的一套完整的软件包,可以用来安装系统或者填充本地镜像)
  • Minimal ISO:迷你版,小巧、安装快速、自带的软件少

本次安装最小的.. minimal iso.

安装CentOS root 1234

虚拟机的安装和CentOs的安装见如下网址,mac用 pd ,windows用 vm 

https://www.linuxidc.com/Linux/2016-08/133827.htm

桥接模式 就是跟你的电脑使用同一个ip,NAT模式就是虚拟机使用独立的ip。 

服务器版的linux安装完后,没有图形化界面,所以只能通过控制台去操作系统,我们就要使用类似dos命令的linux命令去操作系统。

Linux基本命令

登陆 一共有两个账号 一个是你自定义的 一个是root 根权限 密码按设置的输入

  windows中通过图形化界面和鼠标可以任意切换需要进入的目录,但linux必须通过cd命令切换目录。

linux目录结构

bin (binaryies)存放二进制可执行文件(ls、cat、mkdir等),常用命令一般都在这里。

sbin(super user binaries) 存放二进制可执行文件,只有root才能访问

etc(etcetera) 存放系统配置文件

usr(unix shared resources) 存放共享的系统资源

home 存放用户文件的根目录  是用户主目录的基点 比如user的主目录就是 /home/user 可以用~user表示

root 超级用户目录

dev(devices) 存放设备文件

lib(library)存放跟文件系统中的程序运行所需要的共享库及内核模块

mnt(mount)系统管理员安装临时文件系统的安装点

boot 存放用于系统引导时使用的各种文件

tmp(temporary) 用于存放各种临时文件

var(variable) 用于存放运行时需要改变数据的文件 ,比如说各种服务的日志文件,系统启动日志等。

opt 额外安装的可选应用程序包所放置的位置,一般我们把tomcat等安装到这里。

使用root登陆完 所在位置 ~ root文件夹

 

1.目录切换命令

cd usr 切换到该目录下的usr目录

cd .. 切换到上一层目录

cd / 切换到系统根目录

cd ~ 切换到用户主目录

cd - 切换到上一个所在目录

 

2.目录的操作命令(增删改查)

1.增加目录:mkdir 目录名称 mkdir mypackage  mkdir mypackage/child , mkdir cir/cir2 报错没有cir 加-p 创建嵌套目录 mkdir -p cir/cir2

2.查看目录列表:ls 查看当前路径下文件  ls / 查看根目录 后面可以跟目录 ls -a 查看所有文件包含隐藏 ls -l 查看详细信息 ll -h 以kb单位展示 详细信息

3.寻找目录 查 : find 目录 参数 如:查找root下的与test相关的目录或文件 find /root -name \'test*\'  find / -iname *ss* 忽略大小写 -iname

  find / -size +204800   查找根目录 文件大于100mb的  1024kb = 1mb 100mb=102400kb 102400kb=204800块 1kb=2块 1块=0.5kb

  find / -name \'test*\' -a -type d 查找目录 d是目录 -a 是连接符 

4.修改目录的名称: mv 目录名称 新目录名称  如:test目录下有一个oldTest目录,使用 mv oldTest newTest 命令修改(mv 命令不光可以修改目录,还可以修改文件名 压缩包名等)

5.移动目录的位置 --剪切 : mv 目录名称 目录新的位置 将test下的newTest 剪切到 /usr下面 使用 mv newTest /usr (mv 命令不光可以剪切目录,还可以剪切压缩包 文件等)

6.拷贝目录 cp -r 目录名称 拷贝到目标位置 -r代表递归拷贝 如:将/usr下的newTest 拷贝到根目录下的test中,使用 cp -r /usr/newTest /test (cp 命令不光可以拷贝文件,压缩包 文件 都可以进行拷贝 ,压缩包和文件不能使用-r递归)

7.删除目录 rm [-rf] 目录 如:删除/usr下的newTest文件夹,使用 rm -r newTest 。进入 /test 使用rm -rf newTest 不需要询问删除 (rm 不仅可以删除目录,也可以删除其他文件或压缩包)

8.删除空文件夹 rmdir  test 此test必须是空文件夹

9.man 帮助命令 man touch man cd man rm

 

3.文件的操作命令(增删改查)

1.创建文件 touch 文件名 在test目录下创建空文件 touch aaa.txt

2.文件的查看 cat/more/less/tail 文件 

  使用cat查看 /etc/sudo.conf 文件 只能显示最后一屏的内容

  使用more查看 /etc/sudo.conf 文件,可以显示百分比,回车可以向下一行 空格可以向下一页,退出按q

  使用less查看 /etc/sudo.conf 文件,可以使用键盘上的 上下 和PgUp 和PgDn向上和向下翻页,q结束查看

  使用tail -10查看 /etc/sudo.conf 文件的后10行 ,ctrl+c 结束 (使用tail -f 文件 可以对某个文件进行动态监控,如日志文件)

3.修改文件的内容 vim 文件 如:编辑test下的aaa.txt文件 使用vim aaa.txt 但此时并不能编辑 点击键盘 i/a/o 进入编辑模式 可以编辑文件,编辑完成后 退出vim 先按下esc 然后输入 :wq 保存退出 :q不保存退出。 如果找不到命令参考 https://blog.csdn.net/yi22110421/article/details/51692107  

4.删除文件 rm -rf 文件 即可 同目录

 

4.压缩文件的操作命令

1.打开并压缩文件

Linux中打包文件一般是以.tar结尾的,压缩命令一般是以.gz结尾的。

而一般情况下 打包和压缩是一起进行的,打包并压缩后的文件的后缀名一般是.tar.gz。

命令:tar -zcvf 打包压缩后的文件名 要打包压缩的文件

其中: z -调用gzip压缩命令进行压缩

    c -打包文件

    v -显示运行过程

    f 指定文件名

示例:打包并压缩/test 当前没文件夹所有的文件 压缩包的压缩名指定为 test.tar.gz   tar -zcvf test.tar.gz ./

2.解压压缩包

命令:tar [-xvf] 压缩文件

其中: x -代表解压

示例:解压 test目录下的test.tar.gz到当前目录下 tar -xvf test.tar.gz

   解压 test目录下的test.tar.gz到根目录/usr下  tar -xvf test.tar.gz -C /usr ----C代表指定解压的位置

 

5.其他命令

1.显示当前所在的位置 pwd

2.clear 清空当前屏幕 快捷键ctrl+l

3.搜索命令 grep 要搜索的字符串 要搜索的文件 如:grep postopny postopny.txt --color 在postpony.txt中查找postpony字符串 --color代表高亮 可写可不写

4.查看进程 ps -ef

4.管道命令 命令: |  前面是上一级 后面是下一级  可以将上一个命令的输出作文本次目录的输入   ps -ef | grep system 搜索出有 system字符串的  前面的输出结果 | 作为下一个命令的输入

5.杀死进程 kill -9 进程的pid ps -ef | grep qq --color 找到qq进程 kill -9 38483 杀掉

6.网络通信命令 ifconfig 结合管道查看ip ifconfig | grep "inet" 如果没有 https://blog.csdn.net/gxdvip/article/details/40110487

        ping 目标网址 或ip 

        netstat -an 查看当前系统的端口使用

7.追加符号 >> echo hello >> aaa.txt  把内容追加到这个文件中

 

 

6.用户和用户组

cat /etc/passwd 查看所有用户

root:x:0:0:root:/root:/bin/bash

bin:x:1:1:bin:/bin:/sbin/nologin

david:x:1000:1000:大伟 白:/home/david:/bin/bash

用户名:x是否需要密码:UID=user id 用户ID(0是root 1-499是系统用户 普通用户500+ ):GIP=group id 用户组ID:别名:用户家路径:shell命令

 

cat /etc/group 查看用户组 linux在我们创建用户时,默认以我们的用户名称创建一个用户组。

root:x:0:

bin:x:1:

david:x:1000:david

用户组名:x密码标记位:用户组ID

 

添加用户 useradd dafengchui
切换用户 su - dafengchui

[dafengchui@www ~]$  前面是个$符号

exit 退出当前的 回到上一个

[root@www ~]#  root权限前面是个 #号

echo 输出 echo $PATH 输出环境变量

 

删除用户 userdel -r zhangsan 加-r会把家目录也删掉

ls -l /home 发现zhangsan文件夹也不见了

 

groupadd groupdel 增加用户组 和删除用户组

 

7.linux的权限管理

通过ls -l可以查看某个目录下的文件或目录的权限 ll /etc

drwxrwxr-x  第一个d是目录的意思 

-rw-r--r--   第一个-是文件的意思

lrwxr-xr-x     第一个l是快捷方式的意思

除了第一个字母后 3个字母为一组 三组

d rwx r-x r-x

第一组 代表文件所有者 user u

第二组 代表文件的所属组 group g

第三组 其他用户的权限 other o

rwx 分别代表 r读取权(也可用数字4表示) w写入权(也可用数字2表示) x执行权(也可用数字1表示) 如果是-代表对应位置无操作权限

 

修改 目录/文件 权限的命令:chmod

示例:修改/test 下的aaa.txt的权限为属主有全部权限,属主所在的组有读写权限,其他用户只有读取的权限。

chmod u=rwx,g=rw,o=r aaa.txt 

还可以 chmod u+w,g+x,o-r aaa.txt 加减号增加减少权限
chmod a+rwx aaa.txt  a就是all 所有的都增加 或都减少

也可用对应的数字 chmod 764 aaa.txt

4 2 1 这三个数字相加不会出现重复的数字,所以7代表读写执行,6代表读写,4代表只读,2代表只写,1代表只能执行,3代表写入和执行...

chmod这个命令只有root 或者文件所有者 才可以执行

 

chown 修改文件所有者 只有root可以使用

chown david aaa.txt

 

chgrp 修改文件所属组 只有root可以使用

chgrp david aaa.txt

 

chown root:root aaa.txt 同时修改 所有者和所属组

 

8.VI编辑器

vi /home/test.txt    vim /etc/passwd

有打开 没有就创建

按 i 可以进入编辑模式

保存退出 按一下esc 然后输入:wq  只退出:q 

强制退出 后面加个!

:set number 显示行号

全局替换 1,$s/aaa/bbb/g   从第一行开始到文件结尾,把所有aaa换成bbb 

大写的ZZ 可以快速保存并退出

 

命令模式下:

删除一整行 dd 其实就是剪切

撤销功能 u 

复制 yy 粘贴pp

多行复制  输入数字要复制的行数 然后再输入yy 比如 5 yy  

多行删除也是一样 先输入数字 然后再按dd 比如 9 dd

快速移动到行末尾并进入编辑模式 shift+a

快速移动到文件末尾 shift+g

快速移动到文件开头 gg

 

9.远程连接工具的使用

1.mac下连接 linux操作系统 打开终端工具 如果不是root登陆 就输入 sudo -i 切换为root用户

  ssh root@10.211.55.5 然后输入yes 输入linux系统中的密码就连上了

2.mac下传文件 cyberduck 小黄鸭

  打开小黄鸭,点击新建连接,选择sftp ssh文件传输协议,输入url 用户名 密码即可。

windows flashfxp ftp工具即可

 

中文乱码

https://www.cnblogs.com/sisimi/p/7693226.html

 

10.sudo权限管理

首先切换到daivd账号,使用 useradd 添加账号 提示权限不够。 可以使用sudo命令让 david 可以使用useradd这个命令! sudo useradd david 输入密码

 

11.系统命令管理

centOS 6

chkconfig --list iptables 可以查看指定服务启动状态

service (network,chkconfig) (start,stop,status) 可以看状态 启动 关闭 

chkconfig iptables on/off 可以设置是否开机启动 

 

CentOS 7 中systemctl 是主要管理服务的工具,他融合了centOS6中的 chkconfig和service。

启动防火墙:systemctl start firewalld

关闭防火墙:systemctl stop firewalld

查看防火墙状态:systemctl status firewalld

开机启用防火墙:systemctl disable firewalld

开机禁用防火墙:systemctl enable firewalld

性能查看器 : top 内存 cpu查看器

netstat 查看端口信息

route 查看路由信息

 

12.linux软件管理

源码包-> 源代码 需要自己编译

二进制包->编译过的包,如:RPM包。自动管理依赖性,方便管理,安装,更新,卸载等。

RPM管理方式 : 红冒软件管理工具的缩写。

  查询:rpm -qa | grep java 前面查看所有rpm安装包,后面是过滤出java包含java的 

  查询个数:rpm -qa | wc -l 

  安装:rpm -ivh 包名.rpm  -i代表安装 vh显示安装进度

  卸载:rpm -e 包名 -e 代表卸载 如果加--nodeps 不卸载依赖包

YUM管理方式: 在线安装模式,在线查询  推荐用这个!

  查询:yum list jdk (从仓库查询) 已安装的后面会有@开头, 卸载后@就没了 ,base 就是仓库里有,updates 表示已安装的有更新。

  安装:yum install 软件名 -y  加-y不在询问 直接安装

  卸载:yum remove 软件名 -y 加-y 不在询问 直接卸载

 

13.shell

  shell是shell脚本命令解释器,把我们写的命令翻译成计算器二进制语言。

  shell是一门编程语言,解释型脚本语言。

1.自定义shell变量

  name=123  定义变量 没有类型 fname=\'hello world\' 如果值有空格 需要加引号

  name="$name"456 变量叠加 123456   name=${name}789  123456789

  echo $name  输出变量

  set | grep name 可以查看已经定义的变量

  unset name 删除变量

2.环境变量 (我们可以在任何地方使用 ls pwd等命令 是因为已经配置了系统环境变量 echo $PATH)

  export 变量名=变量值 定义环境变量 (使用bash切换shell环境时,系统变量都可见,自定义变量则不可见)

  env 查询环境变量

  unset 卸载变量

3.位置参数变量

  $n 参数  n为数字,$0代表命令本身,$1-$9代表第1到第9个参数,10以上的数字需要用大括号包含,${10}。

 

  $* 这个变量代表命令行中所有的参数,$*把所有的参数看成一个整体

  $@ 这个变量也代表命令行中所有的参数,不过$@会把每个参数区分开,用来遍历

  $# 代表几个参数

新建一个shell脚本, vim canshu.sh

    #!/bin/bash #开头

    echo $0

    echo $1 #保存退出

    echo $#

    echo $*

    echo $@

    更改一下权限 chmod 755

      执行shell命令:

      1.绝对路径 /home/david/canshu.sh 1 2 3 4 输出第一二个参数,

      2.相对路径 ./canshu.sh 1 2 

      3.bash命令 bash canshu.sh  1 2 无视目录执行 

 

查看我们当前使用的shell命令,

  1.vim /etc/passwd 查看当前账号最后面的路径

  2.echo $SHELL

4.预定义变量

  $? 最后一次执行的命令返回状态。如果值为0,则上一个命令正确执行,如果非0那么上一个命令执行不成功。

  $$ 当前进程的PID

  $! 上一个进程的PID

 

14.常用表达式

 逻辑连接符  

  && 与,前面不执行 后面也不执行了,前面执行了 才会执行后面的 短路 ls /sdfsdfsdf && echo hello

  || 或, 前面执行了 后面就不执行了 ,前面不执行了,后面会执行 echo hello || ls /sdf

  ; 无逻辑符号,都会执行

 运算

  $[a+b] 或者 $[$a+$b] 

  $((a*b)) 或者 $(($a*$b))

  expr $a + $b 表达式模式

 判断表达式

  字符串:==、!=、-z(如果字符串为空返回真)、-n(如果字符串不为空返回真) v1=12 v2=13

    [ $v1 == $v2 ] 什么结果都没有,这时 需要echo $? 来看看上一次执行的命令是否成功 输出1 则不成功

    [ $v1 != $v2 ]  执行后 输出echo $? 返回0 执行成功

    [ -z $v1 ] 如果为空返回真 echo $? 返回1 执行失败

    [ -n $v1 ] 如果不为空返回镇 echo $? 返回0 执行成功

  数字:eq(是否相等)、ne(不等)、lt(小于)、gt(大于)、le(小与等于)、gt(大于等于)

    [ $v1 -eq $v2 ]  echo $? 返回1

    [ $v2 -ne $v2 ] echo $? 返回0

  文件:-e(是否存在)、-f(是否存在且是文件非目录)、-d(是否存在且是目录非文件)、-w(是否存在且有写权限)、-r(是否存在且有读权限)、-x(执行权限)

    [ -e canshu.sh ]  echo $? 返回0 存在

  时间命令:

    date 输出当前时间

    date -s "yyyy-MM-dd hh:mm:ss" 设置时间

  计划任务:

    临时执行:at 时间 --指定时间执行特定命令

    周期执行:crontab

      首先查看是否开启此服务 service crond status

      用法:crontab [-u 用户] [-l|-r|-e]

      -u: 指定某个用户

      -e:制定计划任务

      -l:列出计划任务

      -r:删除计划任务,该选项是删除所有的计划任务,如果想删除某一条 需要使用-e

 

*/1 * * * * echo hello >> /home/david/file.log

分 时 日 月 周 命令  

可以使用(n-m)来表示一段范围,使用(n,m)表示某两个时间,使用(*)表示所有的时间,使用(/) 表示间隔时间。

10 21 * * *  每天的21点10分执行命令

0 5 * * 1 每周一的凌晨5点0分执行命令

30 4 15,16 * * 每个月15 和16号 凌晨4点半执行命令

*/5 4 * * * 每天4点 每隔5分钟执行一次

0 4 * * 1-5 每周一到周五的凌晨4点执行

0 0 1,15 * 1 每月1号和15号,每周1的0点0分都会执行 或的关系

 

15.条件判断

  if [条件]

  then

    exec command1

  elif

  then

    exec command3

  else

    exec command2

  fi

df -h | grep \'root\' | awk \'{print $5}\' | cut -d "%" -f1

df -h 获取磁盘列表, 然后过滤出root这行,然后 获取第五列 最后过滤掉%号 然后判断这个数字

vim test.sh

 

#!/bin/bash

rate=$(df -h | grep \'root\' | awk \'{print $5}\' | cut -d "%" -f1)

if [ $rate -lt 80  ]

        then

                echo "磁盘使用良好小与80%"

        else

                echo "磁盘使用不好 都快满了"

fi

chmod 755 test.sh 

bash test.sh

 

控制台输入, read -t 等待时间 10秒, -p 提示语 , 输入后 保存的变量名 age

#!/bin/bash

 

read -t 10 -p "please input your age:" age

 

if [ $age -gt 0 ]  && [ $age -lt 100 ]

then

        echo "您输入的年龄有效"

else

        echo "您输入的年龄无效"

fi

 

[root@MiWiFi-R4-srv david]# vim file.sh

 

#!/bin/bash

 

read -t 10 -p "pleas input a file name:" file

 

if [ -z $file ]

        then

                echo "输入呀?"

        elif [ ! -e $file  ]

        then

                echo "没有找到这个文件"

        elif [ -f $file ]

        then

                echo "这是一个普通文件"

        elif [ -d $file ]

        then

                echo "这是一个目录"

fi

 

case用法

  case 变量 in 

    value1)

      exec comand1

      ;;

    value2)

      exec comand2

      ;;

    *)

      exec comand3

    esac

#!/bin/bash

read -p "please input a number 1~9" number

 

case $number in

1)

        echo "执行ls命令"

        ls

        ;;

2)

        echo "执行pwd命令"

        pwd

        ;;

*)

        echo "暂只支持1 和2"

esac

 

循环-for

for [变量] in [取值范围]

  do

    exec command

  done

 

for val in $@

do

        echo $val

done

 

for ((i=1;i<j;j++))

do

  exec command

done

#!/bin/bash

sum=0

for((i=0;i<=100;i++))

do

        sum=$[ $sum+$i ]

done

 

echo $sum

 

循环—while

while [条件]

do

  exec command

done

 

 

 

以上是关于Linux基础的主要内容,如果未能解决你的问题,请参考以下文章

编程基础 linux基础入门--linux为何物?

linux具体要学点啥,基础要学啥?

linux入门基础——linux用户基础

Linux基础篇--linux基础和帮助用法

Linux基础(03)常用基础指令和操作

Linux操作基础