黑马程序员C语言基础(一)第二天

https://www.bilibili.com/video/BV15W411K7k6?p=19&spm_id_from=pageDriver

文章目录

      • 用户、权限管理(这是运维做的事,我们研发只需了解即可)
        • 1) 查看当前用户:whoami
        • 2) 查看登录用户:who
        • 3) 查看登录用户:w
        • 4) 退出登录账户: exit
        • 5) 切换用户:su(switch users)(注意加 - 与不加的区别:是否切换用户目录)
        • 6) 添加、删除组账号:groupadd、groupdel
        • 7) 修改用户所在组:usermod(一个用户能加入很多组,相当于一个qq号能进很多qq群)
        • 8) 添加用户账号:useradd
        • 9) 设置用户密码:passwd
        • 10) 删除用户:userdel
        • 11) 查询用户登录情况:last
        • 12) 修改文件权限:chmod(字母法和数字法)(记住权限顺序 rwx,三个分类:ugo)(重要)
        • 13) 修改文件所有者:chown(change owner)
        • 14) 修改文件所属组:chgrp(change group)
      • 3.3.3 系统管理
          • 1) 查看当前日历:cal
          • 2) 显示或设置时间:date(cal 查看日历)
          • 3) 查看进程信息:ps(process status)
          • 4) 动态显示进程:top
          • 5) 终止进程:kill
          • 6) 后台程序:&、jobs、fg(foreground)(& 取地址符号)
          • 7) 关机重启:reboot、shutdown、init
          • 8) 字符界面和图形界面切换
          • 9) 检测磁盘空间:df(disk free)
          • 10) 检测目录所占磁盘空间:du(disk usage)
          • 11) 应用软件安装和卸载(ubuntu推荐用apt-get安装,不用rpm)
          • 12) 查看或配置网卡信息:ifconfig
          • 13) 测试远程主机连通性:ping
          • 14) 网络路由设置:route(略,网管的)
          • 15) 监控网络状态:netstat(略,网管的)
    • 编辑器
      • gedit编辑器
      • vi编辑器(升级版vim)
        • vi介绍
        • vi最基本操作
          • 1) 打开文件(创建文件:vi filename.c)
          • 2) 编辑文件
          • 3) 保存文件(Esc-->ZZ)
        • vi实用命令(略,没配置,用都用不了)
          • 1) vi的插入模式
          • 2) vi的退出
          • 3) vi的删除和修改功能
          • 4) vi的行定位功能
          • 5) vi的文本查找功能
          • 6) vi的替换功能
          • 7) vi的set指令
    • 远程操作
      • SSH介绍
      • 远程登录
        • Linux平台相互远程
        • Windows远程登录Linux(重要,一般也用这个就好了)
      • 远程传输文件(windows用xftp就好了,方便,不用敲命令敲来敲去)
        • Linux平台相互传输
        • Windows和Linux相互传输文件
    • webserver环境搭建
      • webserver环境搭建
        • 1)把http.tar.gz拷贝到Linux环境中:
        • 2)解压压缩包:
        • 3)进入解压后的目录,终端敲make编译代码:
        • 4)如果是RedHat环境,需要额外配置一下防火墙:
        • 5)root用户启动或关闭web服务:
        • 6)环境测试
        • 6.2 网页版HelloWorld
          • 1)重新打开一个终端,进入web服务器所在目录:
          • 2)通过vi新建hello.c文件,内容写如下代码:
          • 3)退出保存hello.c后,通过gcc编译代码,可执行程序的后缀名(扩展名)一定是cgi(这是web服务器需要这个的后缀,不是C标准):
          • 4)测试网页版helloworld,在浏览器输入:192.168.31.143/hello.cgi
          • 5)显示中文乱码解决方法(了解)

用户、权限管理(这是运维做的事,我们研发只需了解即可)

  • 用户是Unix/Linux系统工作中重要的一环,用户管理包括用户与组账号的管理。
  • 在Unix/Linux系统中,不论是由本机或是远程登录系统,每个系统都必须拥有一个账号,并且对于不同的系统资源拥有不同的使用权限。
  • Unix/Linux系统中的root账号通常用于系统的维护和管理,它对Unix/Linux操作系统的所有部分具有不受限制的访问权限。
  • 在Unix/Linux安装的过程中,系统会自动创建许多用户账号,而这些默认的用户就称为“标准用户”。
  • 在大多数版本的Unix/Linux中,都不推荐直接使用root账号登录系统。

1) 查看当前用户:whoami

whoami该命令用户查看当前系统当前账号的用户名。可通过cat /etc/passwd查看系统用户信息。

由于系统管理员通常需要使用多种身份登录系统,例如通常使用普通用户登录系统,然后再以su命令切换到root身份对传统进行管理。这时候就可以使用whoami来查看当前用户的身份。
在这里插入图片描述
示例:
在这里插入图片描述

2) 查看登录用户:who

who命令用于查看当前所有登录系统的用户信息。

常用选项:

选项	含义
-m或am I	只显示运行who命令的用户名、登录终端和登录时间
-q或--count	只显示用户的登录账号和登录用户的数量
-u	在登录时间后显示该用户最后一次操作到当前的时间间隔
-u或--heading	显示列标题

在这里插入图片描述

3) 查看登录用户:w

