Openldap导入数据(一)

2023-11-09

在安装完openldap之后,默认ldap中是没有数据的,需要管理员进行添加,当然添加的方法也不止一种,这里先介绍第一种方法:从本地系统添加用户到ldap中。

[root@ldapsrv01 ~]# ldapsearch -x -b "dc=contoso,dc=com"
# extended LDIF
#
# LDAPv3
# base <dc=contoso,dc=com> with scope subtree
# filter: (objectclass=*)
# requesting: ALL
#
# search result
search: 2
result: 32 No such object
# numResponses: 1

这是安装完openldap之后对ldap进行的数据查询的结果。

步骤一:安装migrationtools软件包

从本地系统添加用户到ldap的方法,其实就是先添加用户到本地操作系统中,然后通过pl脚本将这些用户转换为ldap能够识别的ldif文件格式,最后通过ldapadd命令导入到ldap中,从而完成ldap数据的导入,要使用pl脚本将本地用户信息转换为ldif文件格式,首先需要安装一个软件,名字为migrationtools。

yum install migrationtools -y
# 直接yum安装即可
[root@ldapsrv01 ~]# rpm -ql migrationtools
/usr/share/doc/migrationtools-47
/usr/share/doc/migrationtools-47/README
/usr/share/doc/migrationtools-47/migration-tools.txt
/usr/share/migrationtools
/usr/share/migrationtools/migrate_aliases.pl
/usr/share/migrationtools/migrate_all_netinfo_offline.sh
/usr/share/migrationtools/migrate_all_netinfo_online.sh
/usr/share/migrationtools/migrate_all_nis_offline.sh
/usr/share/migrationtools/migrate_all_nis_online.sh
/usr/share/migrationtools/migrate_all_nisplus_offline.sh
/usr/share/migrationtools/migrate_all_nisplus_online.sh
/usr/share/migrationtools/migrate_all_offline.sh
/usr/share/migrationtools/migrate_all_online.sh
/usr/share/migrationtools/migrate_automount.pl
/usr/share/migrationtools/migrate_base.pl
/usr/share/migrationtools/migrate_common.ph
/usr/share/migrationtools/migrate_fstab.pl
/usr/share/migrationtools/migrate_group.pl
/usr/share/migrationtools/migrate_hosts.pl
/usr/share/migrationtools/migrate_netgroup.pl
/usr/share/migrationtools/migrate_netgroup_byhost.pl
/usr/share/migrationtools/migrate_netgroup_byuser.pl
/usr/share/migrationtools/migrate_networks.pl
/usr/share/migrationtools/migrate_passwd.pl
/usr/share/migrationtools/migrate_profile.pl
/usr/share/migrationtools/migrate_protocols.pl
/usr/share/migrationtools/migrate_rpc.pl
/usr/share/migrationtools/migrate_services.pl
/usr/share/migrationtools/migrate_slapd_conf.pl


使用rpm -ql命令可以看到,该软件安装后在/usr/share/migrationtools/目录下生成了很多脚本文件,有shell也有perl,而我们就是使用其中的perl脚本完成ldap文件的生成。

步骤二:修改migrationtools配置文件

cp /usr/share/migrationtools/migrate_common.ph /usr/share/migrationtools/migrate_common.ph.bak
#备份一下脚本
sed -i 's/padl.com/contoso.com/g' /usr/share/migrationtools/migrate_common.ph
#修改默认的域名padl.com为我的域名,这里为contoso.com,所以只把padl替换为contoso
sed -i 's/dc=padl,dc=com/dc=contoso,dc=com/g' /usr/share/migrationtools/migrate_common.ph
#还是域名信息的修改

修改之后,要确保下面两条的值为服务器真实的域名,如下:

$DEFAULT_MAIL_DOMAIN = "contoso.com";
$DEFAULT_BASE = "dc=contoso,dc=com";

步骤三:生成base.ldif文件并导入到ldap中

然后首先生成base.ldif文件

