day10-程序员宅基地

技术标签: 编辑器  Powered by 金山文档  linux  vim  

linux学习(续)

1.基本命令(续)

1.1创建文件

1. touch 文件的名字

2. vi 文件的名字(创建并打开文件)(保存后退出)

3. vim 文件的名字(创建并打开文件)

vi与vim的区别:

vi打开一个文件是没有任何颜色的

vim打开一个文件有颜色标识的

而centOS7不自带vim命令,需要使用yum进行通过网络下载yum install vim

4. mkdir -p....(递归创建)

1.2 编辑文件

a. vim或者vi打开一个文件

vim ./a1.txt(./代表在当前目录下)

b. 按下i进入编辑模式,编辑好数据后,一定要记得切换回英文输入法

c. 按下esc退出编辑模式

d. : wq(保存退出)/q!(不保存退出)

可能会遇到的问题:习惯了使用ctrl+s保存导致的问题

删除交换文件:rm -rf .a1.txt.swp

1.3查看文件内容(不打开文件查看内容) cat 文件的名字

1.4删除

rm -rf 要删除的文件/文件夹 递归强制删除(一定要注意,后面文件或者文件夹的路径)

强制删除 rm -f 文件名(删不了文件夹)

rm -r ...(可删除文件夹)

rm -rf..(全部删除,短时间内可恢复,拍照)

sudo rm -rf... (以超级管理员身份运行....)

1.5复制/拷贝文件

cp 要复制文件的路径 目标路径

a. 复制一个文件不改名

举例:cp ./bigdata22/a1.txt ./bigdata22test/

b. 复制一个文件并改名

举例:cp ./bigdata22/a1.txt ./bigdata22test/aaa.txt

1.6剪切/移动

mv 要移动文件的路径 目标路径

a. 移动文件不改名

mv ./b1.txt ../bigdata22test/

b.移动文件并改名

mv ./b1.txt ../bigdata22/bbb.txt

面试题:如何在linux中对文件进行改名(回答以上两种做法,一个是复制一个是粘贴,再说出两者区别)

1.7文件标识

蓝绿色前缀为l:表示软链接,类似快捷键

蓝色前缀为d:表示文件夹

绿色表示执行的命令

红色表示压缩包

文件查看常用命令

pwd列出当前目录路径

ls或者dir列出当前目录下的文件

ll(ls -l缩写)列出当前目录下的文件(带文件信息)

ls -a列出当前目录下的所有文件(包括隐藏文件)

stat 文件名查看文件信息

ls --help查看ls用法

1.8涉及到路径的输入,基本都可以使用tab键进行自动补全

1.9修改yum源:查看修改yum源的文件

补充:

yum clean all

yum makecache(与网络有关,不行多试几次,保证三台虚拟机都成功)

1、输入以下命令进入yum源(软件仓库)的配置文件所在的目录

cd /etc/yum.repos.d/

无阿里的原镜像,需要下载

2、把默认的yum源(软件仓库)的配置文件改名,即备份默认的yum源

mv CentOS-Base.repo CentOS-Base.repo.bak

3、使用wget命令下载阿里云的yum源配置文件

wget http://mirrors.aliyun.com/repo/Centos-7.repo

centos7 wget不生效,用xftp传输

下载wget:

4、 把阿里云的yum源配置文件名改为CentOS-Base.repo

mv Centos-7.repo CentOS-Base.repo

5、清理缓存

yum clean all

6、生成缓存

yum makecache

7、使用以下命令查看yum源是否更改成功

yum repolist

最后通过yum install vim -y 下载vim:

1.10远程复制

a. 将要互相传文件的虚拟机进行开启

b. 使用scp命令进行复制

scp 本机要被复制的文件路径 目标主机的用户名@目标主机的ip地址:复制的目的地路径

出现的几个思考:(注意,输入数字的时候,尽量使用最上面一排的数字,不要使用右边小键盘)

1.命令过于复杂,如果在我们知道目标主机名的时候,能不能直接通过主机名的方式进行复制呢?可以 只要告诉master,node1是什么,node2是什么

解决方案:配置hosts映射,/etc/hosts

免密过程:

1)在根目录下的etc目录下输入vim hosts

2)注释掉这两行,并添加内容

3)直接用node2代替Ip地址

4)将master/etc目录下的hosts复制给node1,node2

命令:scp /etc/hosts node1:/etc/hosts

#127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4

