Linux之基础操作

linux操作系统

操作系统是电脑的关键,管理电脑软硬件资源,直接运行在裸机上的,其他软件都必须在操作系统上运行

  • 操作系统分类

    • 桌面操作系统:windows、linux(ubuntu、centos、rehat、debian)、mac os 、中标麒麟
    • 移动端:android、symbian、ios、winphone、blackberry
    • 服务器端:windows nt、os server 、rehat、centos、geetoo(贱兔)、ubuntu
    • 类unix 把由unix衍生出来的系统称之为类unix系统。
  • 内核 操作系统最基础的部分,其他应用都要通过内核对计算机硬件进行安全访问。

  • GUI : graphic User interface 图形用户接口

    • GNOME(ubuntu 默认)
    • KDE
  • 32位和64位,寻址方式不同,64位效率更高

  • linux操作系统历史

  • linux有两大发行版阵营

    rehat:  rehat、centos(免费)
    debian:  ubuntu deepin
    

linux系统优点:

  • 免费、开源

  • 速度快,资源少

  • 稳定、安全,不宕机

  • 多用户、多任务

  • 支持多种平台

  • 虚拟化和虚拟机

    • 虚拟化: 也就是将一台物理机划分成n逻辑的计算机,最大限度的榨干计算机的性能
      • docker openstack kvm
    • 虚拟机 实现虚拟化的一种技术
      • windows: vmware workstation virtual box
      • mac :parallels desktop