/usr/share/migrationtools/migrate_base.pl > base.ldif
[root@ldapsrv01 ~]# cat base.ldif
dn: dc=contoso,dc=com
dc: contoso
objectClass: top
objectClass: domain
dn: ou=Hosts,dc=contoso,dc=com
ou: Hosts
objectClass: top
objectClass: organizationalUnit
dn: ou=Rpc,dc=contoso,dc=com
ou: Rpc
objectClass: top
objectClass: organizationalUnit
dn: ou=Services,dc=contoso,dc=com
ou: Services
objectClass: top
objectClass: organizationalUnit
dn: nisMapName=netgroup.byuser,dc=contoso,dc=com
nismapname: netgroup.byuser
objectClass: top
objectClass: nisMap
dn: ou=Mounts,dc=contoso,dc=com
ou: Mounts
objectClass: top
objectClass: organizationalUnit
dn: ou=Networks,dc=contoso,dc=com
ou: Networks
objectClass: top
objectClass: organizationalUnit
dn: ou=People,dc=contoso,dc=com
ou: People
objectClass: top
objectClass: organizationalUnit
dn: ou=Group,dc=contoso,dc=com
ou: Group
objectClass: top
objectClass: organizationalUnit
dn: ou=Netgroup,dc=contoso,dc=com
ou: Netgroup
objectClass: top
objectClass: organizationalUnit
dn: ou=Protocols,dc=contoso,dc=com
ou: Protocols
objectClass: top
objectClass: organizationalUnit
dn: ou=Aliases,dc=contoso,dc=com
ou: Aliases
objectClass: top
objectClass: organizationalUnit
dn: nisMapName=netgroup.byhost,dc=contoso,dc=com
nismapname: netgroup.byhost
objectClass: top
objectClass: nisMap

但是这其中有很多信息都不是我所需要的,所以可以删除不需要的信息,修改完成之后,如下:

[root@ldapsrv01 ~]# cat base.ldif
dn: dc=contoso,dc=com
dc: contoso
objectClass: top
objectClass: domain
dn: ou=People,dc=contoso,dc=com
ou: People
objectClass: top
objectClass: organizationalUnit
dn: ou=Group,dc=contoso,dc=com
ou: Group
objectClass: top
objectClass: organizationalUnit
dn: cn=tech,ou=group,dc=contoso,dc=com
objectClass: posixGroup
description: Technology
gidNumber: 10001
cn: tech

现在,把修改好的base.ldif导入到ldap中,通过使用ldapadd命令来完成。

[root@ldapsrv01 ~]# ldapadd -x -D "cn=admin,dc=contoso,dc=com" -W -f base.ldif 
Enter LDAP Password: 
adding new entry "dc=contoso,dc=com"
adding new entry "ou=People,dc=contoso,dc=com"
adding new entry "ou=Group,dc=contoso,dc=com"
adding new entry "cn=tech,ou=group,dc=contoso,dc=com"

导入完成之后,我再进行一次简单查询:

[root@ldapsrv01 ~]# ldapsearch -x -b "dc=contoso,dc=com"
# extended LDIF
#
# LDAPv3
# base <dc=contoso,dc=com> with scope subtree
# filter: (objectclass=*)
# requesting: ALL
#
# contoso.com
dn: dc=contoso,dc=com
dc: contoso
objectClass: top
objectClass: domain
# People, contoso.com
dn: ou=People,dc=contoso,dc=com
ou: People
objectClass: top
objectClass: organizationalUnit
# Group, contoso.com
dn: ou=Group,dc=contoso,dc=com
ou: Group
objectClass: top
objectClass: organizationalUnit
# tech, Group, contoso.com
dn: cn=tech,ou=Group,dc=contoso,dc=com
objectClass: posixGroup
description: Technology
gidNumber: 10001
cn: tech
# search result
search: 2
result: 0 Success
# numResponses: 5
# numEntries: 4

可以看到,ldap中已经存在之前导入的ou和group了,下面准备用户和组的信息的导入。

步骤四:添加本地系统用户

这里我使用一个脚本(这个脚本不是我写的,而且批量生成用户也算是个简单的脚本吧,怪不得RHCE考这个,原来这里能用到啊。)来批量生成几个用户,然后将这些生成的用户导入到ldap中。

[root@ldapsrv01 ~]# cat addusers.sh 
#!/bin/bash  
# Add system user  
for ldap in {1..5};do  
    if id user${ldap} &> /dev/null;then  
        echo "System account already exists"  
    else  
        adduser user${ldap} -u $((10000 + $ldap))  
        echo user${ldap} | passwd --stdin user${ldap} &> /dev/null  
        echo "user${ldap} system add finish"  
    fi  