w命令也可以查看登录当前系统的用户信息。与who命令相比,w命令的功能更强大,它不但可以显示当前有哪些用户登录到系统,还可以显示这些用户正在进行的操作,并给出更加详细和科学的统计数据。

w命令的格式如下:

w  [选项]  [用户名]

如果w命令携带用户名,则只显示指定用户的信息,否则显示当前所有登录用户的信息。

常用选项:

选项	含义
-h	只显示运行who命令的用户名、登录终端和登录时间
-l	显示详细信息列表,此为预设值
-s	使用短列表,不显示用户登录时间、JCPU和PCPU时间
-u	忽略执行程序的名称,以及该程序的PCPU时间

4) 退出登录账户: exit

  • 如果是图形界面,退出当前终端;
  • 如果是使用ssh远程登录,退出登陆账户;
  • 如果是切换后的登陆用户,退出则返回上一个登陆账号。

5) 切换用户:su(switch users)(注意加 - 与不加的区别:是否切换用户目录)

可以通过su命令切换用户,su后面可以加“-”。su和su –命令不同之处在于,su -切换到对应的用户时会将当前的工作目录自动转换到切换后的用户主目录(su - 会切换工作目录):
在这里插入图片描述
注意:如果是ubuntu平台,需要在命令前加“sudo”,如果在某些操作需要管理员才能操作,ubuntu无需切换到root用户即可操作,只需加“sudo”即可。sudo是ubuntu平台下允许系统管理员让普通用户执行一些或者全部的root命令的一个工具,减少了root 用户的登陆和管理时间,提高了安全性。

命令	含义
su	切换到root用户
su root	切换到root用户
su -	切换到root用户,同时切换目录到/root
su - root	切换到root用户,同时切换目录到/root
su 普通用户	切换到普通用户
su - 普通用户	切换到普通用户,同时切换普通用户所在的目录

示例:
在这里插入图片描述

6) 添加、删除组账号:groupadd、groupdel

  • groupadd 新建组账号
  • groupdel 删除组账号
  • cat /etc/group 查看用户组
    在这里插入图片描述
    示例:查看用户组信息(cat /etc/group
    在这里插入图片描述
    相当于qq群名称:
dontla@dontla-virtual-machine:~$ cat /etc/group
root:x:0:
daemon:x:1:
bin:x:2:
sys:x:3:
adm:x:4:syslog,dontla
tty:x:5:syslog
disk:x:6:
lp:x:7:
mail:x:8:
news:x:9:
uucp:x:10:
man:x:12:
proxy:x:13:
kmem:x:15:
dialout:x:20:
fax:x:21:
voice:x:22:
cdrom:x:24:dontla
floppy:x:25:
tape:x:26:
sudo:x:27:dontla
audio:x:29:pulse
dip:x:30:dontla
www-data:x:33:
backup:x:34:
operator:x:37:
list:x:38:
irc:x:39:
src:x:40:
gnats:x:41:
shadow:x:42:
utmp:x:43:
video:x:44:
sasl:x:45:
plugdev:x:46:dontla
staff:x:50:
games:x:60:
users:x:100:
nogroup:x:65534:
systemd-journal:x:101:
systemd-network:x:102:
systemd-resolve:x:103:
systemd-timesync:x:104:
crontab:x:105:
messagebus:x:106:
input:x:107:
kvm:x:108:
render:x:109:
syslog:x:110:
tss:x:111:
bluetooth:x:112:
ssl-cert:x:113:
uuidd:x:114:
tcpdump:x:115:
avahi-autoipd:x:116:
rtkit:x:117:
ssh:x:118:
netdev:x:119:
lpadmin:x:120:dontla
avahi:x:121:
scanner:x:122:saned
saned:x:123:
nm-openvpn:x:124:
whoopsie:x:125:
colord:x:126:
geoclue:x:127:
pulse:x:128:
pulse-access:x:129:
gdm:x:130:
lxd:x:131:dontla
dontla:x:1000:
sambashare:x:132:dontla
systemd-coredump:x:999:

7) 修改用户所在组:usermod(一个用户能加入很多组,相当于一个qq号能进很多qq群)

使用方法:usermod -g 用户组 用户名

示例:将用户加入用户组
在这里插入图片描述

8) 添加用户账号:useradd

在Unix/Linux中添加用户账号可以使用adduser或useradd命令,因为adduser命令是指向useradd命令的一个链接,因此,这两个命令的使用格式完全一样。

useradd命令的使用格式如下:

useradd  [参数]  新建用户账号
参数	含义
-d <dirname>	指定用户登录系统时的主目录,如果不使用该参数,系统自动在/home目录下建立与用户名同名目录为主目录
-m	自动建立目录
-g	指定组名称

相关说明:

  • Linux每个用户都要有一个主目录,主目录就是第一次登陆系统,用户的默认当前目录(/home/用户);
  • 每一个用户必须有一个主目录,所以用useradd创建用户的时候,一定给用户指定一个主目录;
  • 用户的主目录一般要放到根目录的home目录下,用户的主目录和用户名是相同的;
  • 如果创建用户的时候,不指定组名,那么系统会自动创建一个和用户名一样的组名。
命令	含义
useradd -d /home/abc abc -m	创建abc用户,如果/home/abc目录不存在,就自动创建这个目录,同时用户属于abc组
useradd -d /home/a a -g test -m	创建一个用户名字叫a,主目录在/home/a,如果主目录不存在,就自动创建主目录,同时用户属于test组
cat /etc/passwd	查看系统当前用户名信息