二、系统安装

  • 国内镜像(https://mirrors.aliyun.com/)

  • ubuntu16.04.3-desktop-amd64 + vmware workstation12.5

  • 关机、重启命令

    关机:
      shutdown -h 18:00  #系统在18:00定时关机
      shutdown -h +10    #系统10分钟后关机
      shutdown -h now  立即关机
      halt             立即关机 等于shutdown -h now
      poweroff         关机
      
    重启:
       reboot
    
  • 快照 拍摄快照,保存虚拟机状态,以后虚拟机出错后,可以恢复到快照状态

  • linux版本查看

    python@ubuntu:/myproject/blog$ uname  -r
    4.13.0-38-generic  #内核发行号
    
    python@ubuntu:/myproject/blog$ uname -v   //显示内核版本号
    #43~16.04.1-Ubuntu SMP Wed Mar 14 17:48:43 UTC 2018
    
    #显示所有信息
    python@ubuntu:/myproject/blog$ uname -a
    Linux ubuntu 4.13.0-37-generic #42~16.04.1-Ubuntu SMP Wed Mar 7 16:03:28 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux
    
  • 安装完毕后需要更新软件。

    • 桌面右上角,设置(齿轮)—— 系统设置—— system—software update。download from 后的下拉框中选择”中国的服务器“ — 阿里云镜像:http://mirrors.aliyun.com/ubuntu
    • 设置显示器,同样在系统设置中 hardware----display 选择所需分辨率
    • 语言设置 系统设置——language中,添加汉语,然后再上面的列表框中将其拖动到最前面,下次重启就可以看到中文界面了。重启的时候会提示你目录是否改成汉语的,请选择no
  • 显示终端

    • 在图形界面里显示终端,请按ctl + alt + t 显示终端或者桌面右键–终端
    • 不带图形界面的终端(全shell),请安ctl + alt + f1~f6,可以开启不同的终端窗口,最多6个,按ctl + alt + f7退回到图形界面
  • 开启工作区

    系统设置—外观—行为:点选开启工作区。

  • root用户和sudo

    系统默认的root用户是停用的,所有和系统相关指令均需使用sudo(super user do)命令执行,需要输入密码

三、常用工具

  1. ssh

    是secure shell的简写

    • 传输是加密,可以有效防止数据再传输过程中被截取

    • 传输的数据是压缩的,所以速度超快

    • 开启器ssh服务,ubuntu默认没有安装ssh服务,首先需要安装ssh服务器

      #1. 安装ssh-server
      sudo apt-get install openssh-server
      #2. 检查ssh服务开启状态
      python@ubuntu:~$ ps -aux | grep ssh
      root       3747  0.0  0.5  65512  5636 ?        Ss   20:54   0:00 /usr/sbin/sshd -D #是这个
      python     4119  0.0  0.1  21312  1044 pts/4    S+   21:16   0:00 grep --color=auto ssh
      
      #3.启动ssh服务
      sudo service ssh start  
      #或者
      sudo  /etc/init.d/ssh start
      
      #4.测试
      ssh -p 端口  用户名@主机地址  #ssh默认端口是22
      
  2. 远程连接工具

    • xshell
    • putty
    • scrt
  3. 常见快捷键

    快捷键说明
    ctrl + c终止正在正在执行的命令
    ctrl + a回到命名开始
    ctrl + e回到命名结尾
    ctrl + u清空命令行
    ctrl + l 或者clear清屏
    tab命令、文件名、目录名自动补齐
  4. 常见命令错误

    • 命令敲错了
    • 多个空格
    • 这个命令还没有安装 command not found
  5. 命令的提示符

    root@ubuntu16 ~# 
    root 用户名
    ubuntu16 主机名
    ~ 用户的家目录  root用户的家目录是/root;一般用户的家目录是 /home/用户名
    /  系统根目录
    # 超级管理员在工作
    $ 普通用户在工作
    
  6. 软件安装

    • apt 安装

      查看软件包信息 		  sudo apt-cache showsrc 包名
      获得源码       		     sudo apt-get source 包名
      安装软件     		     sudo apt-get install 包名
      删除软件                  sudo apt-get remove 包名
      获取新的软件包列表         sudo apt-get update
      升级有可用更新的软件包     sudo apt-get upgrade
      

      #安装常见的库
      sudo apt-get update
      sudo apt-get install man gcc make sudo lsof ssh openssl tree vim dnsutils iputils-ping net-tools psmisc sysstat curl telnet traceroute wget libbz2-dev libpcre3 libpcre3-dev libreadline-dev libsqlite3-dev libssl-dev zlib1g-dev git mysql-server mysql-client zip p7zip

linux常用命令

一、linux文件系统结构

sudo apt-get install tree
tree --help  #查看帮助
tree -L 1  #显示文件目录
root@ubuntu16 /# tree -L 1
.           #系统根目录
├── bin     #存放常见的命令
├── boot    #系统启动文件和核心文件都在这个目录
├── cdrom   #光驱
├── dev     #存放设备文件,包括硬盘、光驱、键盘、鼠标等
├── etc     #系统配置文件都在这个目录下
├── home    #普通用户的家目录
├── lib     #系统链接库
├── lib64   #64位的链接库
├── lost+found   #系统自动生成的,如果文件系统出错,会在目录下产生文件,记录错误
├── media        #系统自动挂载的光驱、usb等
├── mnt          #mount简写 挂载其他文件系统
├── opt          #可在此安装第三方软件 
├── proc         #系统进程的信息、系统状态信息
├── root         #超管的目录
├── run          #进程运行数据
├── sbin         #管理员的命令,普通用户无法使用
├── srv          #服务信息
├── sys          #系统相关
├── tmp          #临时目录,所有用户都具有读写权限
├── usr          #unix software resource  用户的软件安装到这个目录
|    ├── bin     #应用程序的可执行文件
|    ├── sbin    #用户或超管的标准命令
|    ├── local   #管理员安装的应用程序目录
|    └── share   #共享文件目录
└── var          #存放不断扩充的文件。比如数据库文件、日志文件
  ├── log     #日志目录,各种应用的日志
  └── run     # /run的软连接

二、常见命令

  1. ls

    列出目录下的文件或子目录

    ls [参数]    #中括号表示可选
    ls  -l    #以列表方式显示文件的详细信息
    ls  -a    #显示隐藏文件,隐藏文件的文件名以.开头
    ls  -A    #显示除.和..以外的任何文件 
    ls  -i    #查看文件的节点号
    ls  -d *  #只显示目录
    ls  --color #以不同颜色显示文件、目录、可执行文件
    source ~/.bashrc
    ls --help  #查找帮助
    

    ls --help #查看命令参数

    ~~~shell
    drwxr-xr-x  2 python python     4096 3月  28 11:20 Templates
    drwxr-xr-x  2 python python     4096 3月  28 11:20 Videos
    

    第一部分:表示文件类型 d代表目录,-代表普通文件,l代表软连接
    第2部分,2-10列代表文件的权限:rwxr-xr-x.
    第3部分:数字代表文件的链接数
    第四部分:root代表文件的所有者
    第5部分:root表示文件属于哪个用户组
    第6部分:数字的表示文件大小,以字节为单位
    第7部分:时间,表示文件的修改时间
    第8部分:文件名

#文件权限
drwxr-xr-x. 2 root root 4096 Nov 20 07:36 tmp
r:read 可读
w:write 可写
x:excute 可执行
-:表示无权限

权限:
2-4位 ower 文件的所有者
5-7位 group:用户组
8-10位 other:其他用户


2. ll

以列表方式显示,其实是ls -l的别名,这个配置在~/.bashrc中
白色代表普通文件
绿色代表可执行文件
蓝色代表目录


3. man命令

~~~shell 
#命令的帮助文档
sudo apt-get  install man
#用法:
   man  命令名
常用的快捷键
空格 f     下翻页
b          上翻页
shift + g   到文件末尾
g         文件开头
q         退出
上下箭头   前翻和后翻
回车键     后翻
home      回到开始
  1. history命令

    查看你敲过的命令

  2. 硬链接和软连接

    文件都有文件名与数据,这在 Linux 上被分成两个部分:用户数据 (user data) 与元数据 (metadata)。用户数据,即文件数据块 (data block),数据块是记录文件真实内容的地方;而元数据则是文件的附加属性,如文件大小、创建时间、所有者等信息。在 Linux 中,元数据中的 inode 号(inode 是文件元数据的一部分但其并不包含文件名,inode 号即索引节点号)才是文件的唯一标识而非文件名。文件名仅是为了方便人们的记忆和使用,系统或程序通过 inode 号寻找正确的文件数据块。

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qa8Qt7Qv-1575268971839)(C:\hz1802\30\hardlink.jpg)]

    为解决文件的共享使用,Linux 系统引入了两种链接:硬链接 (hard link) 与软链接(又称符号链接,即 soft link 或 symbolic link)。链接为 Linux 系统解决了文件的共享使用,还带来了隐藏文件路径、增加权限安全及节省存储等好处。

    • 一个 inode 号对应多个文件名,则称这些文件名为硬链接
    • 一个文件多个名字 为硬链接
    link 源文件名 新文件名 
    ln 源文件名 新文件名 
    
    stat 文件名 #查看文件信息
    ls -i  #查看目录下文件的硬链接数
    python@ubuntu:/csl$ ls -la
    total 4
    913923 lrwxrwxrwx. 1 root root    5 Mar 18 16:20 2.txt -> 1.txt
    913926 -rw-r--r--. 2 root root    0 Mar 18 19:58 31.txt
    913926 -rw-r--r--. 2 root root    0 Mar 18 19:58 32.txt
    913925 -rwxr-xr-x. 1 root root    0 Mar 18 17:29 5.txt
    913924 drwxr-xr-x. 2 root root 4096 Mar 18 17:29 test
    
    # 硬链接的特点:
       1.只能对已存在的文件进行创建;
       2.不能对交叉文件系统进行硬链接的创建;
       3.不能对目录进行创建,只可对文件创建;
       4.删除一个硬链接文件并不影响其他有相同inode 号的文件。
    
    • 软连接

软链接与硬链接不同,若文件用户数据块中存放的内容是另一文件的路径名,则该文件就是软连接。软链接就是一个普通文件,只是数据块内容有点特殊。软链接类似快捷方式

ln -s 源文件 目标文件。
   