#::1 localhost localhost.localdomain localhost6 localhost6.localdomain6

192.168.208.100master

192.168.208.110node1

192.168.208.120node2

2.在复制的时候,需要输入两个东西:

a. yes

b. 目标主机的密码

思考:能不能不输入就直接拷贝过去呢?可以要做一个免密的过程

解决方案:设置免密(三者都要)

ssh-keygen -t rsa 然后三次回车

ssh-copy-id -i 主机名(三个都要弄)

3.其它复制

当目标路径与当前复制文件的路径一致的时候,使用`pwd`引入路径进行复制,

举例:scp ./a1.txt node1:`pwd`

如果要复制一个文件夹,请使用scp -r ...命令

1.11内容查看

正序和反序输出cat \ tac:

cat显示文本内容,类似windows中的type(顺序输出)

tac显示文本内容(cat的倒序输出)

cat file1 file2 > file3文件合并

cat -b显示行号输出

cat -A或者cat -vETv使用^和M符号显示除了Tab外的;

E在每行结束处显示$;

T将跳格字符显示为^I

分屏显示 more

用一次显示一屏,没有显示完时最后一行显示进度。回车显示下一行,按b显示上一页,空格显示下一页,q退出。

more /etc/profile

1.12压缩,解压

常见用法

tar -cvf 仅打包不压缩

tar -zcvf 打包及压缩(gzip方式)

tar -zxvf解压(gzip包)

tar -jcvf打包及压缩(bzip2方式)

tar -jxvf解压(bzip2方式)

tar -tvf 查看压缩包内容(需要根据不同的压缩算法查看)

1.13不打开文件追加一行数据 echo >>:追加 >:覆盖

1.14文件监控命令:tail

tail -f 文件路径

删除g1后再创建g1无法监控,因为不是同一个g1(ctrl+c退出)

tail -F 文件路径

删除再创建后文件名一样仍可继续监控

1.15查看内存使用情况 top

ctrl+z退出

1.16查看磁盘使用情况df -h

1.17文件大小查看

1.18其它功能

2.用户

2.1用户组管理

2.1.1 用户组添加

命令:groupadd

作用:添加组

语法:# groupadd [参数选项 选项值] 用户组名

选项:-g:设置用户组ID 数字,如果不指定,则默认从1000 之后递增(1-999系统组)

用法一:groupadd 组名
示例代码:
#groupadd shujia
含义:新建一个组叫做shujia

提示:linux下我们执行完命令,有时候会没有任何提示,直接回到#提示符,这种状态表明,命令执行成功,没有报错。==“没有消息就是最好的消息”==

存储用户组信息的文件:/etc/group 使用cat命令,查看/etc/group文件

/etc/group文件结构:

特别说明:

1) 密码位x代表占位符,用户组可以设置密码,但是大部分情况下不需要设置

2)组内用户名:表示附加组是该组的用户名称。

2.1.2 用户组修改

命令:groupmod

语法:# groupmod [选项 选项值] 用户组名

选项:-g :gid缩写,设置一个自定义的用户组ID 数字

 -n  :name缩写,设置新的用户组的名称

示例代码:修改shujia用户组,将组ID改成1100,将名称改为zwbshujia

用法一:groupmod -g 新的组ID -n 新的组名字 原有组名字
示例代码:
#groupmod -g 1100 -n wyhshujia shujia
含义:将shujia组的组ID改成1100,组名改成wyhshujia
2.1.3 用户组删除

命令:groupdel

语法:# groupdel 用户组名

案例:删除wyhshujia组

用法一:groupdel 组名
示例代码:
#groupdel wyhshujia
含义:将wyhshujia组删除

2.2用户管理

用户的管理涉及用户的添加、删除和修改。

与用户相关的文件:/etc/passwd

2.2.1 useradd添加用户

命令:useradd

作用:添加用户

语法:# useradd [选项 选项的值] … 用户名

选项:-g:表示指定用户的用户主(主要)组,选项值可以是用户组ID,也可以是组名

 -G:表示指定用户的用户附加(额外)组,选项值可以是用户组ID,也可以是组名

   -u :uid,用户的id(用户的标识符),系统默认会从500 /或1000之后按顺序分配uid,如果不想使用系统分配的,可以通过该选项自定义【类似于腾讯QQ 的自选靓号情况】

   -c:comment,添加注释(选择是否添加)

   -s:指定用户登入后所使用的shell 解释器,默认/bin/bash【专门的接待员】,如果不想让其登录,则可以设置为/sbin/nologin   (重要)

   -d:指定用户登入时的启始目录(家目录位置)

       -n:取消建立以用户名称为名的群组(了解)

    当我新建一个账户叫user01, 同时,系统会自动建立一个组也叫user01
