linux基本操作及shell编程使用和vim

linux基本操作

  1. 如何重启、关机、切换用户?
    // 重启 #reboot 或者 #shutdown -r now
    //关机 #halt 或者 #shutdown -h now
  2. 浏览文件系统,查看系统中有哪些目录和文件?(即类似于打开windows下的“我的电脑”)如何查看系统有哪些分区?查看各个分区下文件。
    //查看目录和文件 #ls -a
    //查看系统有哪些分区 cd …退出当前目录 ls查看
  3. 如何在文件系统中查找一个文件(比如文件passwd)
    // #find -name passwd
  4. 如何查看U盘内容?
    // 插入u盘右下角设置usb连接虚拟机然后在 #mkdir /mnt/usb 然后 #fdisk -l 查看u盘的名字 然后再
    #mount /dev/sdb1(u盘名字) /mnt/usb 挂载成功
    Cd 进u盘目录查看 内容
  5. 文本编辑器是什么软件?如何启动?利用文本编辑器完成一段中英文输入?使用文本编辑器查看文件/etc/passwd的内容。
    //文本编辑器是linux里功能最为强大的全屏幕文本编辑器,他可以完成输出删除,查找替换 块操作
    //只需在命令提示符后面,直接输入vim或者vim加文件名 #vim /etc/passwd
  6. 熟悉系统所安装的应用软件,选择适当的软件完成屏幕截图一张。
    //应用程序 ->图形->Ksnapshot
  7. 如何在图形界面和文本界面之间切换?
    //图形界面切换到文本界面#ctrl+alt+f2
    //文本切换到图形界面# init 5 init5时会出现卡顿
  1. 安装OpenSSH服务
  1. 百度Ubuntu OpenSSH查找资料,为Ubuntu Linux安装远程登录服务
  2. 使用ssh客户端软件连接Linux上的ssh服务,完成后续的命令实验。
    //使用 rpm -qa|grep ssh 检查是否安装了ssh包
    // yum install openssh-server 安装openssh-server
    //查看 service sshd status
    //service sshd start 启动ssh服务
    //ifconfig 查询虚拟机地址 然后windows 打开putty 输入虚拟机地址连接 端口默认22
  1. 熟悉Linux的基本命令,每个命令通过网上查找资料或man命令来查看帮助
  1. man、info //获取帮助手册
  2. Sudo //使用管理员权限来
  3. Su //获得管理员权限
  4. Exit //退出
  5. echo //输出 相当于print
  6. pwd、cd、ls //查看当前工作目录 //cd用来退出当前目录 //ls列出文件
  7. cat、more、less、head、tail //查看文本的命令
  8. Grep//命令,通过管道操作和其它命令配合进行查找指定关键字
  9. nano、vim//编辑一个文本文件。
  10. find、which、locate、whereis whereis //查找文件在哪里
  11. useradd、passwd、adduser //useradd 添加用户 //passwd 设置用户密码 //用户添加 目录或者一些别的东西 可以通过useradd查看
  12. who、uname //查看当前用户 //打印当前系统相关的东西
  13. shutdown、halt、reboot、poweroff、init //关机 重启 关机 初始化工具
  1. 熟悉Linux的文件、目录操作命令和权限管理,每个命令通过网上查找资料或man命令来查看帮助,并完成1~3个使用例子。
  1. pwd、cd

  2. mkdir、touch

  3. cp、mv //拷贝 移动

  4. rmdir、rm //删除目录 删除文件

  5. chown、chgrp //chown 改变文件的所有这或者群组 //chgrp 改变用户所属组

  6. Chmod //改变文件或目录权限

  7. ln 符合连接和硬连接 //-s创建 软连接
    当 我们需要在不同的目录,用到相同的文件时,我们不需要在每一个需要的目录下都放一个必须相同的文件,我们只要在某个固定的目录,放上该文件,然后在其它的 目录下用ln命令链接(link)它就可以,不必重复的占用磁盘空间。例如:ln -s /bin/less /usr/local/bin/less

  8. find、which、locate、whereis

  9. gzip、bzip2 两种文件压缩

  10. tar打包和解包

  1. 查看Linux的根目录,列出Linux系统根目录下的主要目录,并说明目录的用途。
    // #cd … #ls-l

  2. 在/tmp目录下新建文件myfile。// #Touch /tmp/myfile

  3. 查看文件myfile属性等详细信息。// #ls -lh

  4. 将上题myfile的权限更改为对所有人均可读写。// #chmod 666 myfile

  5. 将文件/var/log/syslog(如该文件不存在,换为其他任意文本文件)拷贝到/tmp目录下,且命名为syslogbak。
    // #cp /var/log/secure /tmp/syslogbak

  6. 查看文件/tmp/syslogbak的内容,请比较查看文本文件内容的命令有哪些?各有何特点?
    // #cat /tmp/syslogbak 由第一行开始显示档案内容
    // #vim /tmp/syslogbak 编辑文本
    // #tac 从最后一页开始显示
    //#more 一页一页的显示档案内容
    //#less 往前翻页
    //#tail 只看尾巴几行
    //#head 只看头几行
    //#nl 显示的时候顺道输出 行号
    //#od 以二进制显示

  7. 在/tmp目录下新建目录mydir。
    //#mkdir /tmp/mydir

  8. 将文件/tmp/ syslogbak移动至目录/tmp/mydir。
    //#mv /tmp/syslogbak /tmp/mydir

  9. 删除文件/tmp/mydir/syslogbak。//#rm /tmp/mydir/syslogbak

  10. 删除目录/tmp/mydir。//#rm -rf /tmp/mydir

  11. 在整个文件系统中查找名为sudo的文件(find)。 //#find -name sudo

  12. 在整个文件系统中查找名字中包含sudo的文件。//#Find -name ‘sudo
    //# find -name ‘sudo*’ //#find -name ‘*name’

  13. 在整个文件系统中查找名为sudo的命令。//#which sudo

  14. 在目录/tmp下新建目录testdir,并在该新建目录下新建文件testfile,然后将文件testfile复制两份,分别命名为testfile2和testfile3。
    //# Mkdir /tmp/testdir #touch testfile #cp testfile /tmp/testdir/testfile2

  15. 根据题目14,将目录/tmp/testdir打包为一个.tar文件。
    //#tar cvf testfile.tar testdir

  16. 根据题目15,将生成的tar文件进行压缩,生成后缀为.tar.gz的压缩文件。
    //#tar -zcvf testfile.tar testfile.tar.gz

  17. 在文件系统中查找一个链接文件(find)。 //#find -ls //#ls -il 当前目录下

  18. 分别创建一个文件的软链接和硬链接文件,修改文件内容后,观察链接文件的内容和属性等信息。//# ln -s 文件名 连接名 软连接 //#ln 文件名 连接名 硬链接

  19. 理解umask命令的作用,重新设置umask的值,将新建文件的默认权限设置为所有人可读写。//# umask u=rw,g=rw,o=rw 用来设置接下来创建的文件的权限

  20. 新建一个文件,查看其所属者和所属组,然后修改其所属者和所属组。
    //# ls -l 查看所有者和所属组 #chown mxl myfile #chgrp mxl myfile

  21. 找出/etc目录下,文件大小介于50kB和60kB之间的文件,同时将文件详细信息列出(find)。//#find . -type f -mtime -1 -size +50k -size -100k -ls

  22. 找出/etc目录下,文件大小大于50kB且文件所有者不是root的文件,同时将文件详细信息列出(find)。 //#find /etc -not -user root -size +50k |xargs ls -l

  23. 找出/etc目录下,文件容量大于1500kB及容量等于0的文件(find)。
    //#Find /etc -size +1500k -size 0k |xargs ls -l

  24. 比较命令(1)cd (2)cd ~ (3)cd … (4)cd -的异同。
    //#cd 目录 是进入目录 //#cd ~ 是退出所有的 //#cd … 是退出当前目录
    //#cd - 退出当前目录并且输出当前目录

  25. 比较命令(1)rm (2)rm -r (3)rmdir的异同
    //#删除文件 //删除目录 //rmdir 删除目录

  26. 比较命令whoami、who am i、who的异同。

  27. 目录/root下有哪些隐藏文件?
    //#. … //#ls -d .*

  28. 假如系统中已存在2个普通用户(user1和user2,注:此处用户名只是举例,真正用户名以个人系统上为准),首先使用root用户在/tmp目录下新建目录mydir,将其所属组改为user1,权限更改为drw-r-x–x,然后分别使用普通用户user1和user2登录系统,分别进入目录/tmp/mydir下和新建文件,结果是什么?为什么?//User1可读 user2什么也干不了

  29. 接上题,如何才能使user1和user2成功进入/tmp/mydir目录,并能新建文件?//#更改目录权限

  30. 查看文件/etc/hostname的访问时间、修改时间和改变时间(stat)。
    //#Stat /etc/hostname

  31. 查看目录/etc所占的空间大小(du)。//# du /etc

  32. 查看当前系统挂载的磁盘有哪些(df)。//#df

  33. 为虚拟机添加一个5个G的磁盘,并对该磁盘进行分区和格式化(ext4),并挂载磁盘到/mnt/web目录。

  34. 查询系统已经安装的软件(dpkg)//dpkg适用于ubunt //rpm -qa 是centos的

  35. 用apt工具安装chrome浏览器软件。 centos 要修改yum 源/etc/yum.repos.d/目录下新建文件google-chrome.repo 向里面添加内容
    [google-chrome]
    name=google-chrome
    baseurl=http://dl.google.com/linux/chrome/rpm/stable/$basearch
    enabled=
    gpgcheck=
    gpgkey=https://dl-ssl.google.com/linux/linux_signing_key.pub
    Yum install google-chrome-stable

  36. 查看系统当前登录的用户账号。 //w

  37. 查看系统当前运行的进程。 //ps -eFH , ps -aux

  38. 查看系统当前的系统负载。 //top

  39. 先在tty1中使用vi新建文件/tmp/testfile2并编辑内容(内容任意,编辑完之后保存,不要退出),同时在tty2下使用ps命令查看vi的进程号,并使用kill命令强制终止vi进程,之后再进入tty1使用vi打开文件/tmp/testfile2,观察出现的问题,并解决。

  40. 在系统中创建用户testuser1、testuser2、testuser3、testuser4。 //useradd testuser1 //userdel testuser1

  41. 在系统中创建组group1、group2。 //Groupadd group1 //groupdel group1

  42. 根据题目4和5,将用户testuser1和testuser2加入用户组group1,将testuser3和testuser4加入用户组group2。//删除时使用 userdel –rf 用户名 不会出现警告 // useradd –g 用户组 用户名

  43. 新建组group3,在第6题基础上,将用户testuser1再加入用户组group3。
    // usermod –g 用户组 用户名 //用id 用户名 查看用户名所属的组

  44. 在系统中新建普通用户testuser5,并设置密码,然后使用该账号登录,之后再删除该用户。//useradd testuser5 //passwd testuser5 密码至少8位 //userdel –rf 用户名 登录用户时候要先退出root 因为root 权限可以直接登录 而不需要密码

  45. 使用一个普通用户(根据自己系统上的设置)执行命令“cat /etc/shadow”
    // cat etc/shadow。

  46. 使用man查看groups命令帮助 //man –a group。

  47. 新建用户test,要求:
     设置其全名为linuxtestuser, // useradd test
     设置其不能登录shell,//usermod -c linuxtest -s /bin/false –m test
     设置其无需个人主目录。

  48. 新建用户test2,在其个人主目录里创建3个文件,然后更改其个人主目录为其他目录,同时将其个人主目录的内容复制到该目录。
    // mv /home/test2/file{1…3} /home/test

  49. 如何查看某个用户都位于哪些组?找出两个命令。 //cat /etc/passwd //id 用户名

  50. 如何修改某个文件/目录所属用户组?//chgrp group1 test2 //ls –l

  51. 如何临时限制某个用户登录系统?(注:不将该用户从系统中删除)//usermod –L test2 –L L必须大写

  52. 自学vimtutor中文版,见附件,熟悉Vim环境,完成如下题目。

  1. 如何在三种工作模式之间进行切换。
    命令模式
    输入模式 :
    底线命令模式 ESC
  2. 在vim的一般模式下,如何将光标定位至一行的开头字符和结尾字符的位置?
    nG 指定行的开头
    A 结尾字符
    Home 开头
    End 结尾
  3. 从vim的一般模式转换为编辑模式时,如何直接将光标定位至当前字符后开始插入字符?
    i 光标当前插入
    I 光标行首插入,
    a光标后插入,
    A,光标行行尾,
    o 向下另起一行,
    O向上另起一行
  4. 如何查看vim正在编辑的文件名?
    :f
  5. 使用vim如何将文件第6行内容剪切至第10行?
    dd 剪切一行,可加数字,如10dd,yy 复制,可加数字,p粘贴;可加数字,5p,粘贴5次
    按v可选择性删除(剪切),kjhl(上下左右移动)e,词组移动
  6. vim中如何进行括号的匹配(根据左括号找到对应的右括号,或者相反)?