软连接的特点:
   软链接有自己的文件属性及权限等;
   可对不存在的文件或目录创建软链接;
   软链接可交叉文件系统;
   软链接可对文件或目录创建;
   创建软链接时,链接计数 i_nlink 不会增加;
   删除软链接并不影响被指向的文件,但若被指向的原文件被删除,则相关软连接被称为死链接

三、目录管理

  1. 绝对路径和相对路径

    linux的目录和windows不同,不区分盘符,只有一个根目录,根目录用/表示。

    • 绝对路径:从根目录到当前文件(目录)的路径,比如:/home/python
    • 相对路径:以当前目录为基准,表示上级目录或子目录
      • 用 . 表示当前目录
      • 用…表示上级目录
    • linux目录分隔符只能用正斜线(/)表示
    • 用 ~ 表示用户主目录,用 - 表示来源目录(你从哪个目录切换到当前目录的)
  2. 目录切换

    cd 目录名  #切换目录
     .  #当前目录
     ..  #代表上级目录
     /   #代表根目录
     ~   #用户家目录(宿主目录)  root用户的家目录/root   普通用户的家目录/home/用户名
     cd /etc/yum.repos.d
     cd / #切换到根目录
     cd -  #切换到来源目录
     cd ~ #返回用户的家目录
     cd   #返回用户的家目录
     
     pwd #显示当前目录的绝对路径名
    
  3. 提示信息

    [root@localhost ~]# cd /
    [root@localhost /]$
    root代表用户名
    localhost 主机名
    ~ 用户的家目录
    /  用户当前所处的目录(/ 根目录)
    # 表示超级管理员在操作
    $ 普通用户在操作
    
  4. 创建目录

    sudo mkdir  目录名
    sudo mkdir -p  目录名    #递归创建目录
    sudo mkdir -p  h1802/1/2
    
    python@ubuntu:~/tmp/2$ sudo mkdir -p 3/{4,5}/{6,7,8}
    python@ubuntu:~/tmp/2$ tree -L 3
    .
    └── 3
        ├── 4
        │   ├── 6
        │   ├── 7
        │   └── 8
        └── 5
            ├── 6
            ├── 7
            └── 8
    
    
  5. 删除目录 rmdir

    sudo rmdir [option]  目录名    #删除的时候目录必须为空
    sudo rmdir -p  目录名   #递归删除空目录
    sudo rmdir -p 1/2/3 #1,2,3目录都必须不能有文件
    

四、文件操作

  1. 文件创建

    sudo vim 也可以创建文件
    sudo touch  文件名 [文件名2] [文件名3]....   #创建多个空文件,如果文件存在,自动忽略,不会覆盖
    echo 'hello world'  > 1.txt   #可以将显示内容输出到文件,但会覆盖原来的内容,文件不存在则创建
    echo '世界,你好'    >> 1.txt  #将显示内容追加到文件末尾,文件不存在则创建
    #输出重定向符号: > 覆盖  >> 追加 
    
  2. 文件移动

    sudo mv 源文件   目标文件   #销毁原件
    sudo mv  1.txt  ./lpl/  #将1.txt移动到字目录lpl下,文件名不变
    sudo mv  1.txt  2.txt   #如果在同一个目录就是文件重命名  将1.txt重命名为2.txt
    
  3. 文件拷贝

    sudo cp 源文件   目标文件
    sudo cp -r  源目录   目标目录   #递归拷贝目录
    sudo cp -r 4/8  5/7/
    root@ubuntu:/home/python/tmp/2/3# tree -L 4
    .
    ├── 4
    │   ├── 1.txt
    │   ├── 42.js
    │   ├── 8
    │   │   ├── 2.php
    │   │   ├── 3.py
    │   │   └── 5.hello
    │   └── 9.php
    └── 5
        ├── 6
        │   ├── 2.php
        │   ├── 3.py
        │   └── 5.hello
        ├── 7
        │   └── 8
        │       ├── 2.php
        │       ├── 3.py
        │       └── 5.hello
        └── 8
    
  4. 文件删除

    sudo rm  文件名  
    sudo rm -i 文件名  #删除前逐一确认
    sudo rm  -f  文件名   #删除文件不带提示
    sudo rm -rf  目录名   #递归删除目录,不管目录是否为空
    
  5. 文件查看

    cat  文件名       #输出文件内容,从前往后输出,
    tac   文件名      #cat的反写,从后往前输出
    
    head -n N  文件名   #显示文件的前几行,可以指定查看的行数,默认显示10行
    head -N  文件名
    
    tail -n N 文件名   #显示文件的最后几行,可以指定查看的行数(N)
    tail -N  文件名    #
    tail -f  cat 文件名   #实时显示文件内容
    
    watch -d -n 秒数 cat 文件名  #实时显示文件内容 有高亮
    
    sudo vi  文件名   
    more  文件名       #从前往后查看,可以翻屏 ,不能往前翻  回车一行行查看,空格翻屏(f翻屏)  q退出
    less  文件名       #和more类似,可以前翻页,g首页 G尾页,b前翻页,空格和f后翻页,q退出
    stat  文件名       #查看文件详细信息   
    #文件的三个时间:
    atime: accesstime 访问时间
    mtime:modifytime 修改时间
    ctime: changetime 修改状态时间(修改文件元数据)
    
  6. 文件查找

    • find
    # find 用于在系统内搜索指定文件
    用法:
       find [路径] [参数] [文件名]
         -name  按文件名查找
         -iname 按文件名查找,不区分大小写
         -mtime +/-n  #-n表示n天以内修改的文件,+n表示修改超过n天的文件
         -user   #按文件属主查找
         -size [+/-]n[c/k/M/G] #查找文件长度为n块,+表示大于,-表示小于;c是字节 
         -perm 权限数值    #按照文件权限进行查找
         -maxdepth N     #查找的目录深度
         -ls             #以列表形式显示
         -exec 执行shell命令,形式: -exec command {} \;
         
    find /  -name  "文件名"  		 #从根目录查找指定文件名的文件,如果不指定目录,则从当前目录查找
    find .  -name  "文件名"         #从当前目录查找指定文件名的文件
    find    -name  "文件名"         #从当前目录查找指定文件名的文件
    
    find /csl/sh1702 -name "2.txt"  #查找指定目录先的文件
    find /tools -mtime -3           #查找tools目录下修改时间是3天以内的文件
    find /tools -mtime +3           #查找tools目录下修改时间是3天以上的文件
    find -mtime -3 -maxdepth 1  -ls
    
    find /tools  -size 12c 		   #查找长度为12字节的文件
    find /var  ‐size +10k ‐size ‐100k ‐name '*.log' #在/var目录下,查找10-100k
    find -size +10k -maxdepth 1  -ls
    
    #按文件的所属用户查找
    find  -maxdepth 1 -user root
    
    #删除当前目录及其子目录下的所有后缀为txt的文件,注意{}和\中间有空格,最后有一个;
    find . -name '*.txt' -exec rm {} \; 
    
    #只查找当前目录下,权限是700的文件,并以列表形式显示
    find -perm 700 -maxdepth 1 -ls
    sudo find -maxdepth 2   -name '1.txt' -ls
    
    
    • grep
    #grep 是global search regular expression(RE) and print out the line的缩写,意思是全面搜索正则表达式并把行打印出来。是一种强大的文本搜索工具,它能使用正则表达式搜索文本内容,并把匹配的行打印出来。
    用法:
       grep [options] 'pattern' filename
         -i  不区分大小写
         -c  只显示匹配行的数量
         -r  递归查找子目录
         -l  列出文件内容符合指定的范本样式的文件名称。
         -n  显示行号
         -w  只匹配单词,不是匹配单词一部分
         -E 按正则表达式搜索
         --color  以不同颜色显示匹配的关键字
         --include '*.py'  #仅搜索py文件
         --exclude '*.py'  #不搜索py文件
       # 在1.txt搜索this,要按照完整单词的模式进行匹配,并且显示匹配行
       grep -n -w 'this' 1.txt
       
       #在当前目录下所有文件中搜索this,并不同颜色显示关键字
       sudo grep  'this' * --color
       
       显示匹配行数
       sudo grep -c 'this' 1.txt
       搜索指定的1.txt,递归查找子目录
      grep -r -w -l   'this' --include '1.txt'
      
      # 显示当前目录下所有的文件,不显示目录
      ls -la | grep -E '^-'
      
      | 管道符,他可以将前一个命令的输出作为后一个命令的输入
    
  7. which和whereis

    • which 命令名 #查找命令
    • whereis 文件名 #只能搜索命令、源文件、二进制文件
  8. 文件内容统计(wc)

    用法:
       wc [options] [文件列表]
          -l  统计有多少行
          -w  统计有多少单词
     $ wc -l  /etc/passwd |wc -l   #统计passwd有多少用户
    

  9. awk

    awk就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行各种分析处理。

    语法:awk '{pattern + action}' {filenames}
    cat /etc/passwd |awk  -F ':'  '{print $1}'   #$1显示第一列  -F 指定分割符为':'
    #列数从左向右: 1,2,3... 
    

  10. uniq

