In Unix like file systems, the system uses 'hard links' to point to piece of data that you write to the disk.
So when you create a file, you also create its first hard link. You can create multiple hard links using 'ln' command.
When you "delete" a file using rm command, normally you are only deleting the hard link.
If all hard links to a particular file are deleted, then the system removes only the reference to the data and indicate that the blocks as free. But it won't actually delete the file.
If your deleted file is opened by any running process then it means you still have one link left to your file !!.
check if any process who works on your file using lsof command
$ lsof | grep "myfile.txt" COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME pgm-name 7099 root 25r REG 254,0 349 16080 /tmp/myfile.txt
Using the process and file descriptor you can try copying the file
$ cp /proc/7099/fd/25 /mydir/restore.txt
If lsof didn't list your file then you could try to locate your data reading directly from the device.
But this works only if blocks containing your files haven't been claimed for something else.
To make sure no one else over writes that free blocks, immediately remount the file system with read-only and then search for your file.
$ mount -o ro,remount /dev/sda1 $ grep -a -C100 "unique string" /dev/sda1 > file.txt
Replace /dev/sda1 with the device that the file was on and replace 'string' with the unique string in your file.
This does is it searches for the string on the device and then returns 100 lines of context and puts it in file.txt.
If you need more lines returned just adjust -C options as appropriate. Alternatively you can use -A, -B options with grep to print lines before and after the matched string.
You might get a bunch of extra garbage date, mostly some binary data but you can get your data back.
If you don't want this binary data then you can apply 'string' on the device and grep for the unique string
$ strings /dev/sda1 | grep -C100 "unique string" > file.txt