示例:查看用户信息(cat /etc/passwd
在这里插入图片描述
示例:创建用户(默认创建与用户同名的用户组)
在这里插入图片描述

在这里插入图片描述

9) 设置用户密码:passwd

在Unix/Linux中,超级用户可以使用passwd命令为普通用户设置或修改用户口令。用户也可以直接使用该命令来修改自己的口令,而无需在命令后面使用用户名。
在这里插入图片描述

10) 删除用户:userdel

命令	含义
userdel abc(用户名)	删除abc用户,但不会自动删除用户的主目录
userdel -r abc(用户名)	删除用户,同时删除用户的主目录 

示例:删除用户并同时删除用户组(userdel -r abc(用户名)
在这里插入图片描述

11) 查询用户登录情况:last

不管是哪位用户从哪里登录,管理员都可以通过last命令查出,以及是否有人非法登录。

示例:
在这里插入图片描述

12) 修改文件权限:chmod(字母法和数字法)(记住权限顺序 rwx,三个分类:ugo)(重要)

chmod 修改文件权限有两种使用格式:字母法与数字法。

字母法:chmod u/g/o/a +/-/= rwx 文件

[ u/g/o/a ] 	含义
u	user 表示该文件的所有者 
g	group 表示与该文件的所有者属于同一组( group )者,即用户组
o	other 表示其他以外的人
a	all 表示这三者皆是
[ +-= ] 	含义
+	增加权限 
-	撤销权限
=	设定权限
rwx 	含义
r	read 表示可读取,对于一个目录,如果没有r权限,那么就意味着不能通过ls查看这个目录内部的内容。
w	write 表示可写入,对于一个目录,如果没有w权限,那么就意味着不能在目录下创建新的文件。
x	excute 表示可执行,对于一个目录,如果没有x权限,那么就意味着不能通过cd进入这个目录。

chmod o+w file 给文件file的其它用户增加写权限:
在这里插入图片描述
chmod u-r file 给文件file的拥有者减去读的权限:
在这里插入图片描述
chmod g=x file设置文件file的同组用户的权限为可执行,同时去除读、写权限:
在这里插入图片描述
示例:字母法修改文件权限
在这里插入图片描述

数字法:“rwx” 这些权限也可以用数字来代替

r	读取权限,数字代号为 "4"
w	写入权限,数字代号为 "2"
x	执行权限,数字代号为 "1"
-	不具任何权限,数字代号为 "0"

在这里插入图片描述

如执行:chmod u=rwx,g=rx,o=r filename
就等同于:chmod u=7,g=5,o=4 filename
chmod 751 file

  • 文件所有者:读、写、执行权限
  • 同组用户:读、执行的权限
  • 其它用户:执行的权限
    在这里插入图片描述
    在这里插入图片描述
    注意:如果想递归所有目录加上相同权限,需要加上参数“ -R ”。
    如:chmod 777 test/ -R 递归 test 目录下所有文件加 777 权限。

示例:用数字法修改文件权限
在这里插入图片描述
在这里插入图片描述

注意:文件夹失去可执行权限将无法进入

示例:
在这里插入图片描述

13) 修改文件所有者:chown(change owner)

使用方法:chown 用户名 文件或目录名
在这里插入图片描述

14) 修改文件所属组:chgrp(change group)

使用方法:chgrp 用户组名 文件或目录名
在这里插入图片描述

3.3.3 系统管理

1) 查看当前日历:cal

cal命令用于查看当前日历,-y显示整年日历:
在这里插入图片描述

2) 显示或设置时间:date(cal 查看日历)

设置时间格式(需要管理员权限):

date  [MMDDhhmm[[CC]YY][.ss]] +format

CC为年前两位yy为年的后两位,前两位的mm为月,后两位的mm为分钟,dd为天,hh为小时,ss为秒。如: date 010203042016.55。

显示时间格式(date ‘+%y,%m,%d,%H,%M,%S’):

format格式	含义
%Y,%y	年
%m	月
%d	日
%H	时
%M	分
%S	秒

在这里插入图片描述
示例:
在这里插入图片描述
在这里插入图片描述

3) 查看进程信息:ps(process status)

进程是一个具有一定独立功能的程序,它是操作系统动态执行的基本单元。

ps命令可以查看进程的详细状况,常用选项(选项可以不加“-”)如下:

选项	含义
-a	显示终端上的所有进程,包括其他用户的进程
-u	显示进程的详细状态
-x	显示没有控制终端的进程
-w	显示加宽,以便显示更多的信息
-r	只显示正在运行的进程

在这里插入图片描述
示例:查看进程状态
在这里插入图片描述

4) 动态显示进程:top

top命令用来动态显示运行中的进程。top命令能够在运行后,在指定的时间间隔更新显示信息。可以在使用top命令时加上-d 来指定显示信息更新的时间间隔。

在top命令执行后,可以按下按键得到对显示的结果进行排序:

按键	含义
M	根据内存使用量来排序
P	根据CPU占有率来排序
T	根据进程运行时间的长短来排序
U	可以根据后面输入的用户名来筛选进程
K	可以根据后面输入的PID来杀死进程。
q	退出
h	获得帮助

在这里插入图片描述

5) 终止进程:kill

kill命令指定进程号的进程,需要配合 ps 使用。

使用格式:

kill [-signal] pid

信号值从0到15,其中9为绝对终止,可以处理一般信号无法终止的进程。

kill 9133 :9133 为应用程序所对应的进程号
在这里插入图片描述
有些进程不能直接杀死,这时候我们需要加一个参数“ -9 ”,“ -9 ” 代表强制结束:
在这里插入图片描述
示例:终止进程(加 -9 参数是强制程序终止运行【杀死进程】)
在这里插入图片描述

6) 后台程序:&、jobs、fg(foreground)(& 取地址符号)
  • 用户可以将一个前台执行的程序调入后台执行,方法为:命令 &
  • 如果程序已经在执行,ctrl+z可以将程序调入后台
  • jobs查看后台运行程序
  • fg编号(编号为通过jobs查看的编号),将后台运行程序调出到前台

示例:让可执行程序后台运行
在这里插入图片描述
示例:在程序运行时切换到后台再切换回来
在这里插入图片描述

7) 关机重启:reboot、shutdown、init
命令	含义
reboot	重新启动操作系统
shutdown –r now	重新启动操作系统,shutdown会给别的用户提示
shutdown -h now	立刻关机,其中now相当于时间为0的状态
shutdown -h 20:25	系统在今天的20:25 会关机
shutdown -h +10	系统再过十分钟后自动关机
init 0	关机
init 6 	重启
8) 字符界面和图形界面切换

在redhat平台下,可通过命令进行切换:

init 3	切换到字符界面
init 5	切换到图形界面

通过快捷键切换(适用大部分平台):

Ctrl + Alt + F2	切换到字符界面
Ctrl + Alt + F7	切换到图形界面

我的字符界面怎么不太一样?

9) 检测磁盘空间:df(disk free)

df命令用于检测文件系统的磁盘空间占用和空余情况,可以显示所有文件系统对节点和磁盘块的使用情况。

选项	含义
-a	显示所有文件系统的磁盘使用情况
-m	以1024字节为单位显示
-h	以K,M,G为单位,提高信息的可读性
-T	显示文件系统

在这里插入图片描述
示例:查看所有磁盘用量和查看当前路径所在磁盘用量
在这里插入图片描述

10) 检测目录所占磁盘空间:du(disk usage)

du命令用于统计目录或文件所占磁盘空间的大小,该命令的执行结果与df类似,du更侧重于磁盘的使用状况。

du命令的使用格式如下:

du  [选项]  目录或文件名
选项	含义
-a	递归显示指定目录中各文件和子目录中文件占用的数据块
-s	显示指定文件或目录占用的数据块
-b	以字节为单位显示磁盘占用情况
-h	以K,M,G为单位,提高信息的可读性

在这里插入图片描述
示例:递归显示当前路径下所有目录的大小(不递归显示文件)(如果要递归显示文件大小加上-a参数)
在这里插入图片描述

11) 应用软件安装和卸载(ubuntu推荐用apt-get安装,不用rpm)

在 Linux 操作系统下,几乎所有的软件均通过RPM 进行安装、卸载及管理等操作。RPM 的全称为Redhat Package Manager ,是由Redhat公司提出的,用于管理Linux下软件包的软件。它是一种软件打包发行并且实现自动安装的程序,需要用rpm程序安装的软件包,其后缀是.rpm,并可以对这种程序包进行安装、卸装和维护。

rpm命令的使用格式如下:

rpm   [选项]  [软件包名]
选项	含义
-i	指定安装的软件包
-h	使用“#”显示详细的安装过程及进度
-v	显示安装的详细信息
-q	查询系统是否已安装指定的软件包
-a	查看系统已安装的所有软件包
-e	卸载软件包
--nodeps	配合-e参数使用,强制卸载不检查依赖项
--force	强制操作 如强制安装删除等

在这里插入图片描述
如果是在ubuntu平台,软件的安装可以通过互联网在线安装,更加方便快捷:

命令	含义
sudo apt-get update	获得最新的软件包的列表
sudo apt-get install xxx	从源中安装xxx软件
sudo apt-get remove xxx	删除xxx软件

在这里插入图片描述

12) 查看或配置网卡信息:ifconfig

如果,我们只是敲:ifconfig,它会显示所有网卡的信息:
在这里插入图片描述

显示字段	说明
eth0	网络接口名称
Link encap	链路封装协议
Hwaddr	网络接口的MAC地址
Inet addr	IP地址
Bcast	广播地址
Mask	子网掩码
UP	网络接口状态标识,UP已经启用,DOWN已经停用
BROADCAST	广播标识,标识网络接口是否支持广播
RUNNING	传输标识,标识网络接口是否已经开始传输分组数据
MULTICAST	多播标识,标识网络接口是否支持多播
MTU,Metric	MTU:最大传输单位,单位:字节。Metric:度量值,用于RIP建立网络路由用
RX bytes	接收数据字节统计
TX bytes	发送数据字节统计

我们可以通过ifconfig配置网络参数:

  • 只有root才能用ifconfig配置参数,其他用户只能查看网络配置
  • ifconfig 网络接口名称 [地址协议类型] [address] [参数]
  • 地址协议类型如:inet(IPv4),inet6(IPv6)等
  • 如:ifconfig eth0 inet 192.168.10.254 netmask 255.255.255.0 up

常用参数:

参数	功能
-a	显示所有网络接口状态
inet  [IP地址]	设置IP地址
netmask [子网掩码]	设置子网掩码
up	启用网络接口
down	关闭网络接口