报告或删除文件中重复的行。uniq只比较相邻行,所以它一般会和sort命令进行组合使用。

用法:uniq [选项]... [文件] 
 -c           //在每行前加上表示相应行目出现次数的前缀编号  
 -d           //只输出重复的行  
 -D           //只输出重复的行,不过有几行输出几行 
 -i           //忽略大小写
history 历史记录的前10名排序
history |awk '{print $2}' | sort |uniq -c| sort -n -r -k 1 | head -10

  1. sort

sort将文件/文本的每一行作为一个单位,相互比较,比较原则是从首字符向后,依次按ASCII码值进行比较,最后将他们按升序输出。

sort(选项)(参数)
选项:
   -u忽略相同行
   -k 按指定列排序
   -n 按数值排序
   -t 分割符
   -r 逆序
 #指定passwd文件按第三列 的数值比较,列之间的分隔符为:
 cat /etc/passwd | sort -n -t ':' -k 3  
 
 #查找你最常用的10条命令
 history | awk '{print $2}' | sort | uniq -c | sort -r -n -k 1 | head -n 10

五. 文件权限

1.文件权限修改

-rwxr-xr-x.  1 root root   24 Nov 21 20:26 1.sh
-rw-r--r-x.  1 root root    0 Nov 20 07:37 1.txt
-rw-r--r--.  1 root root    0 Nov 20 07:37 2.txt

#1.数字表示
r  4 100   读
w  2 010   写
x  1 001   执行
-  0       没有权限
rwx   7 可读可写可执行
rwxrw-r-- 764  文件拥有者可读可写可执行  文件所属的组可读可写  其他人可读

#2.符号表示
u  表示文件的拥有者 
g  文件所属的组
o  其他人
a  所有的人  all

u+/-/=  u=rwx  g+x  o-r
+ 表示增加权限
-  削减权限
=  赋权限
chmod o-x 32.txt   #削减其他用户的可执行权限
chmod a=rwx 32.txt  #给所有人赋可读可写可执行权限
chmod o+x,g+w 32.txt
chmod o=x 32.txt
  • chmod

    ~~~
    

    用法:
    chmod 权限 文件名/目录
    chmod -R 权限 目录 递归修改目录及其子目录的所有文件的权限

    #数字表示
    chmod 641  1.sh  
    
    #符号表示
    chmod a=rwx 1.sh
    chmod g-w 1.sh
    chmod -R  o+w tmp   #递归修改tmp及其子目录中所有文件的权限
    ~~~
    
  1. chown(change owner) 修改文件的所有者

    要求:所有者必须在/etc/passwd文件中
    
         chown 用户名  文件名/目录名 
         chown 用户名:组名  文件名/目录名
         chown :组名  文件名/目录名  
         chown -R 用户名  文件名/目录名
         
         chown csl 1.sh
         chown csl:csl 1.sh  #修改用户和所属组
    
  2. 修改用户组 chgrp(change group )

     组名必须存在
     chgrp 组名  文件名/目录名
     chgrp -R 组名  文件名/目录名
     chgrp -R csl tmp  #递归修改tmp及其子目录下文件所属组  
     /ect/group 所有的组
    
  3. lsattr/chattr 修改和查看文件只读属性

    lsattr  文件名   查看文件的只读属性,使用ls无法查看
    chattr +/-i 文件名  给文件增加或去除只读属性
    chattr +/-a 文件名  只能追加数据,不能修改或删除
    
    lsattr 3.py  #3.py有只读属性
    ----i--------e- 3.py
    
    sudo chattr -i 3.py  #去掉只读属性
    sudo chattr +i 3.py  #添加只读属性
    