% 直接跳转到匹配的括号

  1. vim中如何将一个文件另存为另一个文件?

:w filename

  1. 将文件/etc/passwd复制到/tmp/passwd,然后进行如下操作:
     以vim打开/tmp/passwd文件。
     设置行号。

:set number

 将光标定位至第10行第10个字符。

10gg

10w

 将光标定位至第1行。
#H
 将光标定位至最后一行。
#G
 不使用左右上下箭头键,如何进行光标的上下左右移动?
#hjkl
 在文件中搜索字符串root。

/root

 删除第6行。
#6gg
#dd
 撤销删除第6行。

u

 将第1-5行复制到文件末尾。

:1,5 copy 40 (设置好行号)

光标移动到起始行,输入ma
光标移动到结束行,输入mb
光标移动到粘贴行,输入mc
然后输入:'a,'b, co 'c 把co换成m就是剪切
若要删除多行,则输入:'a,'b de
 撤销如上5行的复制。
#u
 删除第6行的前5个字符。
#6gg
#5x
 将字符串ftp替换为abc。
#1,$s/ftp/abc/g

s/vivian/sky/ 替换当前行第一个 vivian 为 sky
:s/vivian/sky/g 替换当前行所有 vivian 为 sky
:n, s / v i v i a n / s k y / 替 换 第 n 行 开 始 到 最 后 一 行 中 每 一 行 的 第 一 个 v i v i a n 为 s k y : n , s/vivian/sky/ 替换第 n 行开始到最后一行中每一行的第一个 vivian 为 sky :n, s/vivian/sky/nvivianskyn,s/vivian/sky/g 替换第 n 行开始到最后一行中每一行所有 vivian 为 sky
 将文件不保存退出。