ifconfig配置的网络参数在内存中,计算机重新启动之后就失效了,如果需要持久有效就需要修改网络接口的配置文件:

  • redhat修改/etc/sysconfig/network-scripts/ifcfg-eth0文件
IPADDR=IP地址
GATEWAY=默认网关
  • ubuntu修改/etc/NetworkManager/system-connections/Wired connection 1文件
[ipv4]
method=manual
addresses1=IP地址;24;默认网关;

在这里插入图片描述

13) 测试远程主机连通性:ping
  • ping通过ICMP协议向远程主机发送ECHO_REQUEST请求,期望主机回复ECHO_REPLY消息
  • 通过ping命令可以检查是否与远程主机建立了TCP/IP连接

使用方法:ping [参数] 远程主机IP地址

参数	功能
-a	每次相应时都发出声音警示
-A	表示以实际往返相应时间为间隔,连续发送消息
-f	连续不断发送消息,不管是否收到相应
-n	只显示主机IP,不需要把IP解释成主机名
-c	发送指定次数数据报信息后停止,ping -c 5 192.168.10.254
-i	每次发送消息时间间隔,默认一秒,ping -i 2 192.168.10.254
-s	分组数据大小,默认56字节
-w	以秒为单位的超时值,一旦超时,就立即停止

在这里插入图片描述
示例1:windows与Ubuntu虚拟的互相ping,看是否能ping通
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

14) 网络路由设置:route(略,网管的)

route可以增加,修改,显示路由信息,使用格式如下:

route [-v] [-A family] add default [gw 默认网关地址] [[dev interface]]
参数	功能
add	增加路由信息
del	删除路由信息
-v	显示路由信息
-A	指定网络协议inet(IPv4),inet6(IPv6)
gw	指定默认网关地址
dev	指定网络接口

示例:route add default gw 192.168.1.1 dev eth0

15) 监控网络状态:netstat(略,网管的)

netstat命令监控网络状态,包括接口设置,IP路由,各种网络协议的统计,netstat输出信息说明如下:

字段	说明
Proto	协议,如:tcp,udp
Recv-Q	尚未读取的数据字节数
Send-Q	尚未发送的数据字节数
Local_address	本地主机地址与端口号
Foreign_address	远程主机与端口号
State	网络连接状态
RefCnt	引用计数,表示加接到相应套接字的进程数量
Flags	标志字段
Type	套接字类型,如:(SOCK_DGRAM, SOCK_STREAM,SOCK_RAW)
State	套接字状态
Path	套接字路径名

netstat常用命令参数:

参数	功能
-a	列出所有端口
-i	显示网络接口列表
-at	所有tcp端口
-au	所有udp端口
-l	所有监听端口
-lt	tcp监听端口
-lu	指定网络接口
-s	显示所有协议统计信息
-r	当前路由状态
-p	输出中显示 PID 和进程名称,可以与其它开关一起使用,如:-pt

编辑器

gedit编辑器

gedit是一个Linux环境下的文本编辑器,类似windows下的写字板程序,在不需要特别复杂的编程环境下,作为基本的文本编辑器比较合适。
在这里插入图片描述

vi编辑器(升级版vim)

vi介绍

vi 编辑器是 Linux 系统中最常用的文本编辑器,vi 在Linux界有编辑器之神的美誉,几乎所有的 Linux 发行版中都包含 vi 程序。

vi 工作在字符模式下,不需要图形界面,非常适合远程及嵌入式工作,是效率很高的文本编辑器,尽管在 Linux 上也有很多图形界面的编辑器可用,但vi的功能是那些图形编辑器所无法比拟的。

vim 是 vi 的升级版,它不仅兼容 vi 的所有指令,而且还有一些新的特性,例如 vim 可以撤消无限次、支持关键词自动完成、可以用不同的颜色来高亮你的代码。vim 普遍被推崇为类 vi 编辑器中最好的一个。

vi有输入和命令两种工作模式。输入模式(也叫插入模式)用于输入字符。命令模式则是用来运行一些编排文件、存档以及离开vi等操作命令。当执行vi后,首先进入命令模式,此时输入的任何字符都被视为命令。

vi最基本操作

1) 打开文件(创建文件:vi filename.c)

vi filename:打开或新建文件,并将光标置于第一行行首,如果文件不存在,则会新建文件。
在这里插入图片描述
我的没有“插入”?(没安装vim,参考ubuntu vi 按方向键出现很多字母是怎么回事?(没安装vim))

2) 编辑文件

如果通过vi打开一个已经存在的文件,首先进入命令模式,此时输入的任何字符都被视为命令,不能输入内容。
在这里插入图片描述

3) 保存文件(Esc–>ZZ)

一定要先退出插入模式(按Esc进入命令模式),然后(小写状态下),shift + zz (按住 “shift” + 按两下“z”键),或者(大写状态下:ZZ) 即可保存退出当前文件。

vi实用命令(略,没配置,用都用不了)

1) vi的插入模式
按键	功能
a	光标位置右边插入文字
i	光标位置当前处插入文字
o(小写字母)	光标位置下方开启新行
O(大写字母)	光标位置上方开启新行
I	光标所在行首插入文字
A	光标所在行尾插入文字

退出模式下,\p<能插入头代码?我反斜杠打出来不显示???(搞半天原来是没配置??)
在这里插入图片描述