六. 用户管理

  1. 用户和组

    • 一个用户必须有一个主组
    • 一个用户可以有多个组
    • 一个组可以有多个用户
    • 用户账户的信息存放在/etc/passwd文件中;用户的密码存放到/etc/shadow,该文件只有root可以修改;组账户信息存放到/etc/group中
  2. useradd 添加一个用户

    用法:
       useradd [-gud] 用户名  
         -g 指定主组名或组id,必须已经存在的组
         -u 指定用户的id
         -m 自动建立用户主目录
         -d 指定用户的家目录
         -s 指定用户登录后使用shell,默认是/bin/bash
       #创建一个用户没有指定组,则默认创建一个和用户名一样的组,作为用户的主组
    
    所有的用户都在/etc/passwd文件中
    luoming:x:501:501::/home/luoming:/bin/bash
    用户名  密码 用户id  用户所属组的id  用户的家目录   shell
                  uid     gid
    #Ubuntu 特别提供了一个adduser 命令以交互模式创建用户,
    sudo adduser csl
    创建一个用户没有指定组 ,则默认创建一个和用户名一样的组,作为用户的主组
    sudo useradd -u 1202 -g cc -md /text2 -s /use/sbin/nologin test2 nologin 不允许登录  login 允许登录
    

  1. 删除用户 userdel
userdel -r 用户名  删除用户同时删除家目录(家目录要和用户名一致才能删除)
#如果用户登录了无法删除,应该先切换用户,然后kill -9 用户进程号,然后在删除
  1. 修改用户信息 usermod

     usermod [option]  用户名
         -u  用户id
         -g  主组id
         -G  附属组名称
         -a  将用户添加到附属组,必须与-G配合使用
         -d  用户的家目录
         -l  用户登录名
       sudo usermod -u 1001 -g 999 -l lkz  liwenkai
       sudo usermod -a -G csl python  #将用户python添加到附属组csl中
       sudo usermod -l newusername  oldusername #修改用户名
    
  2. 修改用户密码

    用法:
    passwd [-lu] 用户名
    -l 锁定账户密码
    -u 解锁账户密码
    root 可以修改其他用户的密码
    普通用户只能修改自己的密码

  3. su和sudo

​ Ubuntu默认禁止使用root账户,在系统安装的时候,创建的第一个用户作为管理员(属于sudo组),其权限要低于root,但比普通用户高,普通用户只能处理自己创建的东西,管理员可以安装软件、修改日期、删除用户等。在Ubuntu中一般看到提示符是$,当执行需要root权限操作的时候需要提升权限,我们可以使用sudo暂时提升用户权限

我们也可以使用su切换用户身份,可以切换到root或管理员,完成工作后再切换回来

用法:
   sudo  命令  #需要输入用户自己的密码
   
用法:   
   su    用户名  #需要输入目标用户的密码
root切换到普通用户不用输入密码
普通用户切换,必须输入密码
因为Ubuntu默认不提供root密码,不能直接由su切换到root,可以先使用sudo来获取root权限
$ sudo su root  #临时切换到root

#启用root账户
$ sudo password root #根据提示为root输入密码

#设置sudo提升权限的时候不需要输入密码,需要修改/etc/sudoers文件

sudo vi /etc/sudoers
#也可以使用工具:sudo visudo编辑

# Allow members of group sudo to execute any command
#将sudo组添加NOPASSWD:
%sudo   ALL=(ALL:ALL) NOPASSWD:  ALL
#然后按esc
:wq

#如果新添加的用户不属于sudo组,是不能使用sudo提升权限的,需要将用户添加到sudo组
#以属于sudo组的用户登录
sudo usermod -a -G sudo  用户名

7.其他命令

  • id 查看用户的id和组信息
  • groups查看用户的组
  • whoami 查看当前的用户是谁

七. 组管理

 #添加一个组
 groupadd 组名
      
    1702:x:1001:
    组名 密码  gid
 groupdel  组名  #删除组
 groupmod  -n 新组名  旧组名
 groups 显示用户的组
 
 #所有的组信息都在/etc/group文件中记录
 #用户密码在/etc/shadow

linux常见服务

一. 文本编辑器

vi vim是vi增强版

vim需要安装

sudo apt-get -y install vim

vim的三种工作模式

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JM6509tQ-1575269020095)(vi.jpg)]

1 编辑模式

命令模式=>编辑模式i a o s

按键作用
i在光标当前位置插入文本
a光标的下一个位置插入文本
A当前行的行尾插入文本
S删除当前行内容,重新输入
s删除光标当前位置的字符,开始输入
o在当前的下一行开始一个新行开始输入

2 命令模式

编辑模式=>命令模式 请按esc

按键作用
H向左移动一个字符
j向下移动一行
k向上移动一行
l向右移动一个字符
(移动到块首
)移动到块尾
gg移动第一行
G移动尾行
ngg移动到第n行 n是一个数字
yy复制光标当前行
nyy复制n行
p黏贴
np 100p黏贴n次
dd删除一行
ndd删除n行
u撤销上一次的操作
shift + 6移动到本行行首
shift+ 4移动到本行行尾
ctrl + r恢复前一个被撤销的操作
.重复前一个操作