#:q!
 重新以vim打开/tmp/passwd文件,将光标定位至第3行。
 在第3行的下一行(第4行)开始编辑,插入内容“abcdefg”。
#o
 切换至一般模式,将上题中的字符a替换为z。
#?/a/z/g
 将文件保存退出。
#:wq
2. 理解Bash使用,完成如下题目

  1. 在命令输入时使用tab键,理解tab键的作用和用法。
  2. 使用两种方法(其中一种方法必须使用管道命令)将文件/etc/passwd中包含“ftp”的一行输出。
    #echo |grep ftp /tmp/passwd

  1. 分别查看环境变量PATH和HOME的值。将当前目录加入PATH环境变量。Echo
    #echo $HOME
    #echo KaTeX parse error: Expected 'EOF', got '#' at position 6: PATH #̲export PATH=PATH:/tmp
  2. 设置命令“cd /usr/share/doc”的别名为“cddoc”,并执行命令别名。
    #alias cddoc=’cd /usr/share/doc’
  3. 取消上题中的命令别名“cddoc”。
    #unalias cddoc
  4. 新建文件/tmp/testfile,使用echo命令将“123”写入该文件中。
    (写一个脚本,例如test.sh)
    #!bin/bash
    Echo “123”>/tmp/testfile
  5. 将命令ps -axu的执行结果重定向到文件/tmp/pslog文件中。
    #ps -axu>/tmp/pslog
  6. 使用和熟悉快捷键Ctrl+C、Ctrl+D、Ctrl+A、Ctrl+E、Ctrl+L、Ctrl+U、Ctrl+K、Ctrl+Y、Ctrl+R。
    #ctrl+c 杀死当前进程
    #ctrl+d exit或logout
    #ctrl+a 光标跳到首行
    #ctrl+e 光标移到尾行
    #ctrl+L 清屏,clear
    #ctrl+u 清除光标之前的所有内容
    #ctrl+k 清除光标之后的内容
    #ctrl+y 粘贴或者恢复上次的删除
    #ctrl+r 搜索之前打过的命令
  7. 显示最近执行过的10条命令。重新执行倒数第5条命令。
    #history 10
    #!number
  8. 查看系统当前设置了哪些命令别名。
    #alias -p
  9. 使用!命令将最近执行过的以l开头的命令再执行一次。
    #!L
  1. 使用引用环境变量(使用$)的方法完成如下功能:
  1. 删除/tmp目录下所有者为当前登录用户的所有文件。
  2. 切换目录至当前用户的个人主目录。
  3. 查看当前工作目录。
  1. 理解Bash中特殊字符的用法
  1. 输出字符串 abc’de
    #echo abc\’de
  2. 利用变量赋值方式,将字符串DOS file c:>$student*显示出来。
    #!bin/bash
    Str=” DOS file c:>\$student*”
    Echo $str
  3. 利用变量赋值方式,将字符串echo “directory is KaTeX parse error: Expected 'EOF', got '#' at position 35: …境变量,要求将其显值示出来。 #̲!bin/bash Str=HOME
    Echo “directory is $str”
  1. 执行并理解如下命令,写出执行结果
  1. str2=’echo “directory is $HOME”’
    echo $str2
    echo “directory is $HOME”
  2. str3=date
    echo today is $str3
    echo today is date
    today is 2018年 12月 04日 星期二 10:16:19 CST
    today is 2018年 12月 04日 星期二 10:16:19 CST
  3. echo “filename is \“$HOME\”$
    filename is “/home/po”$
  4. echo “filename is \abc $HOME”
    filename is \abc $HOME
  5. var1=“zhang san”
    echo $var1
    echo ${var1}
    zhang san
    zhang san
  6. var1=linux
    var2=“linux fedora”
    var3=20
    var4=“$var2 v a r 3 ” v a r 5 = “ var3” var5=“ var3var5=var2 v a r 3 ” v a r 6 = var3” var6= var3var6=var2 v a r 3 v a r 7 = var3 var7= var3var7={var2}${var3}
    查看如上各个变量的值。
    linux
    linux fedora
    20
    linux fedora20
    linux fedora20
    linux fedora20
    linux fedora20
  7. var1=zhangsan
    echo $var1
    var2=lisi
    echo $var2
    bash
    echo $var1 $var2
    exit
    echo $var1 $var2
    zhangsan
    lisi
  8. var1=zhangsan
    echo $var1
    var2=lisi
    export var2
    echo $var2
    bash(子进程)
    echo $var1 $var2
    export –n var2