2) vi的退出
按键	功能
ZZ(shift+z+z)	保存退出
:wq	保存退出
:x(小写)	保存退出
:w filename	保存到指定文件
:q	退出,如果文件修改但没有保存,会提示无法退出
:q!	退出,不保存
:!命令	暂时离开vi,执行命令

注意:ZZ:wq:q!:w 需要掌握

3) vi的删除和修改功能
按键	功能
[n]x	删除光标后 n 个字符
[n]X	删除光标前 n 个字符
D	删除光标所在开始到此行尾的字符
[n]dd	删除从当前行开始的 n 行(准确来讲,是剪切,剪切不粘贴即为删除)
[n]yy	复制从当前行开始的 n 行
p	把粘贴板上的内容插入到当前行
dG	删除光标所在开始到文件尾的所有字符
J	合并两行
.	执行上一次操作
u	撤销前一个命令
4) vi的行定位功能
按键	功能
Ctrl + f	向前滚动一个屏幕
Ctrl + b	向后滚动一个屏幕
gg	到文件第一行行首
G(大写)	到文件最后一行行首,G必须为大写
:$	到文件最后一行(行尾)
mG或mgg	到指定行,m为目标行数
/内容	查找指定内容
5) vi的文本查找功能
按键	功能
/字符串	查找指定字符串
n	寻找下一个
N	回到前一个
?	寻找上一个
/^字符串	查找以字符串开始的行
/字符串$	查找以字符串结尾的行
/a.b	查找字符串a任意字符b
6) vi的替换功能
按键	功能
r	替换当前光标字符
:r 文件名	在光标当前位置载入另一个文件
:s/p1/p2/g	将当前行中所有p1均用p2替代
:g/p1/s//p2/g	将文件中所有p1均用p2替代
:n1,n2s/p1/p2/g	将n1到n2行中所有p1均用p2替代
7) vi的set指令
按键	功能
:set ic	搜寻时忽略大小写
:set noic	搜寻时不忽略大小写
:set nu	显示行号
:set nonu	不显示行号

远程操作

SSH介绍

SSH为Secure Shell的缩写,由 IETF 的网络工作小组(Network Working Group)所制定;SSH 为建立在应用层和传输层基础上的安全协议。

SSH是目前较可靠,专为远程登录会话和其他网络服务提供安全性的协议。常用于远程登录,以及用户之间进行资料拷贝。

利用SSH协议可以有效防止远程管理过程中的信息泄露问题。SSH最初是 UNIX 系统上的一个程序,后来又迅速扩展到其他操作平台。SSH 在正确使用时可弥补网络中的漏洞。SSH 客户端适用于多种平台。几乎所有 UNIX 平台—包括 HP-UX、Linux、AIX、Solaris、Digital UNIX、Irix,以及其他平台,都可运行SSH。

使用SSH服务,需要安装相应的服务器和客户端。客户端和服务器的关系:如果,A机器想被B机器远程控制,那么,A机器需要安装SSH服务器,B机器需要安装SSH客户端。

远程登录

Linux平台相互远程

操作命令:ssh -l username hostip

参数	含义
-l	选项, 是字母“l”,不是数字“1”
username	被远程登录的用户名
hostip	被远程登录的ip地址

注意:远程登录的两台机器必须要能ping通(平通)。

首先,查看需要被远程机器的ip:
在这里插入图片描述
远程登录(这里是用户 wencong ( A 机器 ) 远程登录 edu ( B 机器 ) ), 可以不用sudo :
在这里插入图片描述
SSH 告知用户,这个主机不能识别,这时键入"yes",SSH 就会将相关信息,写入" ~/.ssh/know_hosts" 中,再次访问,就不会有这些信息了。然后输入完口令,就可以登录到主机了。

接着,提示输入登陆密码:
在这里插入图片描述
登陆成功:
在这里插入图片描述
在这里插入图片描述

Windows远程登录Linux(重要,一般也用这个就好了)

如果想在 Windows 平台下远程登录 Linux,这时候,Windows 需要安装 安装相应软件包。这里介绍是Xmanager。

Xmanager是一款小巧、便捷的浏览远端X窗口系统的工具。它包含Xshell、Xftp等软件:
在这里插入图片描述

  • Xshell:是一个Windows平台下的SSH、TELNET和RLOGIN终端软件。它使得用户能轻松和安全地在Windows平台上访问Unix/Linux 主机。
  • Xftp:是一个应用于 Windows 平台的 FTP 和 SFTP 文件传输程序。Xftp能安全地在Unix/Linux 和 Windows 平台之间传输文件。

配置Xshell,远程登录:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
Linux默认采用的编码格式是UTF-8,Windows默认采用的编码格式是ANSI(GB2312、GBK),所以需要设置一下相应编码:
在这里插入图片描述

远程传输文件(windows用xftp就好了,方便,不用敲命令敲来敲去)

Linux平台相互传输

SSH 提供了一些命令和shell用来登录远程服务器。在默认情况下,不允许用户拷贝文件,但还是提供了一个“scp”命令。

参数	含义
RemoteUserName	远程用户名
RemoteHostIp	远程ip
RemoteFile	远程文件,可带上路径
FileName	拷贝到本地后的名字,可带上路径,不带路径拷贝到当前目录

本地文件复制到远程:

scp FileName RemoteUserName@RemoteHostIp:RemoteFile
scp FileName RemoteHostIp:RemoteFolder
scp FileName RemoteHostIp:RemoteFile

本地目录复制到远程:

scp -r FolderName RemoteUserName@RemoteHostIp:RemoteFolder
scp -r FolderName RemoteHostIp:RemoteFolder

远程文件复制到本地:

scp RemoteUserName@RemoteHostIp:RemoteFile FileName
scp RemoteHostIp:RemoteFolder FileName
scp RemoteHostIp:RemoteFile FileName

远程目录复制到本地:

scp -r RemoteUserName@RemoteHostIp:RemoteFolder FolderName
scp -r RemoteHostIp:RemoteFolder FolderName

拷贝远程的文件:
在这里插入图片描述
在这里插入图片描述
拷贝远程的文件可以任意修改其名字:
在这里插入图片描述
拷贝远程的文件可以指定存放路径:
在这里插入图片描述

Windows和Linux相互传输文件

Xmanager自带的Xftp是一个应用于 Windows 平台的 FTP 和 SFTP 文件传输程序。Xftp能安全地在Unix/Linux 和 Windows 平台之间传输文件。
在这里插入图片描述
在这里插入图片描述

webserver环境搭建

webserver环境搭建

http.tar.gz是用C语言编程的一个简单版webserver。

1)把http.tar.gz拷贝到Linux环境中:

在这里插入图片描述

2)解压压缩包:

在这里插入图片描述

3)进入解压后的目录,终端敲make编译代码:

在这里插入图片描述

4)如果是RedHat环境,需要额外配置一下防火墙:

在这里插入图片描述
在这里插入图片描述

5)root用户启动或关闭web服务:

在这里插入图片描述

6)环境测试

a)必须root用户先启动web服务:
在这里插入图片描述
b)查看web服务器所在机器的ip:
在这里插入图片描述
c)打开能平同web服务器(192.168.31.143)机器的浏览器,网址输入192.168.31.143:
在这里插入图片描述

6.2 网页版HelloWorld

1)重新打开一个终端,进入web服务器所在目录:

在这里插入图片描述

2)通过vi新建hello.c文件,内容写如下代码:
#include <stdio.h>

int main()
{
	printf("hello world\n");

	return 0;
}
3)退出保存hello.c后,通过gcc编译代码,可执行程序的后缀名(扩展名)一定是cgi(这是web服务器需要这个的后缀,不是C标准):

在这里插入图片描述

  • gcc是编译命令,放最开始位置
  • -o参数后面一定是可执行程序名字
4)测试网页版helloworld,在浏览器输入:192.168.31.143/hello.cgi

在这里插入图片描述

5)显示中文乱码解决方法(了解)

Linux默认采用的编码格式是UTF-8,浏览器显示默认采用的编码格式是GBK,在浏览器中直接设置utf-8编码或者通过代码指定浏览器为utf-8编码。
a) 直接设置浏览器编码
在这里插入图片描述
b) 通过代码指定浏览器为utf-8编码,代码中加上头部元素信息:

<head>
<meta http - equiv = "content-type" content = "text/html;charset=utf-8">
< / head>

#include <stdio.h>

int main()
{
	printf("<head>");
	printf("<meta http-equiv=\"content-type\" content=\"text/html;charset=utf-8\">");
	printf("</head>");
	printf("<html>");
	printf("测试\n");
	printf("</html>");

	return 0;
}

热门文章

暂无图片
编程学习 ·

C语言二分查找详解

二分查找是一种知名度很高的查找算法&#xff0c;在对有序数列进行查找时效率远高于传统的顺序查找。 下面这张动图对比了二者的效率差距。 二分查找的基本思想就是通过把目标数和当前数列的中间数进行比较&#xff0c;从而确定目标数是在中间数的左边还是右边&#xff0c;将查…
暂无图片
编程学习 ·

GMX 命令分类列表

建模和计算操作命令&#xff1a; 1.1 . 创建拓扑与坐标文件 gmx editconf - 编辑模拟盒子以及写入子组(subgroups) gmx protonate - 结构质子化 gmx x2top - 根据坐标生成原始拓扑文件 gmx solvate - 体系溶剂化 gmx insert-molecules - 将分子插入已有空位 gmx genconf - 增加…
暂无图片
编程学习 ·

一文高效回顾研究生课程《数值分析》重点

数值分析这门课的本质就是用离散的已知点去估计整体&#xff0c;就是由黑盒子产生的结果去估计这个黑盒子。在数学里这个黑盒子就是一个函数嘛&#xff0c;这门课会介绍许多方法去利用离散点最大化地逼近这个函数&#xff0c;甚至它的导数、积分&#xff0c;甚至微分方程的解。…
暂无图片
编程学习 ·

在职阿里5年,一个28岁女软测工程师的心声

简单的先说一下&#xff0c;坐标杭州&#xff0c;14届本科毕业&#xff0c;算上年前在阿里巴巴的面试&#xff0c;一共有面试了有6家公司&#xff08;因为不想请假&#xff0c;因此只是每个晚上去其他公司面试&#xff0c;所以面试的公司比较少&#xff09; ​ 编辑切换为居中…
暂无图片
编程学习 ·

字符串左旋c语言