用法一:useradd 用户名
示例代码:
#useradd wyh
含义:创建用户wyh,不带任何选项。

注意:不用任何参数,创建用户,系统会默认执行以下操作:

1)在 /etc/passwd 文件中创建一行关于zw用户的数据

2)在 /etc/shadow 文件中新增了一行关于zw密码的数据

3)在 /etc/group 文件中创建一行与用户名相同的组,例如zw

4)在 /etc/gshadow 文件中新增一行与新增群组相关的密码信息,例如zw

5)自动创建用户的家目录,默认在/home下,与用户名同名

验证是否成功:

1)使用tail文件查看/etc/passwd文件

2)使用tail文件查看/etc/group文件

3)验证是否存在家目录(在Centos 下创建好用户之后随之产生一个同名家目录)

2.2.2 etc/passwd存储用户信息的文件

使用vim命令打开/etc/passwd文件

# wyh:x:1000:1000::/home/wyh:/bin/bash
root : x : 0 : 0 : root : /root : /bin/bash
用户名 : 密码 : 用户ID : 用户组ID : 注释 : 家目录 : 解释器shell

用户名:登录linux时使用的用户名

密码:此密码位置一般情况都是"x",表示密码的占位,真实密码存储在/etc/shadow

用户ID:用户的识别符,每个用户都有唯一的UID【-u】

用户组ID:该用户所属的主组ID;【-g】

注释:解释该用户是做什么用的;【-c】

家目录:用户登录进入系统之后默认的位置;【-d】

解释器shell:等待用户进入系统之后,用户输入指令之后,该解释器会收集用户输入的指令,转换成机器语言,传递给内核处理;如果解释器是==/bin/bash 表示用户可以登录到系统==,==/sbin/nologin表示该用户不能登录到系统==【-s】

下面我们来看一下对于useradd参数的使用

企业场景1:

公司新员工lisi,属于shujia部门,用户ID1200,不允许登录系统
思路:
    创建用户lisi,默认lisi属于自己同名的主组,让lisi 属于附加组shujia,用户ID 1200,注释为"数加工程师lisi",解释器为/sbin/nologin
用法二:useradd -G 附加组名 -u 用户ID -s /sbin/nologin -c "shuser lisi" 用户名

useradd -G shujia -u 1200 -s /sbin/nologin -c "数加工程师lisi" lisi
示例代码:
[root@master xiaohu]# useradd -G wyhshujia -u 1200 -s /sbin/nologin -c "数加工程师lisi" lisi
useradd:“wyhshujia”组不存在
[root@master xiaohu]# groupadd wyhshujia
[root@master xiaohu]# useradd -G wyhshujia -u 1200 -s /sbin/nologin -c "数加工程师lisi" lisi

含义:创建用户lisi,不带任何选项。
shujia行的含义:在shujia的组里(组id 是1002)有一个组内用户lisi(lisi 的附加组就是1002,附加组的名字是shujia)。
如果需要为一个用户指定多个附加组,只需要将多个附加组的id 通过英文逗号“,”分割即可。
例如-G 500,501,502

① 主组只能有1 个(类似于亲生父母只有一对),附加组可以多个,也可以没有附加组(类似于认干爹干妈,可以有也可以没有,也可以有多个)
② 主组必须有
③ 后期将权限管理的时候,关于文档的属组指的是主组(了解)
2.2.3 id查看用户信息

命令:id

作用:查看一个用户的一些基本信息(包含用户id,用户组id,附加组id…),该指令如果不指定用户则默认当前用户。

语法1:# id 默认显示当前执行该命令的用户的基本信息

语法2:# id 用户名, 显示指定用户的基本信息

如何验证以上信息是否正确?

==答:验证用户信息:通过文件/etc/passwd,验证用户组信息:通过文件/etc/group==

2.2.4 usermod修改用户

命令:usermod(user modify)

语法:# usermod [选项 选项的值] … 用户名

作用:修改用户的各种属性

选项:-g:表示指定用户的用户主组,选项的值可以是用户组的ID,也可以是组名