bash(孙子进程)
echo $var1 $var2
exit(返回子进程)
echo $var1 $var2
exit(返回父进程)
echo $var1 $var2
zhangsan
lisi

  1. 如何使用通配符匹配如下字符串?
  1. .afile、.bfile、.cfile、.abcfile
    #.[abc]file
  2. fa、fb、fc、fd、fe、ff、fg…fz
    #f[a-z]
  3. f1、f2、f3…f100
    #f[0-9] f[0-9][0-9] f[0-9][0-9][0-9]
  4. 以chapter开头后面紧跟着0个或多个0-9的数字,如匹配chapter、chapter0、chapter2、chapter36、chapter100等。
    #chapter*[0-9]
  5. 匹配/var目录下,以l开头的子目录下的所有的文件。
    #/var/l*
  1. 按如下步骤执行,理解位置参数$0、$1、$2。
    echo 123 > /tmp/f1
    echo abc > /tmp/f2
    vim ex1(编辑文件ex1内容如下)
    #!/bin/bash
    cat $0 $1 $2

chmod 777 ex1
./ex1 f1 f2
查看并理解执行结果。
#!/bin/bash
cat $0 $1 $2

123
abc
8. Linux下环境文件有哪些?各有何作用?请总结并形成文档。
系统级:
/etc/profile 用户登录时操作系统指定用户环境时使用的第一个文件,应用在每个用户。该文件一般调用/etc/bash.bashrc
/etc/environment 登录时操作系统使用的第二个文件,系统在读取你自己的profile前,设置环境文件的环境变量。

