我正在使用openssl dgst -sha1 -binary以二进制格式获取字符串的哈希值。
(我使用-binary标志是因为我的 openssl 版本在默认输出的每个散列值之前添加了“stdout”,并-binary有助于避免它,因此更容易以二进制格式存储散列结果以供进一步处理(因此我可以xxd -p在我想要十六进制值,而不是stdout从每个字符串中手动删除“ ”)
因此,openssl dgst -sha1 -binary“Hello!”的二进制输出 Cygwin 控制台中的字符串将如下所示:_??"q?%?a????.&C?0N?Q??vH&8i
现在我用这个结果创建一个新变量并将它与另一个变量连接起来,该变量的值不是二进制格式(即“世界”)。所以我的新变量现在看起来像
_??"q?%?a??.&C?0N?Q??vH&8iWorld
然后我为这个连接的字符串生成另一个哈希,并将它与我使用默认 Java 哈希库 ( MessageDigest)得到的哈希进行比较。然而,在这一步中,通过 shell 和 Java 获得的哈希值不匹配(我需要获得与 Java 端生成的值完全相同的值)。
所以我想我的“世界”字符串也应该是二进制格式以匹配我的 Java 哈希输出(因为只要我为连接的二进制值生成哈希,所有哈希都匹配)。但是,我不知道如何在 shell 中将我的“世界”字符串转换为二进制格式。有任何想法吗?
我正在使用 Java 程序 (BigIntegers) 生成数字,我想知道是否有一个现成的二进制文件可以用来对生成的数字运行素性测试......假设我通过来自我的 Java 程序的管道馈送它们进入二进制。它在那里吗?我正在尝试在 apt 上找到 aks 的软件包,但我看不到任何“直接”的东西,只有我可以用来编程东西的库(例如,基于 GMP)。
我如何获得 PID 号和它工作的文件夹?
如果我在不同的文件夹中运行 2 个相同的程序:
/var/www/public_html/first_folder/test.jar <i>(it runs all the time)</i>
/var/www/public_html/second_folder/test.jar <i>(it runs all the time)</i>
Run Code Online (Sandbox Code Playgroud)
如果我运行这个命令 ps aux | grep test.jar
结果:
www-data 3766 0.5 3.8 2959916 75616 ? Sl 15:01 0:13 java -jar test.jar
www-data 4239 3.4 4.1 2959916 82432 ? Sl 15:31 0:18 java -jar test.jar
Run Code Online (Sandbox Code Playgroud)
我不知道是哪个 PID ----第一个文件夹还是第二个。
我有一个由 shell 脚本启动的 Java 应用程序。shell 脚本的第一部分是通过查看$JAVA_HOME.
如果从终端启动,shell 脚本运行良好,但如果通过双击.desktop包含以下内容的文件启动,则会失败
Exec=/bin/sh "/opt/HO/HO" %U
Run Code Online (Sandbox Code Playgroud)
查看日志似乎发生了错误,因为$JAVA_HOME以这种方式启动脚本时不返回任何内容。
我试图替换/bin/sh,/bin/bash但它也失败了。
知道为什么找不到这样的环境变量吗?我该怎么办?
现在我使用sdkman从互联网安装jdk失败,由于网络访问问题,我无法安装jdk。现在我想使用 sdkman 从本地安装 sdk。我认为程序会是这样的:
是否可以?我已经下载了jdk,如下:
wget -c https://mirrors.tuna.tsinghua.edu.cn/AdoptOpenJDK/11/jdk/x64/linux/OpenJDK11U-jdk_x64_linux_hotspot_11.0.11_9.tar.gz
Run Code Online (Sandbox Code Playgroud) 当我尝试更新系统时出现jdk-openjdk and jre-openjdk are in conflict 错误:
这是更新尝试的日志:
:: Synchronizing package databases...
core is up to date
extra is up to date
community is up to date
multilib is up to date
:: Searching AUR for updates...
:: Searching databases for updates...
-> Packages not in AUR: bunjs-bin flite1-patched jellyfin-server-bin jellyfin-web-bin js78 libgweather libopenaptx libvterm01 nodejs-lts-gallium progsreiserfs python-backcall
-> Orphan (unmaintained) AUR Packages: anki-official-binary-bundle jdk-jetbrains jetbrains-clion-pj python-gymnasium-notices python-hijri-converter python-jax-jumpy python-pep517
-> Flagged Out Of Date AUR Packages: anki-official-binary-bundle blades-bin …Run Code Online (Sandbox Code Playgroud) 这是我编写的 ruby 脚本,用于更改 Ubuntu 上的时区配置。我用jruby(在 JVM 中运行的 Ruby 解释器)运行它。
require 'java'
if ARGV.length == 0
puts "Usage: jruby change_timezone.rb America/Toronto"
exit
end
old_zone = File.read("../../../etc/timezone")
puts old_zone
time1 = Time.now
puts "Current Time:"+time1.localtime.to_s
new_zone = ARGV[0]
open('../../../etc/timezone','w') do |f|
f.puts new_zone.to_s
f.close
end
new_zone = File.read("../../../etc/timezone")
puts new_zone
time2 = Time.now
puts "Updated Time:"+time2.localtime.to_s
Run Code Online (Sandbox Code Playgroud)
它确实正确更改了配置文件。但是,脚本的输出与预期不同。
假设时区的默认值为America/Toronto。当我运行命令时jruby change_timezone.rb Asia/Chongqing,输出是:
America/Toronto
Current Time:Thu Jul 07 14:43:23 -0400 2011
Asia/Chongqing
Updated Time:Thu Jul 07 14:43:23 -0400 2011 …Run Code Online (Sandbox Code Playgroud) 我注意到在 Debian 上寻找 jinput 库(我相信这里的“j”意味着这是一个 Java 特定的库,而不是一个简单的包装器),有两个包可能适用:
libjinput-java/stable 20100502+dfsg-7 all
Java Game Controller API
libjinput-jni/stable 20100502+dfsg-7 armhf
Java Game Controller API (jni)
Run Code Online (Sandbox Code Playgroud)
请注意,这是一个 ARM 系统。我知道其他语言有时有两种实现方式,一种需要编译的更快的实现,另一种不需要编译的“纯任何”(在本例中为 java)。后者在这里似乎不太可能,但我不确定;第一个作为适用于“所有”平台的包出现这一事实与第二个相比很有趣,后者是特定于体系结构的列表。
那么,在 Debian 命名法中,-java包和-jni包之间有什么区别?
我现在猜测这个-jni包允许这个库“反向”使用,即从 C/C++ 中使用,如果有人可以确认或否认......
在一个新的 Debian 系统上我安装了 JRE 使用
sudo apt-get install default-jre
Run Code Online (Sandbox Code Playgroud)
然后我下载了一个 jar 文件并尝试运行它:
java -jar server.jar
Run Code Online (Sandbox Code Playgroud)
该文件抛出异常:
java.lang.unsupportedclassversionerror unsupported major.minor version 52.0
所以我开始寻找解决方案并按照用户的说明进行操作:
sudo rm /usr/bin/java
sudo ln -s /Library/Internet\ Plug-Ins/JavaAppletPlugin.plugin/Contents/Home/bin/java /usr/bin
Run Code Online (Sandbox Code Playgroud)
后来我意识到我什至没有目录/Library,因此这个链接没有指向任何地方。
现在我什至不能再运行java了:
java -jar server.jar
-bash: /usr/bin/java: No such file or directory
Run Code Online (Sandbox Code Playgroud)
我已经尝试卸载 JRE 并重新安装它:
apt-get remove default-jre
apt-get update
apt-get install default-jre
Run Code Online (Sandbox Code Playgroud)
但这并没有改变任何东西。
Java似乎已安装:
find /usr -name java
/usr/share/bash-completion/completions/java
/usr/lib/jvm/java-7-openjdk-amd64/jre/bin/java
/usr/lib/jvm/java-7-openjdk-amd64/bin/java
Run Code Online (Sandbox Code Playgroud) 我们在 Red Hat Enterprise Linux 7.5 上安装了以下 RPM(Java 开发工具包的一部分):
$ rpm -qa | grep jdk
java-1.8.0-openjdk-headless-1.8.0.171-8.b10.el7_5.x86_64
java-1.8.0-openjdk-1.8.0.171-8.b10.el7_5.x86_64
copy-jdk-configs-3.3-10.el7_5.noarch
Run Code Online (Sandbox Code Playgroud)
但我们找不到jstat哪个应该在以下路径上:
/usr/jdk64/jdk1.8.0...../bin/jstat
Run Code Online (Sandbox Code Playgroud)
这里有什么问题?
是jstat上面安装的 RPM 的一部分还是我们需要另一个 java 安装?
$ which java
/usr/bin/java
Run Code Online (Sandbox Code Playgroud)