我有网络项目/var/www/projects/some/long/path/strange-project-name
现在我想在终端输入:
webs str{TAB}
Run Code Online (Sandbox Code Playgroud)
它应该自动完成webs strange-project-name(基于ls /var/www/projects/some/long/path/),并且在执行命令后,pwd应该指向项目路径。cd strange-project-name自动完成功能有点智能
您将如何实现此功能?一些智能别名?函数在.bashrc? 脚本?
一些智能别名?
我们每分钟都会设置一个基于 cron 的 Java 程序调用。该 Java 程序调用是用 shell 脚本编写的,并设置为cron作业。每个调用的 Java 程序都定向到其自己单独的日志文件(使用日期和时间作为文件名,精确到分钟),如下所示:
调用javaprogram.sh
DATE=`date +%Y-%m-%d_%H-%M`
/usr/java/jdk1.6.0/bin/java -Xms512m -Xmx1024m -XX:+HeapDumpOnOutOfMemoryError MyJavaProgram 2>&1 >> $DATE.log | tee -a $DATE.err >> $DATE.log &
Run Code Online (Sandbox Code Playgroud)
例如,我可以使用以下命令随时查找当前正在运行的Java进程(MyJavaProgram):
[root@user ~]# ps -ef |grep MyJavaProgram
user 4321 1 0 Oct17 ? 00:00:17 /usr/java/jdk1.6.0/bin/java -Xms512m -Xmx1024m -XX:+HeapDumpOnOutOfMemoryError MyJavaProgram
user 5747 1 0 Oct17 ? 00:00:11 /usr/java/jdk1.6.0/bin/java -Xms512m -Xmx1024m -XX:+HeapDumpOnOutOfMemoryError MyJavaProgram
Run Code Online (Sandbox Code Playgroud)
我的问题是,我想找出当前正在执行的Java 进程 (MyJavaProgram) 正在写入的实际日志文件名。因此,例如,如果MyJavaProgram当前有 2 个进程正在执行,我想知道每个进程的日志文件名。在这种情况下,我感兴趣/想知道.log扩展文件,尽管有 2 个扩展名 -.log和.err …
我以 root 用户身份运行我的服务器,但尽管如此,当我运行命令时,ls我收到此错误:
bash: /bin/ls: Permission Denied.
Run Code Online (Sandbox Code Playgroud)
我试图更改此文件的权限,chmod但权限也被拒绝。这是什么原因?
我在下面的“ lxadmin ”目录中有许多 .conf 文件,并怀疑文本“ tanguay.info ”在其中之一的某个地方。
我执行这个命令:
cat /etc/httpd/conf/lxadmin/* | grep "tanguay.info"
Run Code Online (Sandbox Code Playgroud)
它告诉我:
cat: /etc/httpd/conf/lxadmin/forward: Is a directory
Include /home/httpd/tanguay.info/conf/lxadmin.tanguay.info
Run Code Online (Sandbox Code Playgroud)
所以我知道它在某处,但它没有告诉我在哪个文件中。
我怎样才能让它也告诉我文本位于哪个文件中?
我知道这个问题已经以某种方式被问到了,但我想找到一个很好的备忘单,特别是对于“ps”命令。我一直无法记住有用的选项,主要是因为我每天都使用“top”或“htop”,但“ps”在许多情况下仍然非常有用。
我在 csh 脚本中有以下相关行:
#!/bin/csh -xv
set dvar = `date +"^%m\/%d\/%y"`
set filedate = `date +%b%d%Y`
set grepstring = "grep "\"$dvar\"" </home/user/log/logfile"
set outstring = ">> serverlog_$filedate.txt"
grep "$dvar" <logfile >serverlog_$filedate.txt
ssh SERVER1 \"\"$grepstring\"\" $outstring
Run Code Online (Sandbox Code Playgroud)
本地日志文件上的第一个 grep 效果很好,但 SSH grep 将其输出写入远程目录。
该行是从批处理文件中出来的:
ssh SERVER1 ""grep "^01\/05\/10" <home/user/log/logfile"" >> serverlog_Jan052010.txt
Run Code Online (Sandbox Code Playgroud)
当我输入它时(当然少了一组引号)它工作正常,我只是无法从 csh 脚本中得到它。
你如何让这个命令输出到本地机器上的指定文件?
编辑: 这是由于 womble 起作用的最终结果:
#!/bin/csh
set dvar = `date +"%m\/%d\/%y"`
set filedate = `date +%b%d%Y`
grep "^$dvar" logfile > serverlog_$filedate.txt
ssh SERVER1 grep "^$dvar" /home/user/log/logfile >> serverlog_$filedate.txt
Run Code Online (Sandbox Code Playgroud) $ echo -e "test1\ntest2" > logfile
$ echo -e "test1\ntest2" >> logfile
$ cat logfile
test1
test2
test1
test2
$ rm logfile
$ crontab -e
* * * * * echo -e "test1\ntest2" >> logfile
$ sleep 160
$ cat logfile
-e test1
test2
-e test1
test2
Run Code Online (Sandbox Code Playgroud)
为什么我-e在输出中得到 ?crontab 和 bash 都在使用/bin/echo
我想从文件的每一行中删除一些东西,例如:-
我在文件中有以下路径:/var/lib/svn/repos/b1me/products/payone/generic/code/core/db/fs-type /var/lib/svn/repos/b1me/products/payone/generic /code/fees/db/fs-type /var/lib/svn/repos/b1me/products/payone/generic/code/merchantserver/db/fs-type
我想做点什么成为/var/lib/svn/repos/b1me/products/payone/generic/code/core/ /var/lib/svn/repos/b1me/products/payone/generic/code/fees// var/lib/svn/repos/b1me/products/payone/generic/code/merchantserver/
将文件的最后一部分路径存储在变量中?
我有路径,例如:-
$1=/path1/path2/path3
我想存储path3在变量中
x=path3
我如何做到:- 1-windows 2-unix
我想编写 bash 文件执行以下步骤:-
将文件复制server1到server2
如果(复制成功)
没做什么
如果(复制失败)
发送admin@company.com包含以下信息的电子邮件
文件名 [复制失败]