-G:表示指定用户的用户附加组,选项的值可以是用户组的ID,也可以是组名

   -u:uid,用户的id(用户的标识符),系统默认会从500 之后按顺序分配uid,如果不想使用系统分配的,可以通过该选项自定义【类似于腾讯QQ 的自选靓号情况】

    -L:锁定用户,锁定后用户无法登陆系统lock

        -U:解锁用户unlock

    -c<备注>:修改用户帐号的备注文字

    -d<登入目录>:修改用户登入时的目录

    -s<shell>:修改用户登入后所使用的shell

企业场景2:

公司员工wangwu,属于bigdata22部门,现在要休产假,产假期间,暂时停止她登陆电脑的权限,同时原来属于shujia部门的员工lisi,负责wangwu的工作,所以,需要把lisi加入到bigdata22的组,同时,修改lisi的账户注释为“shujia bigdata22 user”

    对于wangwu用户,我们要执行锁定和解锁操作

    对于lisi用户,我们要将lisi加入到bigdata的附加组,同时修改lisi账户的注释
[root@master xiaohu]# usermod -L wangwu
usermod:用户“wangwu”不存在
[root@master xiaohu]# useradd -G bigdata -u 1300 -c "大数据开发" wangwu
useradd:“bigdata”组不存在
[root@master xiaohu]# groupadd bigdata
[root@master xiaohu]# useradd -G bigdata -u 1300 -c "大数据开发" wangwu
[root@master xiaohu]# usermod -L wangwu

用法一:usermod -L 王五账户名
示例代码:
#usermod -L wangwu
含义:将王五账户暂时锁定

用法二:usermod -U 王五账户名
示例代码:
#usermod -U wangwu
含义:将王五账户解锁
用法三:usermod -G 组名 -c “注释内容” 李四用户账号
示例代码:
#usermod -G bigdata22 -c "shujia bigdata22 user" lisi
含义:将李四的账户加入bigdata组,并修改注释内容为shhr user
2.2.5 passwd修改用户密码
 Linux ==不允许没有密码的用户登录到系统==,因此前面创建的用户目前都处于锁定状态,需要设置密码之后才能登录计算机。

命令:passwd

语法:# passwd 用户名 【如果不指定用户名则修改自己的密码】

作用:修改用户密码 企业场景3:

王五产假休完回到公司上班,需要将王五的账户解锁,在使用usermod -U解锁时,我们看到一个错误信息如下

usermod: unlocking the user's password would result in a passwordless account.

解锁这个账户,将导致一个没有密码的账户,因为之前王五的账户没有密码。这时候,我们就需要使用passwd命令,给王五的账户设置一个密码

用法一:passwd 账户名
示例代码:
#passwd wangwu
含义:为wangwu账户设置密码
注意:
    当密码过于简单时,系统会提示这是一个不好的密码,因为它太简单了,但是我们仍然可以坚持使用这个密码。
    在我们输入密码时,屏幕不会有任何显示。
    密码需要输入两次,请确保两次输入的密码是一样的。

2.2.6 认识/etc/shadow文件
由于 /etc/passwd文件允许所有用户读取,易导致用户密码泄露,因此 Linux 系统将用户的密码信息从 /etc/passwd 文件中分离出来,并单独放到了shadow文件中。

/etc/shadow 文件只有 root 用户拥有读权限,其他用户没有任何权限,这样就保证了用户密码的安全性。

与用户密码相关的文件:/etc/shadow

为用户设置密码之后,会自动在/etc/shadow文件中进行体现,使用vim编辑器打开

第一列为用户名,例如zhangsan

后面是加密后的密码,就是$开头的字符串

如果显示为!!,则表示这个用户==没有==设置密码。

由以上截图所知,wyh,lisi是没有设置密码的。wangwu我们刚刚设置了密码,所以显示为一个加密的字符创

任务:新建一个账户叫shujiaxiaoli

新建第二个账户叫shujiaxiaoli

    给shujiaxiaoli账户设置一个密码

    进入shadow文件,观察两个账户的区别
2.2.7 su切换用户
在设置用户密码之后就可以使用此账号进行登录系统了,如果系统处于已登录状态,则可以使用su命令进行切换用户。

    为了系统安全,企业中通常不会允许root用户直接登录计算机,但是工作需要,我们又需要使用root权限,这时候,我们就可以先使用一个普通用户登录计算机,再通过su命令切换到root权限。

