我正在尝试让所有进程在 Mac OS X 上侦听网络连接。netstat没有-p选项,我正在尝试使用 lsof
lsof -i -sTCP:LISTEN
Run Code Online (Sandbox Code Playgroud)
给了我一个公平的聆听过程清单,但不是全部。例如,我可以 telnet 到端口 10080,在那里我有一个进程正在侦听连接,但这未显示在lsof. 我错过了什么?
$ telnet localhost 10080
Trying ::1...
Connected to localhost.
Escape character is '^]'.
^]
telnet> Connection closed.
Run Code Online (Sandbox Code Playgroud)
但
$ sudo lsof -n -i | grep 10080
$
Run Code Online (Sandbox Code Playgroud) 我正在尝试shellcheck。
我有类似的东西
basename "${OPENSSL}"
Run Code Online (Sandbox Code Playgroud)
我得到以下建议
Use parameter expansion instead, such as ${var##*/}.
Run Code Online (Sandbox Code Playgroud)
从实际的角度来看,我认为没有区别
$ export OPENSSL=/opt/local/bin/openssl
$ basename ${OPENSSL}
openssl
$ echo ${OPENSSL##*/}
openssl
Run Code Online (Sandbox Code Playgroud)
由于basename在POSIX 规范中,我不知道为什么它应该是最佳实践。任何提示?
当然,测试文件是否为空的标准方法是使用test -s FILE,但我们的一个客户收到了一个包含如下测试的脚本:
RETVAL=`ls -s ./log/cr_trig.log | awk '{print $1}'`
if test $RETVAL -ne 0
then
echo "Badness: Log not empty"
exit 25
fi
Run Code Online (Sandbox Code Playgroud)
供应商声称它可以在他们测试过的两种环境中工作。不用说,它在我测试的两个地方都失败了。
所以,我很好奇。什么时候ls -s打印0空文件?
这是我到目前为止的发现:
我还没有检查过网络文件系统。
问题:我如何优雅地向其他人解释他们的脚本是错误的?
在我看来,“正确”的版本是:
if test ! -s ./log/cr_trig.log
then
echo "Badness: Log not empty"
exit 25
fi
Run Code Online (Sandbox Code Playgroud) 有没有办法通过在命令行上提供凭据(例如,使用lpr)来打印到需要身份验证的 Samba 打印机?
我设法将凭据存储在 GNOME Keyring 中,当我使用桌面会话登录时,我可以使用lpr.
有没有办法:
lpr远程登录 (SSH) 时?
编辑
我知道可以为所有用户存储一组凭据(直接在打印机 URI 中的 CUPS 中),但我们需要每个用户使用他/她自己的凭据进行身份验证。
我用checkbashisms检查了我的脚本,并收到以下警告:
possible bashism in check_ssl_cert line 821 (test -a/-o):
if [ -n "${ALTNAMES}" -a -n "${COMMON_NAME}" ] ; then
Run Code Online (Sandbox Code Playgroud)
主要 -a 主要 执行二进制和主要和主要的结果。-a 运算符优先于 -o 运算符。
为什么-a和-o考虑非便携?
我必须在 shell 脚本中执行一些日期计算和转换。例如计算格式化为Nov 28 20:27:19 2012 GMT今天的日期之间的天数差异。
有几种可能性(GNU date、gawk、perl等),但我希望能够在没有 GNU 工具的系统上运行它(例如,BSD、Solaris 等)
目前我拥有的最便携的解决方案是 Perl,但它可能需要安装额外的模块来进行日期转换。
我应该选择什么?
编辑:查看评论我意识到我需要澄清我正在编写的工具将公开分发。我不是在寻找在我的机器上执行计算或如何安装 GNU 工具的方法。
我想使用可能在大多数机器上找到的工具。
我正在调试 postfix 的一些问题。当我建立连接时,没有任何反应并netstat显示:
$ netstat -anp
...
tcp 0 0 129.132.202.106:25 129.132.179.232:60154 ESTABLISHED -
Run Code Online (Sandbox Code Playgroud)
为什么缺少流程?
lsof 不显示已建立的连接
$ lsof -n -i :25
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
master 6139 root 11u IPv4 472858 0t0 TCP 127.0.0.1:smtp (LISTEN)
master 20033 root 11u IPv4 523921 0t0 TCP 129.132.202.106:smtp (LISTEN)
smtpd 20042 postfix 6u IPv4 523921 0t0 TCP 129.132.202.106:smtp (LISTEN)
Run Code Online (Sandbox Code Playgroud)
交通:
11:26:44.182443 IP 129.132.179.232.59517 > 129.132.202.106.25: S 3522488764:3522488764(0) win 65535 <mss 1460,nop,wscale 5,nop,nop,timestamp 73851028 0,sackOK,eol>
11:26:44.182831 IP …Run Code Online (Sandbox Code Playgroud) I'm trying to check the revocation of certificates in a script but I'm getting the following error:
unable to load certificate
140735258465104:error:0906D06C:PEM routines:PEM_read_bio:no start line:pem_lib.c:703:Expecting: TRUSTED CERTIFICATE
Run Code Online (Sandbox Code Playgroud)
Here are the steps (using www.google.com as an example).
获取证书
$ echo 'Q' | openssl s_client -connect www.google.com:443 > google.crt
Run Code Online (Sandbox Code Playgroud)提取发行者的 URI
$ openssl x509 -in google.crt -text -noout | grep 'CA Issuers' | \
sed -e "s/^.*CA Issuers - URI://
Run Code Online (Sandbox Code Playgroud)
这给 http://pki.google.com/GIAG2.crt
获取颁发者证书
$ curl --silent http://pki.google.com/GIAG2.crt > issuer.crt
Run Code Online (Sandbox Code Playgroud)提取 OCSP URI …
我正在尝试查找名称中包含“支柱”(案例激励)且不包含“缓存”(也不区分大小写)的所有文件
find . -iname '*pillar*' -and -not -iname '*cache*'
Run Code Online (Sandbox Code Playgroud)
但它不像我发现的那样工作(除其他外)
./Caches/Metadata/Safari/History/https:%2F%2Fwww.google.ch%2Fsearch?q=pillars+of+eternity+dropbox&client=safari&rls=en&biw=1440&bih=726&ei=CnBDVbhXxulSnLaBwAk&start=10&sa=N%23.webhistory
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?
如果我执行
openssl x509 -in ./somecert -text | grep SCTs
Run Code Online (Sandbox Code Playgroud)
我得到了预期的输出。如果我使用grep -q
openssl x509 -in ./somecert -text | grep -q SCTs
Run Code Online (Sandbox Code Playgroud)
我得到
unable to write certificate
139863258654608:error:09072007:PEM routines:PEM_write_bio:BUF lib:pem_lib.c:659:
Run Code Online (Sandbox Code Playgroud)
似乎grep是不接受管道输入......
我错过了什么?
我正在尝试获取我的邮件服务器的证书 s_client
$ /opt/local/bin/openssl s_client -starttls smtp -connect corti.li:25
CONNECTED(00000003)
didn't found starttls in server response, try anyway...
140735895012360:error:140770FC:SSL routines:SSL23_GET_SERVER_HELLO:unknown protocol:s23_clnt.c:794:
---
no peer certificate available
---
No client certificate CA names sent
---
SSL handshake has read 307 bytes and written 343 bytes
---
New, (NONE), Cipher is (NONE)
Secure Renegotiation IS NOT supported
Compression: NONE
Expansion: NONE No ALPN negotiated
SSL-Session:
Protocol : TLSv1.2
Cipher : 0000
Session-ID:
Session-ID-ctx:
Master-Key:
Key-Arg : None
PSK identity: None
PSK identity …Run Code Online (Sandbox Code Playgroud) 我看到在 Bash > 4.0 中变量扩展用于小写变量。例如
echo ${variable,,}
Run Code Online (Sandbox Code Playgroud)
阅读手册页我真的不明白为什么 shell 将字符串转换为小写。
序列表达式采用 {x..y[..incr]} 形式,其中 x 和 y 是整数或单个字符,而 incr 是一个可选增量,是一个整数。当提供整数时,表达式扩展到 x 和 y 之间的每个数字,包括。提供的整数可能以“0”为前缀,以强制每个术语具有相同的宽度。当 x 或 y 以零开头时,shell 会尝试强制所有生成的项包含相同数量的数字,并在必要时填充零。当提供字符时,表达式使用默认的 C 语言环境按字典顺序扩展到 x 和 y 之间的每个字符,包括两个字符。请注意,x 和 y 必须属于同一类型。当提供增量时,它被用作每个术语之间的差异。默认增量为 1 或 -1(视情况而定)。
为什么变量转换为小写?