done  
[root@ldapsrv01 ~]# ./addusers.sh 
user1 system add finish
user2 system add finish
user3 system add finish
user4 system add finish
user5 system add finish
[root@ldapsrv01 ~]# id user1
uid=10001(user1) gid=10001(user1) groups=10001(user1)
[root@ldapsrv01 ~]# id user2
uid=10002(user2) gid=10002(user2) groups=10002(user2)
[root@ldapsrv01 ~]# id user3
uid=10003(user3) gid=10003(user3) groups=10003(user3)
[root@ldapsrv01 ~]# id user4
uid=10004(user4) gid=10004(user4) groups=10004(user4)
[root@ldapsrv01 ~]# id user5
uid=10005(user5) gid=10005(user5) groups=10005(user5)

步骤五:生成people.ldif和group.ldif文件

[root@ldapsrv01 ~]# tail -5 /etc/passwd
user1:x:10001:10001::/home/user1:/bin/bash
user2:x:10002:10002::/home/user2:/bin/bash
user3:x:10003:10003::/home/user3:/bin/bash
user4:x:10004:10004::/home/user4:/bin/bash
user5:x:10005:10005::/home/user5:/bin/bash
[root@ldapsrv01 ~]# tail -5 /etc/passwd > testuser

将这5个用户保存到testuser中,稍后会对这5个本地账户生成ladp用户文件。

[root@ldapsrv01 ~]# tail -5 /etc/group
user1:x:10001:
user2:x:10002:
user3:x:10003:
user4:x:10004:
user5:x:10005:
[root@ldapsrv01 ~]# tail -5 /etc/group > testgroup

将这5个组保存到testgroup中,同样稍后会用到。

/usr/share/migrationtools/migrate_passwd.pl testuser people.ldif
#根据testuser生成ldap用户数据文件people.ldif
/usr/share/migrationtools/migrate_group.pl testgroup group.ldif
#根据testgroup生成ldap组的数据文件group.ldif

注意,这两条命令的执行一定要在testuser/testgroup目录下,否则要加上全路径,不然找不到文件。

[root@ldapsrv01 ~]# cat people.ldif 
dn: uid=user1,ou=People,dc=contoso,dc=com
uid: user1
cn: user1
objectClass: account
objectClass: posixAccount
objectClass: top
objectClass: shadowAccount
userPassword: {crypt}$6$Zs9mXyPO$QdqHS8nA/vyjUdnSWLIpM4QiaPtsca1WllXu0dWQOgTza2Qr4TcC3sHbAbJsWI0KannwnM.zFFroqxzglFfJT0
shadowLastChange: 17053
shadowMin: 0
shadowMax: 99999
shadowWarning: 7
loginShell: /bin/bash
uidNumber: 10001
gidNumber: 10001
homeDirectory: /home/user1
dn: uid=user2,ou=People,dc=contoso,dc=com
uid: user2
cn: user2
objectClass: account
objectClass: posixAccount
objectClass: top
objectClass: shadowAccount
userPassword: {crypt}$6$0dHBettP$u4vVTWuVkRN8NGIecG5O7VSnFDCtcQF/623lLY4Ih6RXORfFcRxh9fFdvssYeg6QAw1KY4LKtk.zwzdVXH2rh1
shadowLastChange: 17053
shadowMin: 0
shadowMax: 99999
shadowWarning: 7
loginShell: /bin/bash
uidNumber: 10002
gidNumber: 10002
homeDirectory: /home/user2
dn: uid=user3,ou=People,dc=contoso,dc=com
uid: user3
cn: user3
objectClass: account
objectClass: posixAccount
objectClass: top
objectClass: shadowAccount
userPassword: {crypt}$6$CXSotuEN$QSo5gJFlsJ6uZhqaK8qDto.5u2WXwvWSV1JqVP9WMOUVhxZXY8I.XMEUojwGGwpSYY1OtY2Sl/J7dzSk1ey6F/
shadowLastChange: 17053
shadowMin: 0
shadowMax: 99999
shadowWarning: 7
loginShell: /bin/bash
uidNumber: 10003
gidNumber: 10003
homeDirectory: /home/user3
dn: uid=user4,ou=People,dc=contoso,dc=com
uid: user4
cn: user4
objectClass: account
objectClass: posixAccount
objectClass: top
objectClass: shadowAccount
userPassword: {crypt}$6$ycSPE1gY$ofWgCYtRk9s5LnLKnR4FR5ld10wI6riT2u0jA8wytMm07am1NZreNdhEAJb8.erz4HasyhlsGqecBNdfx5x6S0
shadowLastChange: 17053
shadowMin: 0
shadowMax: 99999
shadowWarning: 7
loginShell: /bin/bash
uidNumber: 10004
gidNumber: 10004
homeDirectory: /home/user4
dn: uid=user5,ou=People,dc=contoso,dc=com
uid: user5
cn: user5
objectClass: account
objectClass: posixAccount
objectClass: top
objectClass: shadowAccount
userPassword: {crypt}$6$xVZ5hNeH$GzlC19E6Tiq/4Y3HmtCwRjjKVzvcI2IA.z.QPqhwHU.mSV1UT7uZiaVG8HelvbgZJsn3Z1te75C/DNZ.C0Ov50
shadowLastChange: 17053
shadowMin: 0
shadowMax: 99999
shadowWarning: 7
loginShell: /bin/bash
uidNumber: 10005
gidNumber: 10005
homeDirectory: /home/user5