3 底行模式

命令模式=》底行模式 按 : 或者 / 或 ?

按键作用
:w保存,不退出
:q不保存,退出
:q!强制退出,不保存
:wq保存并退出
:x保存并退出
:set nu显示行号
:set nonu不显示行号
:n移动到指定的行
/字符串 (回车)搜索指定字符串 n找下一个,N找上一个
?字符串从下往上找,n往上找,N往下找
😒/要找的字符串/要替换的字符串替换光标当前行的找到的第一个字符串
😒/要找的字符串/要替换的字符串/g替换光标当前行的找到的所有字符串
:%s/要找的字符串/要替换的字符串替换每一行第一个找到字符串
:%s/要找的字符串/要替换的字符串/g全文替换
:n1,n2s/要找的字符串/要替换的字符串/gn1与n2为数字,在第n1与n2行之间查找word1 这个字符串,并将该字符串替换为word2

二. 网络管理

  1. ifconfig

    配置和显示Linux内核中网络接口的网络参数。

    #1 显示网络信息
    [root@localhost ~]# ifconfig
    ens33      Link encap:Ethernet  HWaddr 00:1C:42:14:7A:DD  
              inet addr:192.168.3.46  Bcast:192.168.3.255  Mask:255.255.255.0
              inet6 addr: fe80::21c:42ff:fe14:7add/64 Scope:Link
              UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
              RX packets:351142 errors:0 dropped:0 overruns:0 frame:0
              TX packets:748 errors:0 dropped:0 overruns:0 carrier:0
              collisions:0 txqueuelen:1000 
              RX bytes:81649700 (77.8 MiB)  TX bytes:94340 (92.1 KiB)
    
    lo        Link encap:Local Loopback  
              inet addr:127.0.0.1  Mask:255.0.0.0
              inet6 addr: ::1/128 Scope:Host
              UP LOOPBACK RUNNING  MTU:65536  Metric:1
              RX packets:0 errors:0 dropped:0 overruns:0 frame:0
              TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
              collisions:0 txqueuelen:0 
              RX bytes:0 (0.0 b)  TX bytes:0 (0.0 b)
    重要数据说明:
        inet addr: ipv4地址    inet6: ipv6地址
        HWaddr:  mac地址     Mask: 子网掩码
        UP:代表网卡开启   RUNNING:代表网卡的网线被接上   MULTICAST:支持组播 MTU:最大传输单元 (1500字节)。
        
    #2. ifconfig ens33 查看指定网卡信息
    #3.启动关闭网卡
    ifconfig ens33 up  #启动网卡
    ifconfig ens33 down   #关闭网卡
    
    # 重启网络
    /etc/init.d/network restart
    
  2. ifup和ifdown 启动和关闭网卡

    需要配置/etc/network/interfaces,不建议使用这两个命令
    
  3. ip

    ip命令用来显示或操纵Linux主机的路由、网络设备、策略路由和隧道,是Linux下较新的功能强大的网络配置工具。

    ip [选项] [参数]
    选项: -s 显示详细信息
    
    #1.用ip命令显示网络设备的运行状态
    ip link list
    
    #2 查看网络地址
    ip a
    ip address show
    ip address show  ens33  #查看具体网卡的ip地址
    
    #3 修改接口状态
    ip link set enss33 up    #开启网卡
    ip link set ens33  down #关闭网卡
    
    #4显示路由信息
    ip route show
    
  4. ping

    ping命令用来测试主机之间网络的连通性

    用法:  ping [参数] [主机名或IP地址]
    参数:
        -c n     执行指定次数 n的ping命令
        -b       测试与网关IP的连通性
    #1.查看于百度的联通型
    [root@localhost ~]# ping -c 3 www.baidu.com
    
    #2.查看于网关的连通性
    [root@localhost ~]# ping -b www.baidu.com
    
    
  5. netstat 查看网络连接状况

    netstat  -an
      -n  显示端口
      -p  显示进程
      -t tcp
      -u udp
      -a  显示所有
    #1.sudo netstat -nt       显示所有已建立的TCP连接
    Active Internet connections (w/o servers)
    Proto Recv-Q Send-Q Local Address               Foreign Address             State     
    tcp        0      0 10.0.112.235:22             10.0.112.252:57530          ESTABLISHED 
    tcp        0     64 192.168.3.46:22             192.168.3.50:58677          ESTABLISHED 
    
    #2. sudo netstat  -nu      显示已建立的UDP连接
    #3. sudo netstat -ntpa     显示TCP端口号的使用情况
    