目录 题目&#xff1a; 解题思路&#xff1a; 第一步&#xff1a; 第二步&#xff1a; 第三步&#xff1a; 总代码&#xff1a; 题目&#xff1a; 实现一个函数&#xff0c;可以左旋字符串中的k个字符。 例如&#xff1a; ABCD左旋一个字符得到BCDA ABCD左旋两个字符…
暂无图片
编程学习 ·

设计模式--观察者模式笔记

模式的定义与特点 观察者&#xff08;Observer&#xff09;模式的定义&#xff1a;指多个对象间存在一对多的依赖关系&#xff0c;当一个对象的状态发生改变时&#xff0c;所有依赖于它的对象都得到通知并被自动更新。这种模式有时又称作发布-订阅模式、模型-视图模式&#xf…
暂无图片
编程学习 ·

睡觉突然身体动不了,什么是睡眠痽痪症

很多朋友可能有这样的体验&#xff0c;睡觉过程中突然意识清醒&#xff0c;身体却动弹不了。这时候感觉非常恐怖&#xff0c;希望旁边有一个人推自己一下。阳光以前也经常会碰到这样的情况&#xff0c;一年有一百多次&#xff0c;那时候很害怕晚上到来&#xff0c;睡觉了就会出…
暂无图片
编程学习 ·

深入理解C++智能指针——浅析MSVC源码

文章目录unique_ptrshared_ptr 与 weak_ptrstd::bad_weak_ptr 异常std::enable_shared_from_thisunique_ptr unique_ptr 是一个只移型别&#xff08;move-only type&#xff0c;只移型别还有std::mutex等&#xff09;。 结合一下工厂模式&#xff0c;看看其基本用法&#xff…
暂无图片
编程学习 ·

@TableField(exist = false)

TableField(exist false) //申明此字段不在数据库存在&#xff0c;但代码中需要用到它&#xff0c;通知Mybatis-plus在做写库操作是忽略它。,.
暂无图片
编程学习 ·

Java Web day15

第十二章文件上传和下载 一、如何实现文件上传 要实现Web开发中的文件上传功能&#xff0c;通常需要完成两步操作&#xff1a;一.是在Web页面中添加上传输入项&#xff1b;二是在Servlet中读取上传文件的数据&#xff0c;并保存到本地硬盘中。 需要使用一个Apache组织提供一个…
暂无图片
编程学习 ·

【51nod 2478】【单调栈】【前缀和】小b接水

小b接水题目解题思路Code51nod 2478 小b接水 题目 输入样例 12 0 1 0 2 1 0 1 3 2 1 2 1输出样例 6解题思路 可以发现最后能拦住水的都是向两边递减高度&#xff08;&#xff1f;&#xff09; 不管两个高积木之间的的积木是怎样乱七八糟的高度&#xff0c;最后能用来装水的…
暂无图片
编程学习 ·

花了大半天写了一个UVC扩展单元调试工具

基于DIRECTSHOW 实现的&#xff0c;用的是MFC VS2019. 详见&#xff1a;http://www.usbzh.com/article/detail-761.html 获取方法 加QQ群:952873936&#xff0c;然后在群文件\USB调试工具&测试软件\UVCXU-V1.0(UVC扩展单元调试工具-USB中文网官方版).exe USB中文网 USB中文…
暂无图片
编程学习 ·

贪心(一):区间问题、Huffman树

区间问题 例题一&#xff1a;区间选点 给定 N 个闭区间 [ai,bi]请你在数轴上选择尽量少的点&#xff0c;使得每个区间内至少包含一个选出的点。 输出选择的点的最小数量。 位于区间端点上的点也算作区间内。 输入格式 第一行包含整数 N&#xff0c;表示区间数。 接下来 …
暂无图片
编程学习 ·

C语言练习实例——费氏数列

目录 题目 解法 输出结果 题目 Fibonacci为1200年代的欧洲数学家&#xff0c;在他的着作中曾经提到&#xff1a;「若有一只免子每个月生一只小免子&#xff0c;一个月后小免子也开始生产。起初只有一只免子&#xff0c;一个月后就有两只免子&#xff0c;二个月后有三只免子…
暂无图片
编程学习 ·

Android开发(2): Android 资源

个人笔记整理 Android 资源 Android中的资源&#xff0c;一般分为两类&#xff1a; 系统内置资源&#xff1a;Android SDK中所提供的已经定义好的资源&#xff0c;用户可以直接拿来使用。 用户自定义资源&#xff1a;用户自己定义或引入的&#xff0c;只适用于当前应用的资源…
暂无图片
编程学习 ·

零基础如何在短时间内拿到算法offer

​算法工程师是利用算法处理事物的职业 算法&#xff08;Algorithm&#xff09;是一系列解决问题的清晰指令&#xff0c;也就是说&#xff0c;能够对一定规范的输入&#xff0c;在有限时间内获得所要求的输出。 如果一个算法有缺陷&#xff0c;或不适合于某个问题&#xff0c;执…
暂无图片
编程学习 ·

人工智能:知识图谱实战总结

人工智能python&#xff0c;NLP&#xff0c;知识图谱&#xff0c;机器学习&#xff0c;深度学习人工智能&#xff1a;知识图谱实战前言一、实体建模工具Protegepython&#xff0c;NLP&#xff0c;知识图谱&#xff0c;机器学习&#xff0c;深度学习 人工智能&#xff1a;知识图…
暂无图片
编程学习 ·

【无标题】

这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题&#xff0c;有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注…