这是生成的people.ldif文件,里面是用户的信息,包括密码等信息,如果某些字段不需要,也可以删除。

[root@ldapsrv01 ~]# cat group.ldif 
dn: cn=user1,ou=Group,dc=contoso,dc=com
objectClass: posixGroup
objectClass: top
cn: user1
userPassword: {crypt}x
gidNumber: 10001
dn: cn=user2,ou=Group,dc=contoso,dc=com
objectClass: posixGroup
objectClass: top
cn: user2
userPassword: {crypt}x
gidNumber: 10002
dn: cn=user3,ou=Group,dc=contoso,dc=com
objectClass: posixGroup
objectClass: top
cn: user3
userPassword: {crypt}x
gidNumber: 10003
dn: cn=user4,ou=Group,dc=contoso,dc=com
objectClass: posixGroup
objectClass: top
cn: user4
userPassword: {crypt}x
gidNumber: 10004
dn: cn=user5,ou=Group,dc=contoso,dc=com
objectClass: posixGroup
objectClass: top
cn: user5
userPassword: {crypt}x
gidNumber: 10005

这是生成的group.ldif文件,里面是用户组的信息,这里的gidNumber就是在本地操作系统中的gid。

因为我之前已经添加了一个tech的用户组,它的gidNumber是10001,会跟即将导入的user1组的gidNumber冲突,所以我先删除tech用户组。

[root@ldapsrv01 ~]# ldapdelete -x -D "cn=admin,dc=contoso,dc=com" -W "cn=tech,ou=Group,dc=contoso,dc=com"
Enter LDAP Password: 
[root@ldapsrv01 ~]# ldapsearch -x -b "dc=contoso,dc=com"
# extended LDIF
#
# LDAPv3
# base <dc=contoso,dc=com> with scope subtree
# filter: (objectclass=*)
# requesting: ALL
#
# contoso.com
dn: dc=contoso,dc=com
dc: contoso
objectClass: top
objectClass: domain
# People, contoso.com
dn: ou=People,dc=contoso,dc=com
ou: People
objectClass: top
objectClass: organizationalUnit
# Group, contoso.com
dn: ou=Group,dc=contoso,dc=com
ou: Group
objectClass: top
objectClass: organizationalUnit
# search result
search: 2
result: 0 Success
# numResponses: 4
# numEntries: 3

已经没有tech用户组了,可以开始导入用户和用户组了。

步骤六:导入ldif文件到ldap中

[root@ldapsrv01 ~]# ldapadd -x -D "cn=admin,dc=contoso,dc=com" -W -f people.ldif 
Enter LDAP Password: 
adding new entry "uid=user1,ou=People,dc=contoso,dc=com"
adding new entry "uid=user2,ou=People,dc=contoso,dc=com"
adding new entry "uid=user3,ou=People,dc=contoso,dc=com"
adding new entry "uid=user4,ou=People,dc=contoso,dc=com"
adding new entry "uid=user5,ou=People,dc=contoso,dc=com"

导入people.ldif文件,操作成功。

[root@ldapsrv01 ~]# ldapadd -x -D "cn=admin,dc=contoso,dc=com" -W -f group.ldif 
Enter LDAP Password: 
adding new entry "cn=user1,ou=Group,dc=contoso,dc=com"
adding new entry "cn=user2,ou=Group,dc=contoso,dc=com"
adding new entry "cn=user3,ou=Group,dc=contoso,dc=com"
adding new entry "cn=user4,ou=Group,dc=contoso,dc=com"
adding new entry "cn=user5,ou=Group,dc=contoso,dc=com"

导入group.ldif文件,操作成功。

步骤七:搜索ldap用户和组,验证操作是否成功

再对ldap进行一次用户检索:

[root@ldapsrv01 ~]# ldapsearch -LLL -x -D "cn=admin,dc=contoso,dc=com" -W -b "dc=contoso,dc=com" '(uid=*)'
Enter LDAP Password: 
dn: uid=user1,ou=People,dc=contoso,dc=com
uid: user1
cn: user1
objectClass: account
objectClass: posixAccount
objectClass: top
objectClass: shadowAccount
userPassword:: e2NyeXB0fSQ2JFpzOW1YeVBPJFFkcUhTOG5BL3Z5alVkblNXTElwTTRRaWFQdHN
 jYTFXbGxYdTBkV1FPZ1R6YTJRcjRUY0Mzc0hiQWJKc1dJMEthbm53bk0uekZGcm9xeHpnbEZmSlQw
shadowLastChange: 17053
shadowMin: 0
shadowMax: 99999
shadowWarning: 7
loginShell: /bin/bash
uidNumber: 10001
gidNumber: 10001
homeDirectory: /home/user1
dn: uid=user2,ou=People,dc=contoso,dc=com
uid: user2
cn: user2
objectClass: account
objectClass: posixAccount
objectClass: top
objectClass: shadowAccount
userPassword:: e2NyeXB0fSQ2JDBkSEJldHRQJHU0dlZUV3VWa1JOOE5HSWVjRz×××1ZTbkZEQ3R
 jUUYvNjIzbExZNEloNlJYT1JmRmNSeGg5ZkZkdnNzWWVnNlFBdzFLWTRMS3RrLnp3emRWWEgycmgx
shadowLastChange: 17053
shadowMin: 0
shadowMax: 99999
shadowWarning: 7
loginShell: /bin/bash
uidNumber: 10002
gidNumber: 10002
homeDirectory: /home/user2
dn: uid=user3,ou=People,dc=contoso,dc=com
uid: user3
cn: user3
objectClass: account
objectClass: posixAccount
objectClass: top
objectClass: shadowAccount
userPassword:: e2NyeXB0fSQ2JENYU290dUVOJFFTbzVnSkZsc0o2dVpocWFLOHFEdG8uNXUyV1h
 3dldTVjFKcVZQOVdNT1VWaHhaWFk4SS5YTUVVb2p3R0d3cFNZWTFPdFkyU2wvSjdkelNrMWV5NkYv
shadowLastChange: 17053
shadowMin: 0
shadowMax: 99999
shadowWarning: 7
loginShell: /bin/bash
uidNumber: 10003
gidNumber: 10003
homeDirectory: /home/user3
dn: uid=user4,ou=People,dc=contoso,dc=com
uid: user4
cn: user4
objectClass: account
objectClass: posixAccount
objectClass: top
objectClass: shadowAccount
userPassword:: e2NyeXB0fSQ2JHljU1BFMWdZJG9mV2dDWXRSazlzNUxuTEtuUjRGUjVsZDEwd0k
 2cmlUMnUwakE4d3l0TW0wN2FtMU5acmVOZGhFQUpiOC5lcno0SGFzeWhsc0dxZWNCTmRmeDV4NlMw
shadowLastChange: 17053
shadowMin: 0
shadowMax: 99999
shadowWarning: 7
loginShell: /bin/bash
uidNumber: 10004
gidNumber: 10004
homeDirectory: /home/user4
dn: uid=user5,ou=People,dc=contoso,dc=com
uid: user5
cn: user5
objectClass: account
objectClass: posixAccount
objectClass: top
objectClass: shadowAccount
userPassword:: e2NyeXB0fSQ2JHhWWjVoTmVIJEd6bEMxOUU2VGlxLzRZM0htdEN3UmpqS1Z6dmN
 JMklBLnouUVBxaHdIVS5tU1YxVVQ3dVppYVZHOEhlbHZiZ1pKc24zWjF0ZTc1Qy9ETlouQzBPdjUw
shadowLastChange: 17053
shadowMin: 0
shadowMax: 99999
shadowWarning: 7
loginShell: /bin/bash
uidNumber: 10005
gidNumber: 10005
homeDirectory: /home/user5

对用户组进行数据检索:

[root@ldapsrv01 ~]# ldapsearch -LLL -x -D "cn=admin,dc=contoso,dc=com" -W -b "dc=contoso,dc=com" '(objectClass=posixGroup)'
Enter LDAP Password: 
dn: cn=user1,ou=Group,dc=contoso,dc=com
objectClass: posixGroup
objectClass: top
cn: user1
userPassword:: e2NyeXB0fXg=
gidNumber: 10001
dn: cn=user2,ou=Group,dc=contoso,dc=com
objectClass: posixGroup
objectClass: top
cn: user2
userPassword:: e2NyeXB0fXg=
gidNumber: 10002
dn: cn=user3,ou=Group,dc=contoso,dc=com
objectClass: posixGroup
objectClass: top
cn: user3
userPassword:: e2NyeXB0fXg=
gidNumber: 10003
dn: cn=user4,ou=Group,dc=contoso,dc=com
objectClass: posixGroup
objectClass: top
cn: user4
userPassword:: e2NyeXB0fXg=
gidNumber: 10004
dn: cn=user5,ou=Group,dc=contoso,dc=com
objectClass: posixGroup
objectClass: top
cn: user5
userPassword:: e2NyeXB0fXg=
gidNumber: 10005

已经将在本地使用shell脚本批量创建的5个用户(user1--user5)以及对应的5个用户组(user1--user5)都导入到ldap中,从本地系统添加用户到ldap中的操作完成。

转载于:https://blog.51cto.com/jerry12356/1851186

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Openldap导入数据(一) 的相关文章

  • 在 shell 脚本中将脚本目录更改为用户的 homedir

    在我的 bash 脚本中 我需要将当前目录更改为用户的主目录 如果我想更改为用户的foo主目录 从命令行我可以执行以下操作 cd foo 效果很好 但是当我从script它告诉我 bar sh line 4 cd foo No such f
  • 使用 BHO 扩展 Windows 资源管理器

    我正在尝试使用 C 中的自定义面板来扩展 Windows 资源管理器 不是谎言 它应该如下所示 这是我发现的一个类似的问题 在 C 中 类似问题 https stackoverflow com questions 22101829 ishe
  • 基于文件位置而不是当前工作目录的相对路径[重复]

    这个问题在这里已经有答案了 Given some txt dir cat sh cat sh 的内容如下 cat some txt 然后运行 cat sh inside dir运行时工作正常 dir cat sh与dir才不是 我预计这是由
  • bash 脚本中的变量值不会改变[重复]

    这个问题在这里已经有答案了 运行以下代码 a one echo a a two echo a a three echo a gt a 结果是 one one 以及创建的文件名称为 one 内容为 one 为什么变量没有更改为two在第 2
  • 使用终端(或 Shell)将文件的一部分复制/粘贴到另一个文件中

    我正在尝试将 txt 文件的一部分从行号 n 复制到行号 n y 假设 1000 到 1000000 我尝试过与运营商合作sed 并且失败了 这是我尝试过的命令 sed n 1000 1000000p path first file gt
  • “设置:非法选项 -”在一台主机上,但在另一台主机上则不然

    我在我的一台 ubuntu 虚拟机中编写了一个 sh 脚本 该脚本工作正常 但是当我尝试在其他虚拟机中运行它时 它不起作用 两个虚拟机应该相同 和bash version两个虚拟机均回复 GNU bash version 4 3 11 1
  • 编写健壮的 shell 脚本有哪些规则?

    I recently erased part of my home directory with a shell script I wrote Fortunately I did hit Ctrl C fast enough to avoi
  • shell 脚本中的 Telnet

    如何在 shell 脚本中运行 telnet 并在远程服务器上执行命令 出于安全原因 我没有在我的Solaris 机器上安装expect 我也没有perlnet telnet模块已安装 那么如果不使用expect和perl我该怎么办呢 我尝
  • 使用 find 和 xargs 交互删除文件

    我正在尝试将一些文件从 find 命令传输到交互式删除命令 以便我可以仔细检查要删除的文件 但我遇到了一些麻烦 find name print0 xargs 0 rm i 我认为上面的方法可行 但我只得到一串 rm remove regul
  • linux + ksh + 向下舍入或向上舍入 - 浮点数

    在我的 ksh 脚本中 我只需要计算整数 有时我会得到浮点数 例如 3 49 或 4 8 等 所以我需要根据以下规则将浮点数转换为整数 示例 3 49 will be 3 2 9 will be 3 4 1 will be 4 23 51
  • 如何在bash中使用kill SIGUSR2?

    我在linux中使用iptraf来监控网络流量 shell命令是 让iptraf在后台运行 iptraf s eth0 f B L traffic dat 如果我想得到结果 我必须先停止 iptraf 所以我使用 shell 命令 kill
  • 如果文件没有行尾字符,则 wc -l 不计算文件的最后一个

    我需要计算 unix 文件的所有行数 该文件有 3 行 但是wc l仅给出 2 个计数 我知道它不计算最后一行 因为它没有行尾字符 任何人都可以告诉我如何计算这一行吗 grep c返回匹配行的数量 只需使用一个空字符串 作为您的匹配表达式
  • 在Java中执行.lnk文件

    我需要在java中执行 lnk文件 指向exe文件的lnk文件 我能怎么做 在 VB net 中我做 Process Start path 它有效 谢谢你的帮助 Use a 流程构建器 http download oracle com ja
  • Git - 显示远程分支的远程名称

    是否有一个 Git 命令可以显示远程分支的远程名称 目前 我坚持使用 shell utils 从远程分支引用中提取远程名称 例如 echo remote name branch name sed r s 1 remote name 有时出于
  • 在 Linux 中重新启动时,新创建的文件变为 0 kb(数据被覆盖为空)

    我遇到了一个奇怪的问题 这让我发疯 当前的任务是在 root 用户第一次登录时启动一组文件 并在同一用户第二次登录时启动另一组文件 我决定使用 profile 和 bashrc 文件 并在第一次登录期间发生的任务结束时重新加载 bashrc
  • Linux shell 从用户输入中获取设备 ID

    我正在为一个程序编写安装脚本 该程序需要在其配置中使用 lsusb 的设备 ID 因此我正在考虑执行以下操作 usblist lsusb put the list into a array for each line use the arr
  • 如何并行执行4个shell脚本,我不能使用GNU并行?

    我有4个shell脚本dog sh bird sh cow sh和fox sh 每个文件使用 xargs 并行执行 4 个 wget 来派生一个单独的进程 现在我希望这些脚本本身能够并行执行 由于某些我不知道的可移植性原因 我无法使用 GN
  • Bash 中所有匹配的^单词^替换^?

    为了澄清 我正在寻找一种方法来执行global搜索并替换先前使用的命令 word replacement 似乎只替换了第一场比赛 有没有一些set我无法选择的选项 尝试这个 echo oneone oneone gs one two Rep
  • 将 JSON 导出到环境变量

    如果我有这样的 JSON hello1 world1 testk testv 我想将每个键值对导出为环境变量 如何通过 shell 脚本来做到这一点 例如 当我在终端上写时 echo hello1 world1应该打印其他键值对吗 注意 上
  • 为什么 fork 炸弹没有使 android 崩溃?

    这是最简单的叉子炸弹 我在许多 Linux 发行版上执行了它 但它们都崩溃了 但是当我在 android 终端中执行此操作时 即使授予后也没有效果超级用户权限 有什么解释为什么它没有使 Android 系统崩溃吗 一句话 ulimit Li