三. 进程管理

  1. ps

    Linux中的ps命令是Process Status的缩写。ps命令用于报告当前系统的进程状态。可以搭配kill指令随时中断、删除不必要的程序。

     用法:  ps  [选项参数]  [用户名](可选)
       参数:
        -a -e 显示所有进程
        -u  显示指定用户的进程
         x :通常与 a 这个参数一起使用,可列出较完整信息。
     #1.ps -e|more -20      显示所有进程,每屏20个
     #2.ps -u root|more -10   显示指定用户的进程信息
     #3. ps -ef|grep kworker   过滤指定信息
     #4. ps -aux 列出目前所有的正在内存当中的程序
     USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
     root         1  0.0  0.1  19232  1496 ?        Ss   00:23   0:00 /sbin/init
     root         2  0.0  0.0      0     0 ?        S    00:23   0:00 [kthreadd]
     root         3  0.0  0.0      0     0 ?        S    00:23   0:00 [migration/0]
     PID 进程号   %CPU  cpu的占用率   %MEM  内存的占用率  VSZ 占用虚拟内存的量  RSS 驻留内存的量
     TTY 进程的控制终端,?表示不是从终端进入的。   STAT 进程状态(R就绪 S可中断的休眠态 T暂停执行)
     START 进程开始时间  TIME已经执行的时间
     
     #杀死进程
     kill [参数] 进程号
     #1. kill 2 杀死指定进程号的进程
     #2. kill -9 2 强制杀死指定进程号的进程
     
     #杀死指定进程名的进程
     killall -TERM  进程名称
    
  2. top

    top命令是Linux下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况,类似于Windows的任务管理器。

    用法: top
    使用q退出
    top - 03:32:26 up  3:08,  2 users,  load average: 0.03, 0.04, 0.05
    Tasks: 100 total,   1 running,  99 sleeping,   0 stopped,   0 zombie
    Cpu(s):  0.0%us,  0.0%sy,  0.0%ni,100.0%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
    Mem:   1016160k total,   163660k used,   852500k free,     9412k buffers
    Swap:  2064380k total,        0k used,  2064380k free,    51072k cached
    
      PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND                   
        1 root      20   0 19232 1496 1224 S  0.0  0.1   0:00.95 init                     
        2 root      20   0     0    0    0 S  0.0  0.0   0:00.03 kthreadd                 
        3 root      RT   0     0    0    0 S  0.0  0.0   0:00.05 migration/0               数据说明:
    03:32:26    当前时间
    up 3:08    系统运行时间,格式为时:分
    2 user    当前登录用户数
    load average: 0.03, 0.04 0.05    系统负载,即任务队列的平均长度。三个数值分别为 1分钟、5分钟、15分钟前到现在的平均值。
    
    第二、三行为进程和CPU的信息。当有多个CPU时,这些内容可能会超过两行。内容如下:
    total 进程总数         running 正在运行的进程数       sleeping 睡眠的进程数
    stopped 停止的进程数   zombie 僵尸进程数              Cpu(s): 
    
    最后两行为内存信息。内容如下:
    Mem:
    191272k total 物理内存总量      173656k used 使用的物理内存总量    17616k free    空闲内存总量
    22052k buffers    用作内核缓存的内存量   
    Swap: 
    192772k total    交换区总量      0k used    使用的交换区总量    192772k free    空闲交换区总量
    
    进程信息区统计信息区域的下方显示了各个进程的详细信息。首先来认识一下各列的含义。
    序号  列名    含义
    a    PID     进程id
    b    PPID    父进程id
    c    RUSER   Real user name
    d    UID     进程所有者的用户id
    e    USER    进程所有者的用户名
    f    GROUP   进程所有者的组名
    g    TTY     启动进程的终端名。不是从终端启动的进程则显示为 ?
    h    PR      优先级
    i    NI      nice值。负值表示高优先级,正值表示低优先级
    j    P       最后使用的CPU,仅在多CPU环境下有意义
    k    %CPU    上次更新到现在的CPU时间占用百分比
    l    TIME    进程使用的CPU时间总计,单位秒
    m    TIME+   进程使用的CPU时间总计,单位1/100秒
    n    %MEM    进程使用的物理内存百分比
    o    VIRT    进程使用的虚拟内存总量,单位kb。VIRT=SWAP+RES
    p    SWAP    进程使用的虚拟内存中,被换出的大小,单位kb。
    q    RES     进程使用的、未被换出的物理内存大小,单位kb。RES=CODE+DATA
    r    CODE    可执行代码占用的物理内存大小,单位kb
    s    DATA    可执行代码以外的部分(数据段+栈)占用的物理内存大小,单位kb
    t    SHR     共享内存大小,单位kb
    u    nFLT    页面错误次数
    v    nDRT    最后一次写入到现在,被修改过的页面数。
    w    S       进程状态(D=不可中断的睡眠状态,R=运行,S=睡眠,T=跟踪/停止,Z=僵尸进程)
    x    COMMAND 命令名/命令行
    y    WCHAN   若该进程在睡眠,则显示睡眠中的系统函数名
    z    Flags   任务标志,参考 sched.h
    
  3. lsof

    lsof命令是一个列出当前系统打开文件的工具。

    需要安装命令
    yum -y install lsof
    
    #1、直接输入命令 lsof
    终端下输入lsof就会显示系统打开的所有文件。由于lsof会访问核心内存和各种文件,必须以root用户来执行该命令。
    

四. 登录状态

  1. uname

    uname命令用于显示系统信息

    #显示linux核心版本号
    uname -r 
    
    #显示系统所有信息
    uname -a
    
    #显示操作系统版本
    uname -v
    
  2. hostname

    显示或设置主机名称

    #显示主机名
    $ hostname
    
    #临时设置主机名
    $ sudo hostname hello
    
    #永久设置主机名
    $ vim /etc/hostname #ubuntu的主机名在/etc/hostname文件中,其他liux可能会在/etc/sysconfig/network中
    
  3. whoami

    whoami命令用于显示自身用户名称。

  4. who

    显示当前登录用户

    who [-aHbl]
       -H 显示标题
       -a 显示所有信息
       -b 显示最近登录时间
       -l 显示系统登录时间
    $ who -Hl
    名称   线路       时间           空闲  进程号 备注
    登录   tty1         2018-03-30 14:17               952 id=tty1
    
    $ who -b
     系统引导 2018-03-30 14:17
     
    $ who -a
               系统引导 2018-03-30 14:17
    登录     tty1         2018-03-30 14:17               952 id=tty1
               运行级别 5 2018-03-30 14:17
    python   + tty7         2018-03-30 14:17 02:34        1431 (:0)
    
  5. w

    用来查看登录者的信息及他们的行为

    w 命令:执行这项指令可得知目前登入系统的用户有那些人,以及他们正在执行的程序。单独执行w 命令会显示所有的用户,您也可指定用户名称,仅显示某位用户的相关信息。
    
    语法:w [-fhlsuV][用户名称]
    linux w 命令参数:
        -f  开启或关闭显示用户从何处登入系统。
        -h  不显示各栏位的标题信息列。
        -l  使用详细格式列表,此为预设值。
        -s  使用简洁格式列表,不显示用户登入时间,终端机阶段作业和程序所耗费的CPU时间。
        -u  忽略执行程序的名称,以及该程序耗费CPU时间的信息。
    
    #1. 常见用法,直接使用
    [root@localhost csl]# w
     03:44:07 up  3:20,  2 users,  load average: 0.07, 0.08, 0.06
    USER     TTY      FROM              LOGIN@   IDLE   JCPU   PCPU WHAT
    root     tty1     -                01:41    1:00m  0.13s  0.13s -bash
    root     pts/1    192.168.3.50     02:34    0.00s  0.18s  0.00s w
    
  6. last

    显示用户最近登录信息

    #显示用户最近登录信息,只显示10行
    $ last -10  
    python   tty7         :0               Fri Mar 30 14:17    gone - no logout
    reboot   system boot  4.13.0-37-generi Fri Mar 30 14:17   still running
    python   tty7         :0               Thu Mar 29 20:59 - down   (17:17)
    reboot   system boot  4.13.0-37-generi Thu Mar 29 20:49 - 14:17  (17:28)
    python   pts/18       10.0.103.229     Thu Mar 29 14:53 - 18:00  (03:07)
    python   pts/17       10.0.136.238     Thu Mar 29 09:48 - 17:05  (07:17)
    python   pts/17       10.0.136.238     Thu Mar 29 09:36 - 09:48  (00:11)
    python   tty7         :0               Thu Mar 29 09:36 - down   (08:24)
    reboot   system boot  4.13.0-37-generi Thu Mar 29 09:36 - 18:00  (08:24)
    python   pts/18       10.0.136.238     Thu Mar 29 09:17 - 09:35  (00:17)
    