用户级:
~/.profile 每个用户都可使用该文件输入专用于自己使用的shell信息,当用户登录时,该文件仅仅执行一次!默认情况下,他设置一些环境变量,执行用户的.bashrc文件。这里是推荐放置个人设置的地方
~/.bashrc 该文件包含专用于你的bash shell的bash信息,当登录时以及每次打开新的shell时,该该文件被读取。不推荐放到这儿,因为每开一个shell,这个文件会读取一次,效率肯定有影响。
~/.bash_profile or ~./bash_login:
~/.pam_environment:用户级的环境变量设置文件
9. 什么是shell脚本文件?请写出3-5个简单的脚本文件并运行。
shell脚本就是由Shell命令组成的文件,这些命令都是可执行程序的名字,脚本不用编译即可运行。它通过解释器解释运行,所以速度相对来说比较慢。
文件名 file.sh
10. 理解如下特殊变量的含义。
$# 参数总数
$? 执行上一个指令的返回值
$$ 这个程序的PID
$! 执行上一个背景指令的PID(后台运行的最后一个进程的进程ID号)
$- 显示shell使用的当前选项,与set命令功能相同
@ 跟 @ 跟 @类似,但是可以当作数组用
$
这个程式的所有参数,词选项参数可超过9个

  1. 分析下列脚本的功能。
    cat example1 (注意:假如脚本文件名为example1)
    count=$#
    cmd=echo
    while [ c o u n t − g t 0 ] d o c m d = ” count -gt 0] do cmd=” countgt0]docmd=cmd $$count”
    count=expr $count -l
    done
    eval $cmd
    把输入的参数倒序输出

  2. 编写shell脚本,将第2个位置参数及其后的各个参数所指定的文件复制到第1个位置参数指定的目录中。
    #!/bin/bash
    dir=$1
    shift
    for var in $*
    do
    cp $var ${dir}/
    done

  3. 利用for循环将当前目录下.c文件移到指定目录下,之后显示该指定目录下的内容。
    #!/bin/bash
    dir= 1 m y d i r = 1 mydir= 1mydir=PWD
    files=ls $mydir/*\.c
    for var in $files
    do
    cp $var $dir/
    done
    echo `ls $dir/

  4. 根据用户输入的用户名,查看系统中该用户是否登录。

  5. 用户输入一个1-10之间的数字,若不在该范围则输出信息“error”,否则输出信息“accept”。
    #!/bin/bash
    number=$1
    case $1 in
    [1-9])
    echo accept
    ;;

echo accept
;;
*)
echo error
esac
6. 使用for循环在系统中成批添加10个用户,用户名分别是stu1~stu10。
#!/bin/bash
for ((i=1;i<=10;i++))
do
pass=“123456”
useradd stuKaTeX parse error: Expected 'EOF', got '&' at position 3: i &̲& "stui:$pass"|chpasswd
done
7. 任意设计一个shell程序,要求用到函数定义和调用。
#!/bin/bash
sum(){
n=expr $1 + $2
sum="$1+ 2 = 2= 2=n"
echo $sum
}
sum $1 $2
8. 分析的上网认证系统
(http://2.2.2.2/ac_portal/20170407143720/pc.html),通过wget发送post请求包完成网络的认证和注销。根据并分别完成两个shell脚本:

  1. 登录脚本,运行脚本后提示输入用户名和密码(密码不要显示出来),然后完成登录,并返回登录的结果。
  2. 注销脚本,运行脚本后注销当前用户。
  1. 设定定时执行任务,每天上午9:30至下午15:00,每隔5分钟在/root/toplog/目录下以当前日期和时间组合为文件名(ex:20171122_1012.log),记录当前的系统性能日志(top命令的输出即可)。
    http://www.cnblogs.com/phpstudy2015-6/p/7534968.html
    #crontab -e
    */5 9-15 * * * top -b -n 1 >/root/tolog/date +%Y%m%d_%H%M.log &

你可能感兴趣的:(linux,shell,vim,基本操作)