命令:su

语法:# su [-] 账号

作用:切换用户

用法一:su 用户名
示例代码:
#su root
含义:切换到root权限

注意:
a. 从root 往普通用户切换不需要密码,但是反之则需要root 密码;
b. 切换用户之后前后的工作路径是不变的,添加了选项[-]会自动切换到用户的家;
c. 普通用户没有办法访问root 用户家目录,但是反之则可以;
2.2.8 userdel删除用户

命令:userdel

语法:# userdel 选项 用户名

作用:删除账户及其对应家目录

选项:-r:表示删除用户的同时,删除其家目录/home下的对应文件夹

2.2.9 权限

r:读     4
w:写     2
x:执行   1

u:当前用户
g:当前组
o:其他
a:所有
chgrp:修改用户组
    格式:
        chgrp [选项] [组名] [文件或目录]
    选项:
        -R:表达迭代修改
    注意:文件或目录的所有用户或所有组,都是以编号来查询所有用户或所有组
        如果不存在就显示编号,存在显示名称

chown:修改所属用户
    格式:
        chown [选项] [组名] [文件或目录]
    选项:
        -R:表达迭代修改

sudo:越权执行
    格式:
        sudo 命令
    注意:sudo实际上去借root权限执行命令(root对普通用户分配了权限)

sudo -l:查看当前权限

visudo:修改配置文件进行权限分配(文件所在位置/etc/sudoers)
    例如:普通用户拥有root所有权限
        用户名 ALL=(ALL) ALL
        用户名 ALL=(root) ALL
    例如:普通用户只能执行一个命令
        用户名 ALL=(root)/bin/rm

可以同过vim /etc/sudoers修改权限分配

Linux常见符号

grep:筛选
    格式:
        grep 筛选条件
>>:追加,把命令1的结果写入到命令2
    格式:
        命令1 >> 命令2 
    例如:cat profile >> test.txt
>:覆盖
    格式:
        命令1 > 命令2 
    例如:cat profile > test.txt
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/m0_59550403/article/details/128634991

智能推荐

VRay Next for SketchUp 新功能实用技巧_vary for sketchup 历史对比不能使用-程序员宅基地

文章浏览阅读1.8k次。6分钟,掌握VRay Next for SketchUp新功能实用技巧!_vary for sketchup 历史对比不能使用

intelliSense: 未定义标识符 "cout"小记_1intellisense: 未定义标识符 "cout"d:\net work\project1\p-程序员宅基地

文章浏览阅读1.7w次,点赞5次,收藏5次。2 IntelliSense: 未定义标识符 "cout"这个错误,是在测试书上的例子时出现的,都是Cpp文件,都用的头,有的报错了,有的没有。后来发现没报错的头部是这样的:#include #include "stdafx.h"using namespace std;报错的cpp文件只有头部:#include 在出现2 IntelliSense:_1intellisense: 未定义标识符 "cout"d:\net work\project1\project1\yyy.cpp9

mybatis 中使用postgreSQL的UUID 解决方法_mybatis-plus insert方法插入postgres数据库 uuid-程序员宅基地

文章浏览阅读5.6k次。网上的解决方法是在java实体类中使用string类型,读取的时候转换成字符串,插入的时候转uuid。查询的时候这样子转换&lt;id column="application_id" property="applicationId" javaType="java.lang.String" jdbcType="VARCHAR" /&gt;插入的时候 &lt;insert id="insert&qu_mybatis-plus insert方法插入postgres数据库 uuid

bigdata_kafka与streaming_idea的big data tools插件连接kafka-程序员宅基地

文章浏览阅读3.6k次。一丶Kafka应用 鉴于kafka在实际使用时,绝大多数应用场景均为Producer和Consumer的API配合使用,故在此只介绍这两种API操作方法,其它的Connector和Streams还有admin可以视自身情况自行学习。 1.java版 实现步骤 创建maven项目(done) 加入kafka依赖 producer push message实现 consumerpull message实现 效..._idea的big data tools插件连接kafka

PHP+Mysql 实现留言板_html+php+mysql 实现留言板-程序员宅基地

文章浏览阅读911次。最近看了下PHP基础语法,就想利用这些基本东西实现留言板,也是对基础知识的一个巩固。什么是留言板?一种可以用来记录,展示文字信息的载体。现切入正题,说说本次留言板是怎么实现!首先用户提交留言后,相关内容存入服务器,当他想看的时候后台再把所有留言读出来,最后显示在浏览器上,用户就可以看到留言了。这其中后台需要便于读写数据的一个工具,我选择MySQL数据库来帮助_html+php+mysql 实现留言板