五. linux的启动

1 开机BIOS加载

2 读取MBR引导记录

3 加载linux内核

4 加载init进程,实现系统初始化,init进程是其他所有进程的父进程

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cH71QOJq-1575269020098)(runlevel.png)]

5 执行/etc/init/rc-sysinit.conf,设置启动级别

6 启动内核

7 执行不同运行级别脚本程序,视级别的不同执行rc0~rc6下的脚本来完成相应的初始化和启动工作

8 执行/etc/init.d/rc.local ,可以把要自动加载的程序写到这个脚本里

9 用户登录

显示当前运行模式的命令:
runlevel
who -r

##六. 计划任务

在指定的时间做指定的事情,周期性的事情。需要用户有相应的权限,否则无法操作

vim /etc/crontab 打开定时任务

crontab -l 查看定时任务 /etc/crontab 里边的除外

crontab -e 编辑定时任务

分 小时 日 月 周 操作 解释

0-59 0-23 1-31 1-12 0-6

0 0 * * * mysqldum 每天0时备份数据库

0 2 * * 0 sync 每个星期天2点中做文件同步

0 0 15 * * /usr/local/jsgz.py 每个月的15号0时计算工资

0 */1 * * * sh 每个1个小时执行脚本

0 8,12,18 * * * daka.py 每天的8点、12点、18点打卡

0 8-22 * * * study.py 每天8-22在教室学习

crontab -r 清空所有定时任务 只能清除crontab -e产生的定时任务

清除指定定时任务 crontab -e 删除指定行

service cron start/restart/stop #启动、重启、停止定时任务

  • 实时查看日志
tail -f  文件名
watch -d -n 秒数  cat /8.txt #带高亮

七. 软件安装

7.1 压缩与解压

windows常见的压缩包:rar zip 7zip iso

linux常见的压缩包: zip gz bz2 tar

  1. gz压缩和解压

    如果没有gzip,用apt安装
    
    # apt-get  install gzip
    
    gzip 文件名1  文件名2 #多文件压缩,自动生成对应压缩包  文件名.gz  不能压缩目录  删除原件
    gzip -d 压缩包1  压缩包2   #支持批量解压,删除原件
    
  2. bz2压缩和解压

    压缩
    bzip2 文件名1  文件名2   #支持批量压缩 不支持压缩目录 自动升成 文件名.bz2
    
    解压
    bzip2 -d 包名1  包名2   #自动删掉原件
    
  3. tar压缩和解压

    tar [option]
       -c 打包
       -x 解包
       -v 可视化
       -f指定文件名
       -t 查看包里的东西
       -z 用gzip对包进行压缩
       -j 用把bzip2对包进行压缩
    
       tar -cvf 包名   文件名1 文件名2  目录1  #不删除原件,可以打包目录
       tar -xvf 包名   #不删除原件
    
       打包并压缩
       tar -zcvf 包名  文件名1 文件名2  目录1 
       tar -jcvf 包名  文件名1 文件名2  目录1
    
       解压
       tar -zxvf  包名
       tar -jxvf  包名
    
  4. zip压缩和解压

    apt-get -y install zip unzip
    
    zip 包名  文件名或目录
    unzip 包名
    

7.2 软件的安装

  1. apt

解决deb复杂的依赖关系

查看软件包信息 		  sudo apt-cache showsrc 包名
获得源码       		     sudo apt-get source 包名
安装软件     		     sudo apt-get install 包名
删除软件                  sudo apt-get remove 包名
获取新的软件包列表         sudo apt-get update
升级有可用更新的软件包     sudo apt-get upgrage
安装apache
#1 更新软件列表
sudo apt-get update

#2 安装
sudo apt-get install apache2

#3 启动服务
sudo  /etc/init.d/apache2 start  # start | restart | stop
或
service apache2 start

# 配置虚拟站点
cd /etc/apache2
#在sites-available目录下配置自己的虚拟站点
cp 000-default.conf   www.jxc.com.conf

cd ../sites-enabled
ln -s ../sites-available/www.jxc.com.conf  www.jxc.com.conf

#配置网站
cd /var/www/html/jxc
vim index.html

#重启apache服务
sudo /etc/init.d/apache2 restart


#到window下设置域名解析
#C:\Windows\System32\drivers\etc\ 编写hosts文件
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值