随机推荐

  • 静态代码和动态代码的区别_动态改变的代码设计思想

    前言 我看过很多书 知道那些作者在推广什么 相对书里的东西落地 还是一个不容易的过程 我看过很多行业的代码 持续多年的积累 聊过一些老板 对代码改造的看法 为什么 程序员这么难 我将用4个方向 来解释代码设计中的设计思路和方法 给大家展现一
  • Android登录 之 GooglePlay登录

    想法 写了好久代码了 但是都没有具体的总结下 总是用到的时候 再去翻看资料 一看就是一堆 到最后都不一定能管用 近期做了一些项目 涉及到了登录授权 细回想下 自己接过的登录授权还真心不少 不同的授权都会一一列举 以后方便自己 也希望能够方便
  • Fatal error: Cannot declare class ***, because the name is already in use in D:\www\test.php

    报错信息 Fatal error Cannot declare class because the name is already in use in D www test php on line 5 报错原因 该class 文件在其他引入
  • Tomcat控制台打印输出中文时的乱码问题

    这个问题我参考了许多网上的解决方法 这个方法是比较迅速与方便的 产生这个问题的原因是Windows默认编码集为GBK 由于使用startup bat启动Tomcat时 它会读取catalina bat的代码并打开一个新窗口运行 打开的cmd
  • 信号量详细解说

    1 信号量概述 进化版的互斥锁 1 gt N 由于互斥锁的粒度比较大 如果我们希望在多个线程间对某一对象的部分数据进行共享 使用互斥锁是没有办法实现的 只能将整个数据对象锁住 这样虽然达到了多线程操作共享数据时保证数据正确性的目的 却无形中
  • webdriver安装

    首先了解自己所需使用的浏览器 这里以谷歌浏览器为例 火狐 Edge安装方式相同 找相应webdriver即可 查看自己浏览器的版本 去官网找对应版本的webdriver 网址 http npm taobao org mirrors chro
  • SD3.0协议解读三

    SD卡功能描述 所有主机和SD卡间的通信都是由主机控制的 这和USB是一致的 例如 U盘并没有主动通知USB控制器的能力 USB鼠标也没有主动通知USB控制器的能力 当然 SD卡也是没有主动通知SD控制器的能力的 主机发送的命令有两种 一种
  • 几个开发模式

    瀑布模型 开发过程顺序进行 过程规范 有质量保证 但是不能够应对需求变化 更改代价较高 灵活性较低 V模型 基于瀑布模型 但是更强调测试过程 有质量保证 显示出不同层次上的测试方法 并且将测试阶段与开发阶段相联系 原型模型 主要解决核心问题
  • @RabbitListener起作用的原理

    一 前言 在spring中 定义rabbitMq的消费者可以相当方便 只需要在消息处理类或者类方法加上 RabbitListener注解 指定队列名称即可 如下代码 Component public class RabbitMqListen
  • STM32长时间工作后串口不能接收

    问题 记录一次STM32长时间工作后 串口不能正常接收数据 其他功能正常 场景简单描述 在某一个产品上STM32作为前面板的控制 有多个中断开启 大部分的中断级别为0 串口的中断级别为1 串口中断接收 普通方式发送 出现长时间工作之后串口不
  • 快速解决node-sass报错问题

    1 引言 由于项目中需要使用到node sass 因此怀疑我的环境出问题了 于是决定配置nvm让环境变得更加灵活 便于切换node的版本 2 直接开始 1 安装nvm 链接 https pan baidu com s 1Li4o34jB6o
  • 五人合伙最佳股份分配_5人合伙,4个人投资源,1人经营,股权应该如何划分?...

    最近一个客户找到股加加进行咨询 说 我们公司是做新媒体运营培训的 主要靠卖课和咨询服务 3个投资源的手上有很多大V 流量较大的平台这方面的资源 可以拉来业务 我负责经营 另一个出资的 打算投40万到公司 应该给他多少股份 其他四人都是兼职人
  • 【前端编辑器分析(markdown,富文本)】

    随着近几年markdown编辑器的流行 富文本编辑器不再是唯一选择 但是主体都是工具栏加编辑区的模式 1 markdown markdown使用格式标记语言编排内容 当你要修改文章某个地方的格式时 在该位置加入对应的格式符号即可 markd
  • Unable to connect to 127.0.0.1:6379 的解决办法

    问题 Unable to connect to 127 0 0 1 6379 解决办法 1 在redis的目录下输入cmd 2 redis server exe redis windows conf 不关闭窗口 3 然后在新开一个cmd窗口
  • 利用MOS管使电路供电电压稳定之后,降低供电电压的方法

    现在有一款产品需要1 005V高电压启动 0 903V低电压运行 这也是从低功耗的角度设计 下面电路就是利用一颗N沟道MOS管来实现上电瞬间输出高电压 核心板启动之后 输出低电压 SAR GPIO1引脚接的MCU 的GPIO口 先上data
  • MySQL之UPDATE与SELECT结合语法详解与实例

    第一种 语法 UPDATE table1 SET column1 SELECT column FROM table2 WHERE condition WHERE table1 column2 value 注 若不加where条件则是更新表中
  • 进度 060706-060724

    新进度从060706 开始 ESOE v0 2 进度记录 9 060724 内存泄漏降低到实用程度 测试例子100次刷新小于500k 不再优化 并加入析构机制 下一步工作整理说明书 8 在框架页面下出现严重的javascript内存泄漏问题
  • java 驼峰和下划线互相转换

    其实是很简单的正则表达式转换 直接上代码 驼峰转下划线 param str 目标字符串 return java lang String public static String humpToUnderline String str Stri
  • LVM动态扩容逻辑卷详解

    LVM逻辑卷管理 简介 LVM是逻辑卷管理 Logical Volume Manager 的简称 它是Linux环境下对磁盘分区进行管理的一种机制 LVM是建立在硬盘和分区之上的一个逻辑层 来提高磁盘分区管理的灵活性 LVM最大的特点就是可
  • Openldap导入数据(一)

    在安装完openldap之后 默认ldap中是没有数据的 需要管理员进行添加 当然添加的方法也不止一种 这里先介绍第一种方法 从本地系统添加用户到ldap中 root ldapsrv01 ldapsearch x b dc contoso