01.初识数据库_select user,host,password from-程序员宅基地

文章浏览阅读339次。01.初识数据库1. 数据库管理软件的由来基于我们之前所学,数据要想永久保存,都是保存于文件中,毫无疑问,一个文件仅仅只能存在于某一台机器上。如果我们暂且忽略直接基于文件来存取数据的效率问题,并且假设程序所有的组件都运行在一台机器上,那么文件存取数据并没有问题。很不幸,这显然不现实,上述假设存在以下几个问题1.1. 程序所有的组件就不可能运行在一台机器上因为这天台机器一旦挂掉则意味着整个软件的崩溃,并且程序的执行效率依赖于继承它的硬件,而一台机器的性能垂直进行扩展是有限的。于是我们只能通过水平_select user,host,password from

随便推点

JVM总结_jmap -histo pid 查出来的的类名称b、c、i是什么-程序员宅基地

文章浏览阅读1k次。jvmjava内存区域程序计数器Program Counter Register一块很小的内存空间,它可以看作是当前线程所执行的字节码的行号指示器,每个线程都有一个独立的程序计数器tips:如果正在执行一个Java方法,这个计数器的值为正在执行的虚拟机字节码指令的地址,如果正在执行的是Native方法,这个计数器的值为空。本地方法栈和虚拟机栈发挥的作用相同,虚拟机运..._jmap -histo pid 查出来的的类名称b、c、i是什么

pip安装第三方模块老是报错?多种常见错误,进来看看解决方案!_error_invalid_pip-程序员宅基地

文章浏览阅读2.3w次,点赞53次,收藏131次。pyinstaller是个非常好用的模块,可以将python源代码文件打包为exe可执行文件,免于其他用户安装python环境,然而,这个模块需要用户自行下载,而且是在cmd下使用pip,通常使用pip install pyinstaller,在这个过程中会遇到各种各样的异常和错误,所以我准备对这个命令进行添加和修缮,保证pyinstaller顺利安装。首先在这里给大家列举几种常见错误和解决方案:..._error_invalid_pip

使用C语言客户端(hiredis)连接Redis_c语言连接hredis-程序员宅基地

文章浏览阅读1.8k次,点赞2次,收藏9次。关键词:hiredis, cRedis, redis clients, redis客户端, C客户端, 华为云分布式缓存服务hiredis是一个非常全面的C语言版redis接口库,支持所有命令、管道与脚本。华为云分布式缓存服务Redis版支持hiredis客户端连接。使用C语言客户端(hiredis)连接Redis,需要先安装编译环境以及hiredis,以CentOS为例,介绍C客户端环境..._c语言连接hredis

文件包含漏洞--phpMyAdmin 4.8.1_phpmyadmin 4.8.1文件包含漏洞-程序员宅基地

文章浏览阅读790次,点赞14次,收藏20次。需要同时满足条件(参数target不为空、是字符串、不以index开头(此时如果需要加载index文件去绕过,可尝试使用xxx/../index.php)、不在数组target_blacklist中(此处也可以用xxx/../index.php的方式绕过 )、在checkPageValidity()函数中返回真)才能得到参数。因为此靶场可以对数据库直接操作,我们可以直接查找数据库文件(/MySql/data/数据库名/表名.frm),并且直接新建表,将字段名命名为一句话木马,从而将一句话木马包含进去。_phpmyadmin 4.8.1文件包含漏洞

centos 安装 openocd_centos安装open3d-程序员宅基地

文章浏览阅读563次。下载解压配置之前先安装跟libusb有关的库接着./configuremakemake install默认安装位置在 /usr/local/bin下面,所有PATH不用设置_centos安装open3d

SqlHelper:_sqlcommand command = createcommand(conn, "addcusto-程序员宅基地

文章浏览阅读404次。//---- SqlHelper- -主角要出场了- -怎么说呢下面的这个我看还不错哈 CreateCommand创建命令#region CreateCommand创建命令 /**//// /// 创建一个由存储过程提供的命令 /// /// /// e.g.: /// SqlCommand co_sqlcommand command = createcommand(conn, "addcustomer", "customerid", "customername");

推荐文章

热门文章

相关标签